應用場景:html
數據庫服務器A下的一張數據庫表重建過,而且數據已經遷移到新表空間下,現遺留了一些原有的表空間數據文件在服務器上,耗費資源,如圖所示:
linux
原數據庫表對應的數據文件:sql
遷移後數據文件:
數據庫
咱們的目的是,將這些沒用的dbf文件刪除,把/opt/oradata下的存儲釋放出來。
現說明一下處理的步驟:服務器
查詢表空間和數據文件對應關係oracle
發現CLRDBS01-14是重建前的,CLRDB01-60是重建後的。spa
執行語句,嘗試進行刪除,這塊Oracle報錯了。線程
drop tablespace CLRDBS14 INCLUDING CONTENTS AND DATAFILES;
oracle提示報錯:ORA-14404
code
此錯誤說明,該表空間下有分區表在用此表空間的數據文件,因此不能直接刪除表空間htm
既然報錯了,那咱們就看一下怎麼解決它。
查詢哪些表在佔用這個CLRDBS14:
SELECT x.table_name,x.partition_name,x.tablespace_name 表空間1, y.tablespace_name 表空間2 FROM dba_tab_partitions x, dba_tab_partitions y WHERE x.tablespace_name ='CLRDBS14' AND y.tablespace_name <> 'CLRDBS14' AND x.table_name=y.table_name;
經查詢,有5個表在使用,分別是:
TFA_ALARM_UNSTANDARD
TFA_ALARM_GCSS
TFA_ALARM_CLR_05061
TFA_ALARM_CLR_05062
TFA_ALARM_CLR_0506
分別查看一下這些表
TFA_ALARM_UNSTANDARD TFA_ALARM_GCSS 這兩張下面沒數據,導出建表語句,刪除。
TFA_ALARM_CLR_05061 TFA_ALARM_CLR_05062 TFA_ALARM_CLR_0506 這三張是以前clr表的備份,刪除。
再次執行刪除語句,刪除CLRDBS14
drop tablespace CLRDBS14 INCLUDING CONTENTS AND DATAFILES;
這次正常執行。
依次刪除CLRDBS01-CLRDBS13
登錄數據庫服務器下/opt/oradata,查看以前的clrdbs數據文件,已經在服務器上找不到了
執行bdf,觀察/opt/oradata大小
這塊特殊說明一下,空間不會立刻就釋放出來,由於linux OS系統bdf命令的機制是,只有當線程釋放完畢後,纔會釋放bdf命令內的空間。