Oracle DataGuard归档日志丢失处理方法

某数据库配置了Physical DataGuard(以下简称dg),由于没有检查,所以在主库上把归档日 删除了,而备库又没有完全应用,所以导致备库一直停留在之前的归档日志中。

主库检查,发现dest_id为的25号日志就丢失了.

PRIMARY> select dest_id,sequence#,applied,status,first_change#,next_change# from v$archived_log                         
  where sequence#>20 order by dest_id,sequence#; 


    DEST_ID  SEQUENCE# APPLIED S FIRST_CHANGE# NEXT_CHANGE#
 ---------- ---------- --------- - ------------- ------------
 1  21 NO D 1765541      1765764
 1  22 NO D 1765764      1768228
 1  23 NO D 1768228      1768269
 1  24 NO D 1768269      1768400
 1  25 NO X 1768400      1768516
 1  26 NO X 1768516      1768531
 1  27 NO X 1768531      1768611
 2  21 YES A 1765541      1765764
 2  22 YES A 1765764      1768228
 2  23 YES A 1768228      1768269
 2  24 NO A 1768269      1768400

DEST_ID  SEQUENCE# APPLIED S FIRST_CHANGE# NEXT_CHANGE#
 ---------- ---------- --------- - ------------- ------------
 2  26 NO A 1768516      1768531
 2  27 NO A 1768531      1768611

所以备库一直无法使用.这种情况下要么就重做整个备库,或是从备库断点的日志那个时候起恢复数据库.
由于数据库比较大,决定采用第二种方案;

在备库上,我们查看当前的数据文件最大的SCN

STANDBY> select name,file#,checkpoint_change# from v$datafile order by checkpoint_change#;

NAME    FILE# CHECKPOINT_CHANGE#
 ------------------------------------------------------- ---------- ------------------
 /u01/app/Oracle/oradata/dc1stby/undotbs01.dbf 4      1768269
 /u01/app/oracle/oradata/dc1stby/sysaux01.dbf 3      1768269
 /u01/app/oracle/oradata/dc1stby/system01.dbf 1      1768269
 /u01/app/oracle/oradata/dc1stby/users01.dbf 6      1768269

在主库上做一个增量SCN备份,起始的位置就是备库数据文件的最小SCN号.

[oracle@newplat ~]$ rman target / nocatalog

[oracle@newplat ~]$ $ORACLE_HOME/bin/rman target / nocatalog

RMAN> run
 2> {
 3> allocate channel c3 device type disk;
 4>  backup as compressed backupset incremental from scn 1768269 database format '/home/oracle/bak/%U';
 5> release channel c3;
 6> }

released channel: ORA_DISK_1
 allocated channel: c3
 channel c3: SID=42 device type=DISK
 .....................................................
 including current control file in backup set
 channel c3: starting piece 1 at 03-APR-16
 channel c3: finished piece 1 at 03-APR-16
 piece handle=/home/oracle/bak/0rr22q7u_1_1 tag=TAG20160403T022709 comment=NONE
 channel c3: backup set complete, elapsed time: 00:00:01
 Finished backup at 03-APR-16

备份完成后,我们通过SCP很快把备份文件传到备库的机器上来

[oracle@newplat bak]$ scp *1_1 192.168.56.22:/home/oracle/bak

这时候我们需要关闭备库,然把把实例启动到nomount关态

STANDBY> shutdown immediate;
 ORA-01109: database not open

Database dismounted.
 ORACLE instance shut down.
 STANDBY> startup nomount;
 ORACLE instance started.

Total System Global Area 1224736768 bytes
 Fixed Size    2923824 bytes
 Variable Size  939524816 bytes
 Database Buffers  268435456 bytes
 Redo Buffers  13852672 bytes

实例启动到mount状态后,我们进入备库的rman,这时候需要恢复控制文件,原备库的控制文件因为
 包含了redo apply老的应用信息所以不能用了.

[oracle@dg2 bak]$ rman target / nocatalog

RMAN> restore standby controlfile from '/home/oracle/bak/0rr22q7u_1_1';

Starting restore at 03-APR-16
 allocated channel: ORA_DISK_1
 channel ORA_DISK_1: SID=23 device type=DISK
 ............................................

很快控制文件就了恢复完成了,我们打开另一个窗口,通过sqlplus把备库以standby的方式mount起来

STANDBY> alter database mount standby database;

Database altered.

数据库mount起来后,我们返回到rman提示符,这个时候我们可以对传过来的备份文件并进行编目了.这样我们在下一步操作中,就可以使用这些文件来行恢复

RMAN> catalog start with '/home/oracle/bak';

searching for all files that match the pattern /home/oracle/bak

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/659fda08b2192ab139be14a94e07d57d.html