用rman 正確地刪除歸檔日誌

達芬奇的夢發表於2017-03-26

如何正確地刪除Archivelog:

Archivelog並不能直接得從OS層直接物理刪除,因為archivelog的相關資訊是記錄在controlfile中的,當物理刪除後不會改變controlfile的設定。並且在查詢相關的動態檢視(例如v$archived_log)時,該部分日誌仍然標註為存在。也就是說Oracle並不認為這些日誌被刪除了,所以在刪除archivelog的時候,需要我們在其他地方做一些設定。


一、使用RMAN清楚物理刪除後的記錄

可以使用RMAN來刪除archivelog,具體可以按以下步驟操作:

1、物理刪除archivelog
2、進入RMAN
3、crosscheck archivelog all;
4、delete expried archivelog all;

這樣就在一些Oracle的記錄中查不到相應的archivelog記錄了。


二、直接使用RMAN刪除archivelog

其實在RMAN中是可以使用命令直接將ARCHIVELOG刪除的,命令如下:

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

表示刪除7天以前的所有archivelog,但是這個命令的缺點是無法對archivelog進行細緻的劃分。


三、使用RMAN備份achivelog後刪除

這是一種最為穩妥的方法了,使用RMAN備份archivelog,備份後全部刪除

backup format '/u01/arch_%T_%s_%U' archivelog all delete input;
或者
backup database plus archivelog;


注:我在庫上設定了Streams後,使用RMAN刪除archivelog會導致報錯RMAN-08137: WARNING:

archive log not deleted as it is still needed. 不知道該如何解決,據說是10.2的一個bug,如果真

是bug的話,那隻能在OS層設定刪除,或用RMAN進行強制刪除了。


10g之後的版本,Oracle在RMAN中內建增加了一項歸檔檔案的刪除策略,終於,DBA可以僅透過一項配置就

解決該問題了。該策略對應兩個值:

APPLIED ON STANDBY:設定為該值時,當透過附加的DELETE INPUT子句刪除Standby資料庫仍需要的日誌

時,會提示RMAN-08137錯誤。不過使用者仍然可以手動地透過DELETE ARCHIVELOG方式刪除。

NONE:設定為該值時,則不啟用歸檔檔案的刪除策略。預設情況下就是NONE。

例如,啟用APPLIED ON STANDBY:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters are successfully stored

RMAN> run
{
backup archivelog all delete input format 'ZHSVR044_%d_set=%s_piece=%p_date=%T.ARC.rmn';
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31444259/viewspace-2136099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章