資料庫使用了一段時間有時候突然會爆出表沒有足夠的空間,一般來說是使用者配額空間滿了,或者是資料表空間、磁碟空間滿了。大部分情況還是資料表空間滿了。
如果你經常看資料庫的警示日誌(日誌位置$find /u01 -iname "alert*.log")和OEM上的資訊很容易發現警告或者錯誤資訊。但是我們大部分項目沒有這樣的條件,只能在pl/sql中看看。
查詢資料表空間‘空間’使用方式sql語句:
SELECT F.TABLESPACE_NAME,
TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",
TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
TO_CHAR(T.MAX_SPACE,'999,999') "MAXSIZE(MB)",
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE,
CASE T.MAX_SPACE
WHEN 0 THEN 'autoextensible=no'
ELSE 'autoextensible=yes'
END AS AUTOEXTEN
FROM (
SELECT TABLESPACE_NAME,
ROUND (SUM (BLOCKS*(SELECT VALUE/1024
FROM V$PARAMETER
WHERE NAME = 'db_block_size')/1024)
) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) F,
(
SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES/1048576)) TOTAL_SPACE,
ROUND (SUM(MAXBYTES/1024/1024)) MAX_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
說明:TOTAL 資料表空間對應的資料檔案佔用磁碟空間
MAXSIZE 資料檔案可以增長的最大值
USED 資料庫實際使用的塊
FREE 空閑塊
TOTAL = USED + FREE oracle資料庫中資料區塊和空閑塊都佔用磁碟空間的。