頻繁的 DELETE、UPDATE、TRUNCATE、DROP 操作會導致表空間內產生大量不連續的自由空間,雖然總可用空間足夠,但無法滿足大物件(如大表、大索引)的連續空間需求,引發 ORA-01652 或 ORA-01653 錯誤。
-- 1. 導出(含壓縮選項)
exp system/password file=tablespace.dmp tables=table_name compress=Y
-- 2. 清空表
TRUNCATE TABLE table_name;
-- 3. 導入
imp system/password file=tablespace.dmp tables=table_name ignore=Y
優點:徹底整理,資料連續;缺點:需停機、耗時、不適用大表。
ALTER TABLESPACE users COALESCE;
將相鄰的自由區塊合併為較大區塊,不移動資料,線上可執行,適合 Locally Managed Tablespace (LMT)。
ALTER TABLESPACE users DEFAULT STORAGE (PCTINCREASE 1);
COALESCE。PCTINCREASE 與表空間自動擴展無關。表空間自動增長由
AUTOEXTEND ON控制,屬線性增長;PCTINCREASE 僅影響區段下一個 Extent 的大小計算(幾何級數),以及 SMON 是否自動合併自由空間。
COALESCE 線上整理,無停機風險。PCTINCREASE 設為 1,交給 SMON 背景處理。TABLE_EXISTS_ACTION=REPLACE。DBA_FREE_SPACE、DBA_TABLESPACES 定期檢視碎片率。