处理Dataguard日志传输gap一例

梦想的初衷 提交于 2020-01-22 01:00:43

制造gap

在主库上停止向备库传输日志

SQL>  alter system set log_archive_dest_state_2=defer  scope=memory;
System altered.

在主库进行几次日志切换,并将切换的日志删除,在错误备库的错误日志中可以看到:

Archived Log entry 20 added for thread 1 sequence 123 rlc 913820033 ID 0x55ec8100 dest 2:
Tue Jan 21 10:58:49 2020
Fetching gap sequence in thread 1, gap sequence 120-121
Tue Jan 21 11:00:40 2020
FAL[client]: Failed to request gap sequence
 GAP - thread 1 sequence 120-121
 DBID 1441600768 branch 913820033
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.
------------------------------------------------------------
Tue Jan 21 11:05:48 2020
Archived Log entry 21 added for thread 1 sequence 124 rlc 913820033 ID 0x55ec8100 dest 2:
RFS[5]: No standby redo logfiles created for thread 1 

在备库中检查视图发现:

select * from v$archive_gap;

   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
	 1	     120	    121

从主库进行增量SCN的备份

如果能找到日志文件,将其传输过去,注册即可。

SQL> alter database register logfile ‘<File-Specification>’;

如果找不到日志文件,可以按备库当前的SCN号从主库生成一个增量备份恢复到主库 参见文档:https://docs.oracle.com/cd/B19306_01/server.102/b14239/scenarios.htm#CIHIAADC
停止备库的日志应用

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

SQL>  select * from v$archive_gap;

   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
	 1	     120	    121

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

找出备库当前的SCN号:

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
    3085099

查看datafile中有无没有记录log的scn

SQL> SELECT MIN(FIRST_NONLOGGED_SCN) FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN>0;

MIN(FIRST_NONLOGGED_SCN)
------------------------


SQL> 

运气不错,没有,好了,现在确定最小的SCN是3085099,从主库以这个SCN开始进行增量备份。

RMAN> BACKUP INCREMENTAL FROM SCN 3085099  DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FORSTANDBY';

Starting backup at 21-JAN-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=46 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 21-JAN-20
channel ORA_DISK_1: finished piece 1 at 21-JAN-20
piece handle=/tmp/ForStandby_0iumhqn9_1_1 tag=FORSTANDBY comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 21-JAN-20
channel ORA_DISK_1: finished piece 1 at 21-JAN-20
piece handle=/tmp/ForStandby_0jumhqo2_1_1 tag=FORSTANDBY comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 21-JAN-20

[oracle@rhel65 orcl]$ ls -l /tmp/ForStandby_*
-rw-r----- 1 oracle oinstall 14376960 1月  21 14:34 /tmp/ForStandby_0iumhqn9_1_1
-rw-r----- 1 oracle oinstall 10027008 1月  21 14:34 /tmp/ForStandby_0jumhqo2_1_1

把备份的文件传输到备库的机器上

在备库上恢复

将传输的文件在备库上注册。

RMAN> catalog start with '/tmp/ForStandby';

searching for all files that match the pattern /tmp/ForStandby

List of Files Unknown to the Database
=====================================
File Name: /tmp/ForStandby_0jumhqo2_1_1
File Name: /tmp/ForStandby_0iumhqn9_1_1

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /tmp/ForStandby_0jumhqo2_1_1
File Name: /tmp/ForStandby_0iumhqn9_1_1

使用report schema检查备库是rman target,并检查文件名。

list backup
.....
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
8       Incr    9.55M      DISK        00:00:00     21-JAN-20      
        BP Key: 8   Status: AVAILABLE  Compressed: NO  Tag: FORSTANDBY
        Piece Name: /tmp/ForStandby_0jumhqo2_1_1
  Control File Included: Ckp SCN: 3104501      Ckp time: 21-JAN-20

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
9       Incr    13.70M     DISK        00:00:00     21-JAN-20      
        BP Key: 9   Status: AVAILABLE  Compressed: NO  Tag: FORSTANDBY
        Piece Name: /tmp/ForStandby_0iumhqn9_1_1
  List of Datafiles in backup set 9
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Incr 3104431    21-JAN-20 /u01/app/oracle/oradata/orcl/system01.dbf
  2       Incr 3104431    21-JAN-20 /u01/app/oracle/oradata/orcl/sysaux01.dbf
  3       Incr 3104431    21-JAN-20 /u01/app/oracle/oradata/orcl/undotbs01.dbf
  4       Incr 3104431    21-JAN-20 /u01/app/oracle/oradata/orcl/users01.dbf
  5       Incr 3104431    21-JAN-20 /u01/app/oracle/oradata/orcl/example01.dbf

这里注意检查control file的文件名是’/tmp/ForStandby_0jumhqo2_1_1’,下面恢复的时候要用这个文件名。

SQL>  startup force nomount;
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size		    2253824 bytes
Variable Size		  331353088 bytes
Database Buffers	   79691776 bytes
Redo Buffers		    4247552 bytes

RMAN>   restore standby controlfile from '/tmp/ForStandby_0jumhqo2_1_1';   

Starting restore at 21-JAN-20
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/orcl/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
Finished restore at 21-JAN-20

RMAN> ALTER DATABASE MOUNT;

database mounted
released channel: ORA_DISK_1

RMAN> RECOVER DATABASE NOREDO;

Starting recover at 21-JAN-20
Starting implicit crosscheck backup at 21-JAN-20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=28 device type=DISK
Crosschecked 1 objects
Finished implicit crosscheck backup at 21-JAN-20

Starting implicit crosscheck copy at 21-JAN-20
using channel ORA_DISK_1
Crosschecked 4 objects
Finished implicit crosscheck copy at 21-JAN-20

searching for all files in the recovery area
cataloging files...
no files cataloged

using channel ORA_DISK_1

Finished recover at 21-JAN-20

RMAN> 

noredo的意思上后续不要apply archivelog。
注意recover时要小心主库和备库的文件名不一样的情况,要用 SET NEWNAME指定不同的路径再recover database,可以先用report schema查询。

SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata2/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata3/cwmlite01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata4/drsys01';
SET NEWNAME FOR DATAFILE 5 TO '/oradata5/example01.dbf';

SET NEWNAME FOR TEMPFILE 1 TO '/disk2/temp01.dbf';

后续检查

SQL> select * from v$archive_gap;
no rows selected
SQL>  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!