在使用RMAN備份資料庫歸檔日誌時,出現這樣的錯誤,"RMAN-8137: WARNING: archived log not deleted as it is still needed"。
這是備份歸檔日誌後跟著刪除已備份的歸檔檔案操作時失敗的提示。
RMAN備份刪除歸檔記錄檔的指令碼如下所示:
backup archivelog all format '/rman_bak/archivelog_%U.%T' delete all input;
這裡資料庫系統為Oracle 10.2.0.3,配置了兩個standby庫,組成一對二的data guard環境。
分析問題
這種RMAN-8137錯誤是指歸檔日誌在RMAN試圖刪除它們時,提示該歸檔記錄檔在standby庫還沒有應用,所以不能刪除。這是保護data guard的機制。
使用下列SQL檢查歸檔記錄檔是否應用。
select thread#, sequence#, completion_time,APPLIED
from v$archived_log
where dest_id = 2
and applied = 'NO'
and completion_time>sysdate-2
ORDER BY THREAD#,SEQUENCE#, COMPLETION_TIME;
結果顯示,最近兩天確實有很多歸檔日誌沒有應用。
在檢查v$archive_gap時,沒有發現任何記錄。
檢查data guard的配置環境時,沒有發現什麼錯誤。在該環境最初運行時,也出現過該錯誤,那是由於standby的初始化參數配置不正確導致。
在 Oracle Data Guard 10g 簡要配置 一文中,我描述了該錯誤資訊。
Oracle的metalink提示,這可能是一種bug,參見文檔Archive Log not Getting Deleted Using Rman With Rman-08137 [ID 964522.1]
給出瞭解決方法,強制移除已經備份過的歸檔記錄檔。
delete force archivelog until time 'trunc(sysdate-4)' backed up 1 times to device type disk;
但我又發現一個現象,使用這個SQL查詢歸檔日誌的應用情況時,
select thread#, sequence#, completion_time,APPLIED
from v$archived_log
where dest_id = 2
-- and applied = 'NO'
and completion_time>sysdate-2
ORDER BY THREAD#,SEQUENCE#, COMPLETION_TIME;
THREAD# SEQUENCE# COMPLETION_TIME APPLIED
1 1 81516 2012-6-4 11:17:11 NO
2 1 81517 2012-6-4 11:18:12 YES
3 1 81518 2012-6-4 11:19:15 YES
4 1 81519 2012-6-4 11:20:15 NO
--------------------------------------------------------
6 1 81521 2012-6-4 11:22:21 YES
--------------------------------------------------------
8 1 81523 2012-6-4 11:24:25 YES
9 1 81524 2012-6-4 11:25:25 NO
--------------------------------------------------------
19 1 81534 2012-6-4 11:35:44 YES
結果顯示,有的記錄檔的applied是YES,有的是NO。
這下無解了。有成功也有失敗的apply。
更多Oracle相關資訊見Oracle 專題頁面 http://www.bkjia.com/topicnews.aspx?tid=12