Oracle 資料庫的表空間使用狀況需定期監控,當空閒比例過低時,應及時擴充表空間以避免業務中斷。本文提供兩種常用的查詢 SQL,並說明表空間不足時的處理步驟。
此方法分別統計各表空間的總大小與剩餘空間,再計算空閒比例。
SELECT dbf.tablespace_name,
dbf.totalspace "總量(M)",
dbf.totalblocks 總塊數,
dfs.freespace "剩餘總量(M)",
dfs.freeblocks "剩餘塊數",
(dfs.freespace / dbf.totalspace) * 100 "空閒比例"
FROM (SELECT t.tablespace_name,
SUM(t.bytes) / 1024 / 1024 totalspace,
SUM(t.blocks) totalblocks
FROM dba_data_files t
GROUP BY t.tablespace_name) dbf,
(SELECT tt.tablespace_name,
SUM(tt.bytes) / 1024 / 1024 freespace,
SUM(tt.blocks) freeblocks
FROM dba_free_space tt
GROUP BY tt.tablespace_name) dfs
WHERE TRIM(dbf.tablespace_name) = TRIM(dfs.tablespace_name);
透過系統視圖 V$DATAFILE 與 V$TABLESPACE 獲取總空間,搭配 DBA_FREE_SPACE 計算已用與剩餘空間。
SELECT Total.name "Tablespace Name",
Free_space,
(total_space - Free_space) Used_space,
total_space
FROM (SELECT tablespace_name,
SUM(bytes / 1024 / 1024) Free_Space
FROM sys.dba_free_space
GROUP BY tablespace_name) Free,
(SELECT b.name,
SUM(bytes / 1024 / 1024) TOTAL_SPACE
FROM sys.v_$datafile a, sys.v_$tablespace b
WHERE a.ts# = b.ts#
GROUP BY b.name) Total
WHERE Free.Tablespace_name = Total.name;
SELECT * FROM dba_data_files t WHERE t.tablespace_name = 'ARD';
ALTER DATABASE DATAFILE '完整路徑的數據文件名稱' RESIZE ***M;
ALTER TABLESPACE 表空間名稱
ADD DATAFILE '完整路徑的數據文件名稱' ***M;