主库归档被意外删除,备库无法继续recover导致备库出现gap。如果备库当前处于open状态,查看v$archived_log视图可以发现gap以后的归档日志没有应用;如果备库当前处于mount状态,在alter database open时报错:file 1 is inconsistent due to a failed
media recovery session说明出现了不可溶解的gap即
UNRESOLVABLE GAP
以上两种情况出现的原因最常见的情况是主库丢失 了归档,或者主库的归档还没有在备库端应用就被人为的删除了(比如rman备份归档时:delete
input)
解决该问题的方法目前只能通过rman的增量备份然后恢复到备库。因为主库端归档已经丢失了,不能通过在备库端手动注册缺失的归档来解决gap
一、查看备库的状态和当前scn
SQL> select instance_name,status from v$instance;
SQL> select CURRENT_SCN from v$database;
注:
1、备库出现gap以后,后续的归档日志不能在备库端应用,因此备库的当前scn停止在缺失的第一个归档时的起始scn。只要gap问题未解决,备库的当前scn一直卡在该值。
2、如果查询当前scn显示的是科学计数法格式,说明数值宽度设置的不够。可以通过以下命令来设置:
SQL> set numw 15 ----设置数值宽度为15个字符
二、主库端进行rman的增量备份
1、创建备份集的存放目录
[oracle@edsir1p8-PROD4 ~]$ mkdir -p /u01/app/oracle/oradata/backupset/prod4/increment
2、基于scn增量备份全库、当前控制文件、备库控制文件
[oracle@edsir1p8-PROD4 ~]$ export ORACLE_SID=PROD4
[oracle@edsir1p8-PROD4 ~]$ rman target /
RMAN> backup as compressed backupset incrementalfrom SCN 5105432 database format'/u01/app/oracle/oradata/backupset/prod4/increment/standby_%d_%t_%s_%p.bak'includecurrent controlfile for standby filesperset=5 tag 'FOR STANDBY';
使用基于scn的增量备份。因为备库的当前scn卡在5105432处,所以主库的增量备份应该是从scn=5105432往后备份,一直备份完所有的数据文件块。这样备库缺少的gap事物就包含在了备份集中,增量恢复到备库以后缺失的gap对应的事物就被恢复到了数据文件中,gap问题得到解决。
备份过程中的注意事项:
1、主库端要开启控制文件的自动备份
RMAN> show all;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FORDEVICE TYPE DISK TO '/u01/app/oracle/oradata/autobackup/prod4/ctl_%F';
2、备份过程中会产生当前控制文件和standby controlfile的备份集
3、备份命令的解释:
a、as compressed backupset --压缩备份集
b、incremental --增量备份
c、from SCN 5105432 --基于scn的增量备份
d、database --基于scn的全库增量备份
e、include current controlfile for standby --备份当前控制文件和standby controlfile
f、filesperset=5 --每个备份集包含的数据文件个数最多为5个
g、tag 'FOR STANDBY' --备份集的标签
3、确定包含备库控制文件的备份集
RMAN> list backup;
截图显示:备库控制文件在备份集/u01/app/oracle/oradata/backupset/prod4/increment/standby_PROD4_910749273_934_1.bak中。
RMAN> exit;
三、备库端进行rman的增量恢复
1、备库端创建与主库相同路径的备份集存放目录
[oracle@edsir4p1-PROD4 ~]$ mkdir -p /u01/app/oracle/oradata/backupset/prod4/increment
2、把增量备份SCP到备库上
[oracle@edsir1p8-PROD4 increment]$ cd/u01/app/oracle/oradata/backupset/prod4/increment
[oracle@edsir1p8-PROD4 increment]$ scp *192.168.33.138:/u01/app/oracle/oradata/backupset/prod4/increment
3、重新启动备库到nomount状态恢复控制文件
SQL> shutdown immediate
SQL> startup nomount
[oracle@edsir4p1-PROD4 ~]$ export ORACLE_SID=PROD4
[oracle@edsir4p1-PROD4 ~]$ rman target /
RMAN> restore standby controlfile from'/u01/app/oracle/oradata/backupset/prod4/increment/standby_PROD4_910749273_934_1.bak';
截图显示备库控制文件恢复完成,恢复过程中把所有的备库控制文件全部恢复。原来的备库控制文件control01.ctl, control02.ctl, control03.ctl全部恢复。
4、确认备份集信息
RMAN> alter database mount;
RMAN> list backup;
查看备份集信息,确认控制文件中记录的备份集路径和备库上的备份集的实际路径是否相同。如果不同删除控制文件中记录的备份集信息,重新注册备份集:
RMAN>crosscheck backup;
RMAN>crosscheck archivelog all;
RMAN>delete noprompt obsolete;
RMAN>delete noprompt expired backup;
RMAN>delete noprompt expired archivelog all;
RMAN> delete backup;
RMAN> list backup;
RMAN> catalog start with'/u01/app/oracle/oradata/backupset/prod4/increment';
5、增量恢复数据文件
RMAN> recover database noredo;
打开备库
SQL> alter database open;
启动mrp进程
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASEUSING CURRENT LOGFILE DISCONNECT FROM SESSION;
[root@edsir4p1 ~]# ps -ef | grep mrp
主库端切归档
SQL> alter system archive log current;
查看归档日志gap问题是否解决,及归档日志的应用情况
备库端执行:
SQL> selectname,THREAD#,SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,APPLIED from v$archived_log;
截图显示:最新同步过来的归档日志正在备库端应用,说明gap问题解决了。
因为备库控制文件是最新恢复的控制文件,没有记录之前的任何归档信息,只记录了最新同步过来的归档。
至此,完成使用rman增量恢复解决DG备库的gap问题