03.27 oracle表空間介紹

表空間概述

Oracle的表空間屬於Oracle中的存儲結構,是一種用於存儲數據庫對象(如:數據文件)的邏輯空間,是Oracle中信息存儲的最大邏輯單元,其下還包含有段、區、數據塊等邏輯數據類型。表空間是在數據庫中開闢的一個空間,用於存放數據庫的對象,一個數據庫可以由多個表空間組成。可以通過表空間來實現對Oracle的調優。(Oracle數據庫獨特的高級應用)

表空間的分類

  • 永久表空間:存儲數據庫中需要永久化存儲的對象,比如二維表、視圖、存儲過程、索引。

  • 臨時表空間:存儲數據庫的中間執行過程,如:保存order by數據庫排序,分組時產生的臨時數據。操作完成後存儲的內容會被自動釋放。臨時表空間是通用的,所的用戶都使用TEMP作為臨時表空間。一般只有tmp一個臨時表空間,如果還需要別的臨時表空間時,可以自己創建。

  • UNDO表空間:保存數據修改前的副本。存儲事務所修改的舊址,即被修改之前的數據。當我們對一張表中的數據進行修改的同時會對修改之前的信息進行保存,為了對數據執行回滾、恢復、撤銷的操作。

  • 系統表空間:系統表空間是所有數據庫必須創建的,是自動創建的。

對錶空間的操作

表空間的操作方式:

  • 字典管理:Oracle中的數據字典可以存儲所有的表空間分配信息,但是如果數據庫中所有的空間分配都放在數據字典中。容易引起字典爭用,而導致性能問題,這是Oracle調優的方向之一。

  • 本地管理:表空間分配不放在數據字典,而在每個數據文件頭部的第3到第8個塊的位圖塊,來管理空間分配。

查看錶空間使用情況

SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME,

ROUND(A.BYTES/(1024*1024*1024),2) AS "TOTAL(G)" ,

ROUND(B.BYTES/(1024*1024*1024),2) AS "USED(G)" ,

ROUND(C.BYTES/(1024*1024*1024),2) AS "FREE(G)" ,

ROUND((B.BYTES * 100) / A.BYTES,2) AS "% USED" ,

ROUND((C.BYTES * 100) / A.BYTES,2) AS "% FREE" FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C

WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME

AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;

計算表空間使用情況(考慮了數據文件自動增長情況):

SELECT UPPER(F.TABLESPACE_NAME) AS "表空間名稱",

ROUND(D.AVAILB_BYTES ,2) AS "表空間大小(G)",

ROUND(D.MAX_BYTES,2) AS "最終表空間大小(G)",

ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空間(G)",

TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,

2), '999.99') AS "使用比",

ROUND(F.USED_BYTES, 6) AS "空閒空間(G)",

F.MAX_BYTES AS "最大塊(M)"

FROM (

SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,

ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT DD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,

ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 4 DESC


分享到:


相關文章: