天天看點

通過RMAN删除歸檔日志不釋放問題

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

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; 

如果是RAC環境且archivelog

存儲在各節點的本地盤而未使用NFS,直接執行以上指令會導緻其它節點上的所有archivelog

都被辨別為無效而被删除。這是因為歸檔日志不是共享的,執行指令的

節點無法通路到其它節點上的歸檔日志。對于這種情況需要為每個節點配置設定一個

metainance 

channel

來解決。

RMAN > allocate channel for maintenance device type disk 

connect'sys/systemaudit@ora91'; 

connect'sys/systemaudit@ora92'; 

RMAN > crosscheck archivelog all;

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

本文轉自xiaocao1314051CTO部落格,原文連結: http://blog.51cto.com/xiaocao13140/1936519,如需轉載請自行聯系原作者