standby缺失primary歸檔,手工同步恢復

zecaro發表於2010-11-16

         由於誤刪physical standby上來自primary db的歸檔日誌,physical standby缺少還未應用到的archive log。

          此時,primary db也沒有歸檔。考慮除了重建 standby外的其他方法。因為備份中保留壓縮備份後的歸檔備份,所以,嘗試從備份中恢復了archive log,然後實驗了一下手工recover。期間發現standby的control file中沒有backup set的資訊(有archive log的),以前沒注意過這個,在此記錄一下。此外,切換成自動模式後,報 Failed to request gap sequence,其實gap的都已經存在在standby上了。這裡需要手工註冊。

 

恢復archive log到預設位置

RMAN>RESTORE ARCHIVELOG FROM SEQUENCE  13042  UNTIL SEQUENCE 13119;

(或 RMAN>RESTORE ARCHIVELOG FROM SEQUENCE  13042;)

SQL> startup nomount;

SQL> alter database mount standby database;

SQL> RECOVER AUTOMATIC STANDBY DATABASE;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

standby上註冊


ALTER DATABASE REGISTER LOGFILE  '/data/archive/test/1_12844_690562326.dbf';

---附上一個批次生成
select 'ALTER DATABASE REGISTER LOGFILE  ''/data/archive/test/1_'||(rownum+12844 )||'_690562326.dbf'';'

from all_objects
where rownum <= 98;


另,來自http://zhaolinjnu.blog.sohu.com/55088738.html

除了上面的automatic方式,也可以執行recover cancel的恢復方式:
SQL> RECOVER STANDBY DATABASE UNTIL CANCEL;

這種方式有一個好處是,可以應用聯機日誌資訊,有時主庫因為儲存損壞,可以複製本地硬碟的聯機日誌到備用庫,而複製的這些聯機日誌存放的地方也不是資料庫預設的地方,如果讓oracle自動恢復,它會找不到這些聯機日誌,這時就需要手動指定聯機日誌的路徑,讓其恢復。待恢復完成,可以強制啟用備用庫。

 以上兩種手動恢復模式automatic和 CANCEL都不需要對歸檔日誌進行註冊,自動管理恢復模式 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION 是需要的


檢視相關資訊,來自http://space.itpub.net/308563/viewspace-198067

SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
 
PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
ARCH      CONNECTED
MRP0      WAIT_FOR_GAP

SQL> select * from v$archive_gap;
 
   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
         1          5330           5331


ON PRIMARY:
SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
 
PROCESS   STATUS
--------- ------------
ARCH      CLOSING
ARCH      CLOSING
LGWR      CLOSING


SQL> SHOW PARAMETER ARCHIVE

log_archive_dest_2                   string      SERVICE=STANDBY affirm lgwr ma
                                                 x_failure=1 noreopen net_timeout=60

SQL> select message from v$dataguard_status;

MESSAGE
--------------------------------------------------------------------------------
ORA-16198: LGWR received timedout error from KSR
LGWR: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (16198)
LGWR: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
LGWR: Network asynch I/O wait error 16198 log 2 service 'STANDBY'
ARC1: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3135)
ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
PING[ARC1]: Error 3135 when pinging standby STANDBY.
LGWR: Failed to archive log 2 thread 1 sequence 5330 (16198)
LGWR: Closing remote archive destination LOG_ARCHIVE_DEST_2: 'STANDBY' (error 16
198)

SQL> SELECT PROCESS,STATUS FROM V$MANAGED_STANDBY;

PROCESS   STATUS
--------- ------------
ARCH      CLOSING
ARCH      OPENING
LGWR      WRITING

SQL> create or replace directory ARCHDIR as '+dgarch/wms/archivelog/2008_02_29';

Directory created.

SQL>  create or replace directory TEMPDIR as '/exp/tmparch';

Directory created.

SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('ARCHDIR','thread_1_seq_5331.291.647960215','TEMPDIR','1_5331_620945476.arc');

PL/SQL procedure successfully completed.

SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('ARCHDIR','thread_1_seq_5330.304.647958993','TEMPDIR','1_5330_620945476.arc');

PL/SQL procedure successfully completed.

其它,primary/standby環境:

x86_64

linux

oracle 10.2.0.4.0

記於2010年11月16日 

最後更新 2010年12月27日  
 

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

相關文章