環境:HP rp7410,HP-UX 11.11,Oracle 8.1.7.4,表空間 TBS_TEST (90 張表,約 100 GB)。
使用 DROP TABLESPACE INCLUDING CONTENTS 刪除字典管理表空間極其緩慢,嚴重影響維運窗口。
SQL> SET LINESIZE 132 PAGESIZE 0 TIMING ON
SQL> DROP TABLESPACE TBS_TEST INCLUDING CONTENTS;
結果:已用時間極長 (原文截斷),字典管理模式下逐一刪除物件、更新 Data Dictionary 產生大量遞迴 SQL 與 Undo,導致效能極差。
UET$/FET$,刪除需逐筆清理。ALTER TABLESPACE TBS_TEST OFFLINE IMMEDIATE;rm /path/to/tbs_test_*.dbf (並行刪除多檔案)。-- 1. 找出該表空間所有段
SELECT owner, segment_name, segment_type
FROM dba_segments
WHERE tablespace_name = 'TBS_TEST';
-- 2. 產生 DROP 陳述式 (僅清理字典,不存取資料檔)
SELECT 'DROP ' || segment_type || ' ' || owner || '.' || segment_name || ';'
FROM dba_segments
WHERE tablespace_name = 'TBS_TEST';
-- 3. 執行上述 DROP 陳述式 (可分批、並行)
-- 4. 最後刪除表空間定義
DROP TABLESPACE TBS_TEST INCLUDING CONTENTS AND DATAFILES; -- 已無實體檔,秒級完成
-- 增加遞迴 SQL 效能
ALTER SYSTEM SET "_recursive_sql_max_depth" = 100 SCOPE=SPFILE; -- 隱含參數,諮詢 Oracle Support
-- 確保 Undo 表空間足夠大
-- 考慮暫時停用稽核/觸發器減少額外負載
CREATE TABLESPACE ... EXTENT MANAGEMENT LOCAL AUTOALLOCATE;DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL 線上遷移 (需表空間離線片刻)。| 方法 | 預估耗時 (100GB, 90表) | 備註 |
|---|---|---|
| 直接 DROP INCLUDING CONTENTS | 數小時 ~ 數天 | 字典遞迴 SQL 暴增 |
| 離線 + OS 刪檔 + 字典事後清理 | 10-30 分鐘 | OS 並行刪檔極快,字典清理輕量 |
| 本地管理表空間 (LMT) DROP | < 1 分鐘 | 最佳實踐,無痛刪除 |
字典管理表空間刪除效能差是架構限制,非 Bug。採用「離線 → OS 並行刪檔 → 輕量字典清理」可大幅縮短窗口;根治之道則是全面遷移至 本地管理表空間 (LMT),享受原生秒級 DROP 體驗。