Aix下刪除Oracle資料表空間以及對應的資料檔案後空間不釋放
今天例行Oracle資料庫維護時,因為一個檔案系統已經達到82%,而且又要建立新的分區資料表空間,所以刪掉了該分區表最前面兩個分區,然後刪掉對應的資料表空間及資料檔案(約15G),用下面語句:
alter table tm_bus_site_his drop partition p_site200806_a;
...
DROP TABLESPACE tm_index200805_a INCLUDING CONTENTS and datafiles cascade constraints;
...
刪掉以後 發現該檔案系統仍然是82%,佔用的儲存空間仍舊沒有釋放,是什麼原因呢?
從網上搜尋到下面的解釋:
一般說來不會出現rm掉不釋放空間的情況
出現這樣的情況一般是由於有進程在向檔案中寫資料或有進程正在訪問檔案
而此時rm檔案則會出現不釋放空間的情況。
理解這樣的問題需要理解rm的操作內含
一個檔案的存放有資料部分和指標部分,而指標位於檔案系統的頭
刪除作業系統的一個檔案與oracle drop表的實質有些相似
處理掉指標,檔案資料部分佔用的空間就可以寫入新內容了
之所以出現rm不釋放即為有進程在用這個檔案而引起作業系統認為這個檔案未實質釋放,從而df或bdf空間統計不正確
這一類問題的解決方案一般說來可以重啟作業系統,重新umount及mount那個檔案系統
這並不是一個好方法
建議的操作方法如下:
1、下載一個lsof軟體裝上,google上可以搜到
2、找到正在用被刪檔案的進程
lsof | grep deleted
3、kill掉相應的進程空間就釋放了
其它建議:
1、清理alert.log listerner.log這些記錄檔時最好用">檔案"這樣的操作方式,不要用rm。
2、清理歸檔日誌最好用backup ... delete input這樣的方式。
3、如果你的作業系統總出現rm不釋放空間的問題,該請sa好好查查系統問題了,同時可以在rm前用lsof看一下有無進程在用這個檔案。
4、解決問題的方法很多,最好不要用重啟資料庫或重啟作業系統這樣的方法。