1.问题现象
客户一套双节点primary 11.2.0.4库,备库为单实例11.2.0.4
备库alert中有如下gap报错,但是查询v$archive_gap视图并没有条目输出:
FAL[client]: Failed to request gap sequence
GAP - thread 1 sequence 365-368
DBID 353046371 branch 984508005
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.
------------------------------------------------------------
经过查询Mos,此为命中如下bug,在11.2.0.1确认受影响,受影响版本为12.1.0.1以下版本,在12.1.0.1中被修复。
Bug 10072528 - V$ARCHIVE_GAP may not detect archive gap when physical standby is open read only (Doc ID 10072528.8)
确认显示为bug之后,我们可以通过v$managed_standby视图来确认mrp进程是否在等待gap,是否真的存在gap,查询如下:
SQL> select process,pid,status,thread#,sequence# from v$managed_standby;
PROC PID STATUS THREAD# SEQUENCE#
---- -------- ------------ ------- ---------
ARCH 9906 CONNECTED 0 0
ARCH 9908 CONNECTED 0 0
ARCH 9910 CONNECTED 0 0
ARCH 9912 CONNECTED 0 0
MRP0 11068 WAIT_FOR_GAP 1 365
RFS 11118 IDLE 0 0
RFS 11100 IDLE 1 371
RFS 11102 IDLE 0 0
确认确实存在gap,接下来解决gap问题。
2.问题解决
经过查询确认,主库序号365归档已经删除,无法恢复,所以需要通过增量备份来解决standby gap问题。
(1)取消备库日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
(2)设置源端log_archive_dest_state_2为defer
SQL> ALTER SYSTEM SET log_archive_dest_state_2=defer scope=both;
设置该参数,停止主库发送日志给备库,防止由于在恢复期间备库启停导致主库异常。
ÿ