透過查詢 DBA_DATA_FILES 與 DBA_FREE_SPACE 視圖,可精確掌握各表空間使用狀況:
SELECT a.file_id "FileNo",
a.tablespace_name "Tablespace_Name",
a.bytes "Total_Bytes",
a.bytes - SUM(NVL(b.bytes,0)) "Used_Bytes",
SUM(NVL(b.bytes,0)) "Free_Bytes",
ROUND(SUM(NVL(b.bytes,0))/a.bytes*100, 2) "%Free"
FROM dba_data_files a, dba_free_space b
WHERE a.file_id = b.file_id(+)
GROUP BY a.tablespace_name, a.file_id, a.bytes
ORDER BY a.tablespace_name;
擴展區超過 5 個視為過度擴展:
SELECT SUBSTR(segment_name,1,15) "Segment_Name",
segment_type "Type",
SUBSTR(tablespace_name,1,10) "Tablespace",
extents "Extents",
max_extents "Max_Extents"
FROM dba_segments
WHERE extents > 5 AND owner = 'JFCL'
ORDER BY segment_name;
imp userid=scott/tiger file=emp.dmp indexfile=emp.sql 產生 DDL 腳本imp userid=scott/tiger ignore=y file=emp.dmp 載入資料(ignore=y 關鍵)SELECT a.table_name "Table_Name",
MAX(a.max_extents) "MaxExtents",
MAX(b.extent_id)+1 "In_Use",
MAX(a.max_extents) - (MAX(b.extent_id)+1) "Unused"
FROM user_tables a, user_extents b
WHERE a.table_name = b.segment_name
GROUP BY a.table_name
ORDER BY 4;
當 Unused 值過小需立即處理擴充或調整 MAXEXTENTS。
SELECT * FROM dba_free_space
WHERE tablespace_name = 'SFSJTS'
ORDER BY block_id;
判斷邏輯:當前行的 BLOCK_ID + BLOCKS = 下一行 BLOCK_ID 表示連續空間。
ALTER TABLESPACE tablespace_name COALESCE;
執行後 SMON 會合併相鄰自由區塊,獲得更大連續空間,提升大型物件配置效率。