本文轉載自無雙的小寶的博客:http://www.cnblogs.com/sopost/archive/2010/09/11/2190085.html
有時候因為網路或備份故障等原因,主機所產生的歸檔日誌無法傳到備機上,這個時候備機就產生了gap。對於這種情況,應該如何解決?
需要注意的是,一旦產生gap,即使gap之後的archive log能正常傳到standby庫中,standby庫並不會對後繼傳來的日誌檔做apply。只有通過對standby做recover把從產生gap的第一個檔到最新的archive log檔都apply了才能做到2個庫一致。
1.在primary庫中重新創建standby controlfile。並將它拷貝到standby庫中。位置與以前同。ALTER DATABASE CREATE STANDBY CONTROLFILE AS '[path][ctl_file_name].CTL';
2.進入備庫,select * from v$archive_gap;看產生gap的檔都有哪些?
2.shutdown standby庫(shutdown immediate)
3.將產生gap的那些歸檔檔拷貝到standby庫中。(如果主庫重新做過,如恢復,則將對主庫在resetlog之後的熱備檔及所有新產生的archive log倒回原來的位置.)
4.啟動standby庫到mount狀態,並進行手工同步:
$startup nomount
$alter database mount standby database;
$recover standby database; --(如果archive log產生 gap也是這麼做:把缺的archive log倒到standby庫種,然後執行。)
這裡注意如果歸檔日誌不存在的一定要去找回歸檔日誌,執行上面的命令后,我們選擇AUTO選項,讓standby自動去apply所有未apply的日誌
5.主輔庫一致後,將standby庫置回管理狀態:
alter database recover managed standby database disconnect from session;
檢查:
select * from v$archive_gap --看standby有沒有gap 如果有gap,看standby機器上是不是少了這些sequence#的log。如果需要做monitoring,可以採用以下sql語句:
select decode((select count(*) from (select low_sequence# from v$archive_gap union select 9999 from dual)) ,2,'Found Gaps,contact DBA as soon as possible!','No Gaps,Take it Easy') "Gap Status" from dual;
select * from v$archived_log where applied='NO' 表示沒有applied