天天看點

【Oracle】基于SCN的增量備份修複DataGuard GAP1. 首先來模拟Gap的産生2. 檢視報錯3. 基于SCM的增量備份修複GAP4. 确認修複成功

1. 首先來模拟Gap的産生

1.1. 備庫關閉:

[email protected]_s>shutdown immediate;

1.2. 主庫切換日志

[email protected]>select SEQUENCE#,ARCHIVED,STATUS from v$log;

 SEQUENCE# ARC STATUS

---------- --- ----------------

        61 YES ACTIVE

        62 YES ACTIVE

        63 NO  CURRENT

[email protected]>alter system archive log current;

System altered.

[email protected]>select SEQUENCE#,ARCHIVED,STATUS from v$log;

 SEQUENCE# ARC STATUS

---------- --- ----------------

        64 NO  CURRENT

        62 YES ACTIVE

        63 YES ACTIVE

剛才current的日志已經歸檔

1.3. 删除歸檔,産生UNRESOLVABLE GAP

現在删除63号歸檔

[[email protected] arch]$ mv 1_63_909786801.dbf 1_63_909786801.dbf.bak

2. 檢視報錯

2.1. 啟動備庫

[email protected]_s>startup

2.2. 檢視備庫的alert

Media Recovery Log /u01/app/oracle/arch/1_62_909786801.dbf

Media Recovery Waiting for thread 1 sequence 63

Fetching gap sequence in thread 1, gap sequence 63-63

Fri May 06 05:28:09 2016

FAL[client]: Failed to request gap sequence

 GAP - thread 1 sequence 63-63

 DBID 3866310445 branch 909786801

FAL[client]: All defined FAL servers have been attempted.

------------------------------------------------------------

Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization

parameter is defined to a value that's sufficiently large

enough to maintain adequate log switch information to resolve

archivelog gaps.

------------------------------------------------------------

2.3. 主庫查詢SWITCHOVER_STATUS

[email protected]>SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

--------------------

UNRESOLVABLE GAP

為UNRESOLVABLE GAP,說明此時的GAP需要我們自己手工去修複,無法自動修複,可自動修複的GAP顯示為RESOLVABLE GAP

3. 基于SCM的增量備份修複GAP

3.1. 在備庫上查詢current scn号

[email protected]_s>select current_scn from v$database;

CURRENT_SCN

-----------

    2567388

3.2. 到主庫去進行基于此SCN的增量備份

RMAN> BACKUP INCREMENTAL FROM SCN 2567388 DATABASE FORMAT '/u01/app/oracle/oradata/tmp/ora11_scn_%U' tag 'For Standby Gap';

3.3. 傳輸到備庫:

[[email protected] tmp]$ scp * standby:/u01/app/oracle/oradata/tmp

[email protected]'s password:

ora11_scn_0kr54hvk_1_1                                                                                                               100%  125MB 125.2MB/s   00:01    

ora11_scn_0lr54l99_1_1                                                                                                               100% 9664KB   9.4MB/s   00:00  

3.4. 備庫重新啟動到mount,并取消日志應用

[email protected]_s>shutdown immediate;

[email protected]_s>startup mount;

[email protected]_s>alter database recover managed standby database cancel;

3.5. 注冊剛才傳輸過來的備份集

RMAN> CATALOG START WITH '/u01/app/oracle/oradata/tmp';

3.6. recover備庫

RMAN> recover database noredo;

恢複完畢,這時我們可以觀察備庫的alert日志:

Incremental restore complete of datafile 4 /u01/app/oracle/oradata/dgtest_s/users01.dbf

  checkpoint is 2893208

  last deallocation scn is 3

Incremental restore complete of datafile 3 /u01/app/oracle/oradata/dgtest_s/undotbs01.dbf

  checkpoint is 2893208

  last deallocation scn is 973300

Incremental restore complete of datafile 5 /u01/app/oracle/oradata/dgtest_s/example01.dbf

  checkpoint is 2893208

  last deallocation scn is 942056

Mon May 09 05:20:25 2016

Incremental restore complete of datafile 2 /u01/app/oracle/oradata/dgtest_s/sysaux01.dbf

  checkpoint is 2893208

  last deallocation scn is 956093

Incremental restore complete of datafile 1 /u01/app/oracle/oradata/dgtest_s/system01.dbf

  checkpoint is 2893208

  last deallocation scn is 955346

發現資料檔案的scn号都已經重新重新整理,但是此時還不能重新起庫,需要重新從主庫生成一個standby controlfile。

3.7. 主庫備份控制檔案

RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/app/oracle/oradata/tmp/ctl.bak';

3.8. 傳輸standby控制檔案到備庫

[email protected]'s password:

ctl.bak                                                                                                                              100% 9664KB   9.4MB/s   00:00

3.9. 備庫恢複standby控制檔案

備庫庫起到nomount階段:

[email protected]_s>shutdown immediate

[email protected]_s>startup nomount;

rman恢複控制檔案

RMAN> RESTORE STANDBY CONTROLFILE FROM '/u01/app/oracle/oradata/tmp/ctl.bak';

3.10. mount備庫,并取消日志應用

[email protected]_s> alter database mount;

[email protected]_s>alter database recover managed standby database cancel;

3.11. 清空備庫日志組

[email protected]_s>ALTER DATABASE CLEAR LOGFILE GROUP 1;

Database altered.

注:如果采用了standby log模式,不需要清空,如果清空會出現

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;

ALTER DATABASE CLEAR LOGFILE GROUP 1

*

ERROR at line 1:

ORA-19527: physical standby redo log must be renamed

ORA-00312: online log 1 thread 1: '/u01/oradata/badly9/redo01.log'

說明:如果沒有采用standby log模式,有幾組需要清空幾組

3.12. 備庫重設flashback

[email protected]_s>ALTER DATABASE FLASHBACK OFF;

[email protected]_s>ALTER DATABASE FLASHBACK ON;

3.13. 備庫開始應用日志

[email protected]_s>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

4. 确認修複成功

在主庫中執行

[email protected]>alter system switch logfile;

分别主備庫中執行select max(sequence#) from v$archived_log;如果一緻标示修複成功

[email protected]>select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)

--------------

            81

[email protected]_s>select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)

--------------

            81

至此GAP修複完畢。

繼續閱讀