一、模拟产生GAP
备库停止DG同步进程:
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
主库多次切换日志:
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
主库删除或者移动最近归档日志文件:
[oracle@dgdb1 archive]$ mv 1_87_1024761634.dbf 1_88_1024761634.dbf 1_89_1024761634.dbf /home/oracle
备库应用归档日志:
SQL> startup
ORACLE instance started.
Total System Global Area 584568832 bytes
Fixed Size 2255432 bytes
Variable Size 226493880 bytes
Database Buffers 352321536 bytes
Redo Buffers 3497984 bytes
Database mounted.
Database opened.
SQL> alter database recover managed standby database using current logfile disconnect from session;
备库查询GAP:
SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 87 89
SQL> SELECT max(sequence#) from v$archived_log where applied='YES';
MAX(SEQUENCE#)
--------------
86
主库查询缺失的归档日志:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 87 AND 89 ;
NAME
--------------------------------------------------------------------------------
/oracle/archive/1_87_1024761634.dbf
/oracle/archive/1_88_1024761634.dbf
/oracle/archive/1_89_1024761634.dbf
主库把缺失的归档日志传输到备库:
[oracle@dgdb1 ~]$ scp 1_87_1024761634.dbf oracle@dgdb2:/home/oracle
oracle@dgdb2's password:
1_87_1024761634.dbf 100% 2048 2.0KB/s 00:00
[oracle@dgdb1 ~]$ scp 1_88_1024761634.dbf oracle@dgdb2:/home/oracle
oracle@dgdb2's password:
1_88_1024761634.dbf 100% 3584 3.5KB/s 00:00
[oracle@dgdb1 ~]$ scp 1_89_1024761634.dbf oracle@dgdb2:/home/oracle
oracle@dgdb2's password:
1_89_1024761634.dbf 100% 1536 1.5KB/s 00:00
二、修复GAP
备库注册从主库传输过来的归档日志:
SQL> ho ls /home/oracle
1_87_1024761634.dbf 1_88_1024761634.dbf 1_89_1024761634.dbf incre_0t0t5vb9_1_1 incre_0u0t5vb9_1_1 incre_0v0t5vdb_1_1 standby.ctl
SQL>
SQL>
SQL> alter database register logfile '/home/oracle/1_87_1024761634.dbf';
Database altered.
SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 88 89
SQL> alter database register logfile '/home/oracle/1_88_1024761634.dbf';
Database altered.
SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 88 89
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 86
Next log sequence to archive 0
Current log sequence 91
SQL> SELECT max(sequence#) from v$archived_log where applied='YES';
MAX(SEQUENCE#)
--------------
88
SQL> alter database register logfile '/home/oracle/1_89_1024761634.dbf';
Database altered.
SQL> select * from v$archive_gap;
no rows selected
主库切换日志验证GAP是否修复完成:
SQL> alter system switch logfile;
System altered.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 90
Next log sequence to archive 92
Current log sequence 92
备库查看归档日志同步情况:
Tue Jun 21 20:32:44 2022
Tue Jun 21 20:32:44 2022
RFS[3]: Selected log 5 for thread 1 sequence 92 dbid -400525088 branch 1024761634
Media Recovery Waiting for thread 1 sequence 92 (in transit)
Tue Jun 21 20:32:44 2022
Archived Log entry 13 added for thread 1 sequence 91 ID 0xecb1f8cd dest 1:
Recovery of Online Redo Log: Thread 1 Group 5 Seq 92 Reading mem 0
Mem# 0: /u01/app/oracle/oradata/rmanstd/stdby02.log
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 90
Next log sequence to archive 0
Current log sequence 92
从日志和归档情况可以看到日志传输正常,DG GAP修复完成。