在OracleData Guard環境中,一個備庫出現問題,需要重做。因爲之前的配置環境都是好的,只需將主庫的全庫備份恢復到備庫即可。但在數據文件還原完成後,介質恢復時在alert.log中提示有gap的日誌文件,RFS進程繼續去提取主庫上的其他的歸檔日誌文件。
alert.log文件中提示信息如下:
TueApr 9 14:20:56 2013
MediaRecovery Log +LOGDG/servdg2/archivelog/2013_04_09/thread_1_seq_71989.3551.812298053
MediaRecovery Waiting for thread 2 sequence 68042
Fetchinggap sequence in thread 2, gap sequence 68042-68094
TueApr 9 14:20:58 2013
RFS[1]:Archived Log:
'+LOGDG/servdg2/archivelog/2013_04_09/thread_2_seq_68052.2968.812298059'
TueApr 9 14:21:31 2013
Fetchinggap sequence in thread 2, gap sequence 68042-68051
TueApr 9 14:22:06 2013
FAL[client]:Failed to request gap sequence
GAP - thread 2 sequence 68042-68051
DBID 3658273059 branch 717104091
FAL[client]:All defined FAL servers have been attempted.
-------------------------------------------------------------
Check thatthe CONTROL_FILE_RECORD_KEEP_TIME initialization
parameteris defined to a value that is sufficiently large
enough tomaintain adequate log switch information to resolve
archiveloggaps.
-------------------------------------------------------------
備庫因日誌中斷而不能繼續進行介質恢復。我們的問題就是如何將這些日誌文件找回來。
在主庫中,判斷歸檔日誌狀況。
select *from v$archived_log b where b.SEQUENCE#>=68042 and b.THREAD#=2 andb.SEQUENCE#<=68051 and b.DEST_ID=1 and b.DELETED='YES';
通過這個SQL,確認這些歸檔日誌已經被刪除了。
歸檔日誌文件通過RMAN工具定期刪除的,因爲還原數據文件過程很長,在還原完成後,歸檔日誌已經備份移走了。
RMAN>list backup of archivelog from sequence 68042 until sequence 68051 thread 2;
在rman備份集中找到結果集,使用restore archivelog還原。
RMAN>restore archivelog from sequence 68042 until sequence 68051 thread 2;
這樣,備庫上又能繼續獲取這些歸檔日誌文件了。如果沒有,在主庫上將指向該備庫的log_archive_dest_state_*先defer再enable一下,算是激活這個服務。
因爲主庫是RAC的,所以會有多個實例會提示這種錯誤,依次解決即可。