1. 程式人生 > >通過RMAN刪除歸檔日誌不釋放問題

通過RMAN刪除歸檔日誌不釋放問題

軟件 oracle 空間 google 操作系統


我的生產環境中歸檔日誌滿了,通過如下腳本刪除後,空間並沒有釋放,看有網友有相關的解決思路,可以跟大家一起分享一下:

RMAN> crosscheck archivelog all;

RMAN> delete expried archivelog all;


關於rm刪除文件空間不釋放的問題可以寫成一個FAQ了

一般說來不會出現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、解決問題的方法很多,最好不要用重啟數據庫或重啟操作系統這樣的方法


其它解決方法如下:

一位網友遇到一個問題,他在生產系統執行RMAN命令刪除歸檔日誌時發現歸檔日誌並未被刪除。
但在測試環境中這個命令卻沒有問題。
刪除的命令是:
delete archivelog all completed before ‘xxxxx‘;
執行後檢查
ASM發現有很多歸檔日誌並未被刪除。
實際上並不是
RMAN命令本身有問題。RMAN
刪除歸檔日誌的依據是
controlfile中記錄的歸檔日誌,
而不是ASM中實際存在的歸檔日誌。

controlfile
中有一部分內容是可以循環使用的,其中歸檔日誌信息和備份信息就使用的是這部分空間。
Oracle用參數control_file_record_keep_time來設置控制文件中可重用的記錄在多久以後可以被重用。
通常這個參數的缺省值是7。這就意味著7天前的歸檔日誌和備份信息可能在控制文件中已經不存在了。而
RMAN命令只能刪除控制文件中記錄的歸
檔日誌,對於那些很早以前的歸檔日誌,它們在控制文件中的信息已經不存在了,
RMAN就無法刪除了。對於這部分歸檔日誌,只能其它命令從ASM或文件系統上刪除。
另外需要說明的是,用RMAN
刪除歸檔日誌時,並不會刪除控制文件中對應的歸檔日誌信息,而只
是在控制文件中設置delete狀態,即v$archived_log的deleted列。刪除歸檔日誌時,建議使用
RMAN命令來刪除。如果不使用
RMAN命令而用操作系統命令或
ASM命令刪除日誌後,最好更新一下控制文件信息,方法是:
RMAN> crosscheck archivelog all;
RMAN> delete expried archivelog all;
如果是RAC環境且archivelog
存儲在各節點的本地盤而未使用NFS,直接執行以上命令會導致其它節點上的所有archivelog
都被標識為無效而被刪除。這是因為歸檔日誌不是共享的,執行命令的
節點無法訪問到其它節點上的歸檔日誌。對於這種情況需要為每個節點分配一個
metainance
channel
來解決。
RMAN > allocate channel for maintenance device type disk
[email protected];
RMAN > allocate channel for maintenance device type disk
[email protected];
RMAN > crosscheck archivelog all;
RMAN> delete expried archivelog all;


原文:http://www.itpub.net/thread-934741-2-1.html

通過RMAN刪除歸檔日誌不釋放問題