记Oracle DG Gap解决方案
# 备库查看gap
SQL> select * from v$archive_gap ;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID
---------- ------------- -------------- ----------
1 20 40 1
# 取消应用日志
SQL> alter database recover managed standby database cancel;
Database altered.
# 主库中查找v$archived_log查询gap中low_sequence#-1对应的scn(即 first_change#)
SQL> select thread#, sequence#, first_change#, next_change# from v$archived_log where sequence# = 19;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
1 19 2897221 2920514
1 19 2897221 2920514
# 主库rman基于该scn做增量备份
[oracle@cct2 ~]$ mkdir -p /u01/rman_bak
[oracle@cct2 ~]$ rman target /
RMAN> run {
2> allocate channel c1 device type disk;
3> allocate channel c2 device type disk;
4> backup incremental from scn 2897221 database format '/u01/rman_bak/cctde_scn_%';
5> release channel c1;
6> release channel c2;
7> }
# 主库rman创建新的备库控制文件
rman target /
RMAN> backup current controlfile for standby format '/u01/rman_bak/std_ctl.bak';
# 将备份文件拷贝到备库中
[oracle@cct2 ~]$ scp -r /u01/rman_bak/ 192.168.56.11:/u01/
# 备库shutdown并启动备库到nomount状态
SQL> shutdown immedidate;
SQL> startup nomount;
# 还原控制文件到备库原控制文件路径下,并启动到mount状态
[oracle@cct1 CCTDEDG]$ rman target /
RMAN> restore standby controlfile from '/u01/rman_bak/std_ctl.bak';
RMAN> alter database mount;
# 备库rman注册备份集,并恢复数据库
[oracle@cct1 CCTDEDG]$ rman target /
RMAN> catalog start with '/u01/rman_bak/';
RMAN> recover database;
RMAN> alter database open;
# 备库检查是否还存在gap
SQL> select * from v$archive_gap ;
no rows selected
# 主库检查主从同步的SCN是否趋向一致
SQL> select 1 dest_id, current_scn from v$database
union all
select dest_id, applied_scn from v$archive_dest where target='STANDBY'; 2 3
DEST_ID CURRENT_SCN
---------- -----------
1 3107287
2 3107267