DataGuard常见问题(一)增量备份恢复主备库GAP

近期,有幸听到Oracle ACED 杨廷琨老师给我们进行DataGuard非常相信的培训课程,培训过程中杨老师提到了几个dataguard常见问题,其中一个为DataGuard备库出现了GAP,备库向主库FAL SERVER进行获取归档日志,但是主库归档日志已经被备份走或人为删除,导致备库日志中断,无法进行正常的实时应用。

这类问题公司在众多Oracle生产库中也颇为常见,培训过程中杨老师利用增量备份进行备库增量恢复,避免主备数据库重构,下面我再次做了这个实验,分享下此类非常实用的方法。

主库状态:

gap-2

备库状态:

gap-1

模拟主备库GAP现象

断开主备库关系,在主库上产生事务,并进行日志切换,将事务对应的LOGFILE归档

gap-3

删除主库归档日志,恢复DG关系,Gap现象产生:

gap-4

gap-5

我们看到,V$managed_standby中,MRP0进程出现WAIT_FOR_GAP的状态,等待是日志sequence正是我们删除的归档之一。

我们现在开始进行恢复工作,首先确认一下主备库的SCN信息,来确定恢复的起点,当备库中文件头SCN不一致的时候,我们要取最小的SCN来作为恢复的起点,本例中为462056742

gap-6

主库开始进行增量备份:

gap-7

主库顺便建立一个standby controlfile文件,因为控制文件中记录了归档记录,我们如果不重新创建备库控制文件,GAP信息会一值存在,不会应用新的日志文件。

gao-8

将备份与standby控制文件传输至备库后,进行catalog使得controlfile识别备份集:

gao-9

备库利用增量备份进行恢复:

gap-10

备库更改control file并启动数据库:

gap-11

重启备库,进行实时日志应用,GAP已经恢复完成,已经开始正常的日志应用。

gap-12

目前备库已恢复正常的日志应用,之前主库事务已正常在备库中体现,主备库状态恢复正常。

gap-13