| 版本 | 支援 DROP DATAFILE | 數據字典清理 | 備註 |
|---|---|---|---|
| 10gR1 及以前 | 不支援 | 不清理(殘留記錄) | 只能刪除整個表空間 |
| 10gR2+ | 支援 | 完全清理 | 文件必須為空(無段/區塊) |
| 12c+ | 支援 + ONLINE | 完全清理 | 可在線操作,不影響業務 |
SELECT * FROM v$version WHERE banner LIKE 'Oracle Database%';
-- 確認 10.2.0.1.0 或更高
ALTER TABLESPACE users ADD DATAFILE '/opt/oracle/oradata/eygle/users02.dbf' SIZE 10M;
-- 驗證文件號
SELECT file#, name FROM v$datafile WHERE name LIKE '%users02%';
-- FILE#=5
-- 方法 A:查區塊佔用
SELECT segment_name, file_id, blocks
FROM dba_extents
WHERE file_id = 5;
-- no rows selected → 空文件
-- 方法 B:查段
SELECT * FROM dba_segments WHERE header_file = 5;
-- no rows selected
⚠️ 若有數據,必須先移動段或縮容表空間,不可強行刪除。
ALTER TABLESPACE users DROP DATAFILE '/opt/oracle/oradata/eygle/users02.dbf';
-- Tablespace altered.
SELECT file_name, file_id FROM dba_data_files WHERE tablespace_name = 'USERS';
-- 僅剩 users01.dbf (FILE_ID=4),users02 記錄已消失
SELECT file#, name FROM v$datafile WHERE name LIKE '%users02%';
-- no rows selected
官方建議:保留原地,勿動。 SYSTEM 表空間核心字典對象極多,刪除文件極高風險導致字典不一致。若必須處理,請開 SR 請 Oracle Support 協助。
-- 方案 A:移動段到其他文件(需表空間多文件)
ALTER TABLE t MOVE TABLESPACE users; -- 觸發段遷移
ALTER INDEX idx REBUILD; -- 索引同步
-- 方案 B:縮容表空間(12c+ SHRINK SPACE)
ALTER TABLE t ENABLE ROW MOVEMENT;
ALTER TABLE t SHRINK SPACE;
-- 方案 C:導出/重建表空間(大表慎用)
EXPDP ... TABLES=t ...;
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;
-- 重建表空間並導入
-- ASM 文件名格式
ALTER TABLESPACE users DROP DATAFILE '+DATA/orcl/datafile/users02.123.456';
-- 同樣要求文件為空,ASM 會自動釋放磁盤空間
rm。ALTER TABLESPACE temp DROP TEMPFILE ...。BACKUP CONTROLFILE)。10gR2 引入 DROP DATAFILE 徹底解決了「誤加文件無法清理」的歷史痛點。核心鐵律:**文件必須為空**。操作前驗證 DBA_EXTENTS、DBA_SEGMENTS 雙重確認,操作後驗證 DBA_DATA_FILES、V$DATAFILE 雙重清理,方可關單。