SELECT a.file_id "File#",
a.tablespace_name "Tablespace",
ROUND(a.bytes/1024/1024,1) "Size_MB",
ROUND((a.bytes - NVL(SUM(b.bytes),0))/1024/1024,1) "Used_MB",
ROUND(NVL(SUM(b.bytes),0)/1024/1024,1) "Free_MB",
ROUND(NVL(SUM(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, a.file_id;
| Free % | 狀態 | 行動 |
|---|---|---|
| > 50% | 充裕 | 觀察,若長期 > 80% 考慮縮減 (Resizing/Export-Import) |
| 20% ~ 50% | 正常 | 例行監控,規劃擴容時程 |
| 15% ~ 20% | **預警** | **高插入/更新表空間:立即擴容** (Add Datafile / Resize / Autoextend) |
| < 15% | **危險** | **緊急擴容**,否則面臨 ORA-01653/01654 |
| 靜態表空間 > 20% | 過度配置 | 評估縮減 (Export/Import 或 12c+ ALTER TABLESPACE ... SHRINK SPACE) |
**SYSTEM/SYSAUX/UNDO/TEMP** 空間管理策略不同:UNDO 依UNDO_RETENTION與RETENTION GUARANTEE;TEMP 依排序/雜湊峰值;SYSTEM 極難縮減,建議預留 30%+。
SELECT segment_name, segment_type, tablespace_name, extents, max_extents
FROM dba_segments
WHERE extents > 5
AND owner = 'APP_USER'
ORDER BY extents DESC;
MAX_EXTENTS 達上限 (Dictionary Managed) 或 **檔案無法自動擴展** (Autoextend OFF / 達 Maxsize)。
exp system/manager file=ts_exp.dmp tablespaces=USERS
imp system/manager file=ts_exp.dmp tablespaces=USERS ignore=y
-- 整理行遷移、鏈接、釋放 High Water Mark 以下空間
-- 前提:ASSM 表空間、啟用 Row Movement
ALTER TABLE big_table ENABLE ROW MOVEMENT;
ALTER TABLE big_table SHRINK SPACE COMPACT; -- 先壓縮 (不調整 HWM)
ALTER TABLE big_table SHRINK SPACE; -- 再釋放空間
-- 索引同步重建
ALTER INDEX idx_big_table SHRINK SPACE;
ALTER TABLE big_table MOVE TABLESPACE users_new;
ALTER INDEX idx_big_table REBUILD ONLINE;
INSERT INTO ts_space_history
SELECT SYSTIMESTAMP, tablespace_name, file_id,
ROUND(bytes/1024/1024,1),
ROUND((bytes-NVL(free_bytes,0))/1024/1024,1),
ROUND(NVL(free_bytes,0)/1024/1024,1),
ROUND(NVL(free_bytes,0)/bytes*100,2)
FROM (
SELECT a.tablespace_name, a.file_id, a.bytes,
NVL(SUM(b.bytes),0) free_bytes
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
);
-- 資料檔啟用自動擴展,設定合理 MAXSIZE
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/PROD/users01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE 30G;
-- 監控 Autoextend 觸發頻率
SELECT file_name, autoextensible, maxbytes, bytes
FROM dba_data_files
WHERE autoextensible = 'YES';
-- 啟用自動段建議 (Segment Advisor)
SELECT * FROM dba_advisor_tasks WHERE task_name LIKE 'AUTO_SEG_ADV%';
-- 定期檢視建議報告
SELECT * FROM dba_advisor_findings WHERE task_name = 'AUTO_SEG_ADV_...';
空間管理核心三步走:**監控水位 (Free%) → 預警擴容 (Autoextend/手動) → 定期整理 (Shrink/Reorg)**。LMT + ASSM + Autoextend + Segment Advisor 組合,**讓 95% 空間管理自動化**,DBA 僅需關注異常告警與長期容量規劃。建立 TS_SPACE_HISTORY 歷史表,支援趨勢分析與採購決策。