可以参考如下步骤:
12C新特性修复
首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。
模拟GAP期间,有数据文件添加的情况:
alter tablespace TEST add datafile '/oradata/ORCL/test02.dbf' size 100M autoextend off;
复制
📢 注意: 当前DG数据库已存在GAP,GAP日志为:30—31 。
a.记录备库当前SCN号
备库记录当前 scn 号:
sqlplus / as sysdba
SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
2600487
复制
b.使用recover standby using service恢复
采用rman的新功能,recover standby using service
,通过RMAN连接到target备库,然后用主库的service执行恢复备库命令。
语法:
RECOVER DATABASE FROM SERVICE < PRIMARY DB SERVICE NAME > NOREDO USING COMPRESSED BACKUPSET;
📢 注意: 确认主库的TNS已配置,这里的< PRIMARY DB SERVICE NAME >即 TNSNAME。
c.备库启动到nomount状态,恢复控制文件
备库启动到nomount状态:
sqlplus / as sysdba
shutdown immediate
startup nomount
复制
备库通过from service恢复控制文件:
rman target /
restore standby controlfile from service orcl;
复制
备库开启到mount状态:
sqlplus / as sysdba
alter database mount;
复制
d.备库恢复,修复GAP
检查主备GAP期间是否添加数据文件:
sqlplus / as sysdba
select file
FILE
----------
13
复制
restore 新添加的数据文件:
rman target /
run
{
SET NEWNAME FOR DATABASE TO '/oradata/ORCL_STBY/%f_%U';
RESTORE DATAFILE 13 FROM SERVICE orcl;
}
复制
由于主备的数据文件目录不一致,需要修改controlfile中数据文件位置:
rman target /
catalog start with '/oradata/ORCL_STBY';
YES
SWITCH DATABASE TO COPY;
复制
将备库文件管理方式改为手动:
sqlplus / as sysdba
alter system set standby_file_management=MANUAL;
复制
重命名 tempfile && logfile:
sqlplus / as sysdba
alter database clear logfile group 1;
alter database clear logfile group 2;
alter database clear logfile group 3;
alter database clear logfile group 4;
alter database clear logfile group 5;
alter database clear logfile group 6;
alter database clear logfile group 7;
alter database rename file '/oradata/ORCL/redo03.log' to '/oradata/ORCL_STBY/redo03.log';
alter database rename file '/oradata/ORCL/redo02.log' to '/oradata/ORCL_STBY/redo02.log';
alter database rename file '/oradata/ORCL/redo01.log' to '/oradata/ORCL_STBY/redo01.log';
alter database rename file '/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_STBY/standby_redo04.log';
alter database rename file '/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_STBY/standby_redo05.log';
alter database rename file '/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_STBY/standby_redo06.log';
alter database rename file '/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_STBY/standby_redo07.log';
alter database rename file '/oradata/ORCL/temp01.dbf' to '/oradata/ORCL_STBY/temp01.dbf';
alter database rename file '/oradata/ORCL/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf' to '/oradata/ORCL_STBY/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf';
alter database rename file '/oradata/ORCL/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf' to '/oradata/ORCL_STBY/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf';
复制
备库重命名完后再改为自动:
sqlplus / as sysdba
alter system set standby_file_management=AUTO;
复制
恢复主备GAP:
recover database from service orcl noredo using compressed backupset;
复制
📢 注意: 如果主备库文件目录不一致,则需要catalog切换控制文件中路径,否则报错:

e.开启备库日志应用,检查同步
sqlplus / as sysdba
col HXFNM for a100
set line222
select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
复制
sqlplus / as sysdba
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM SWITCH LOGFILE;
复制
sqlplus / as sysdba
alter database open;
alter pluggable database all open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
复制
sqlplus / as sysdba
set line222
col member for a60
select t1.group
复制
sqlplus test/test@pdb01
insert into test values (999);
commit;
复制
alter session set container=pdb01;
select * from test.test;
ID
----------
1
2
999
复制
至此,GAP已修复完成,可以发现,12C这个新特性,将一些步骤进行了省略和封装,进一步减少了我们的操作步骤,但是内部的原理仍然是一致的。