Oracle DG环境中的gap处理办法总结

0    522    1

Tags:

👉 本文共约3485个字,系统预计阅读时间或需14分钟。

概述

当主库的某些日志没有成功传送到备库,那么这时候就发生了归档裂缝(Archive Gap)。目前Oracle提供了两种日志GAP的检测和处理机制,分别是自动GAP处理(Automatic Gap Resolution)和FAL进程GAP处理(FAL Gap Resolution)。自动GAP处理即主库上的ARCn进程会每分钟检查备库上的日志GAP情况并做相应处理。FAL(Fetch Archive Log)是通过配置FAL_SERVER和FAL_CLIENT实现GAP检测的一种机制,它是备库主动发起的“取”日志的过程。备库就是FAL_CLIENT,它从FAL_SERVER中取这些GAP。Oracle会首先尝试使用FAL进程处理GAP,当发现FAL机制并没有配置生效的时候,进而尝试使用自动GAP处理。FAL进程只在物理备库存在。FAL进程提供了一个CLIENT/SERVER的机制,用来解决检测在主库产生的连续的归档日志,而在备库接受的归档日志不连续的问题。该进程只有在需要的时候才会启动,而当工作完成后就关闭了,因此在正常情况下,该进程是无法看见的。

大致可以分为以下几种情况来处理:

1、主库归档日志存在,可以通过配置Fetch Archive Log(FAL)参数,自动解决归档GAP,或将归档日志拷贝到从库手工注册处理。

2、主库归档日志丢失,需要人工干预来修复,可以分为如下几种情况:

① 12c版本之前的常规处理步骤:

1.在主库上创建一个备库的控制文件
2.以备库的当前SCN号为起点,在主库上做一个增量备份
3.将增量备份拷贝到备库上
4.使用新的控制文件将备库启动到mount状态
5.将增量备份注册到RMAN的catalog,取消备库的恢复应用,恢复增量备份
6.开启备库的恢复进程

② 从12c开始RECOVER … FROM SERVICE

③ 从18c开始RECOVER STANDBY DATABASE FROM SERVICE

Oracle随着版本的升级,逐渐将步骤缩减,进行封装,18C之后可谓是达到了所谓的一键刷新,恢复DG同步。

处理GAP方法1:手动拷贝归档到备库进行手工注册处理,归档未丢失

(一)物理DG手动解决GAP

在一些特殊情况下,如果GAP不能自动解决,那么就需要手工执行中断恢复。通过查询视图V$ARCHIVE_GAP可以确定断档的是哪些日志。

可以看到,当前物理备库丢失日志文件从线程1的序号10到序号12。接下来确定归档日志文件的路径:(假设在主数据库上的本地归档目的地是LOG_ARCHIVE_DEST_1):

接下来,复制这些日志文件到物理备库,然后在物理备库上使用“ALTER DATABASE REGISTER LOGFILE”语句来注册这些归档日志,如下所示:

在物理备库上注册这些日志文件之后,重新打开重做应用进程。如果断档的归档日志较多,那么可以使用如下的SQL语句来生成要执行的SQL语句(如下的SQL也适用于逻辑DG):

需要注意的是,视图V$ARCHIVE_GAP只返回当前妨碍重做应用继续的下一个中断。在解决中断并重启重做应用进程后,再次在物理备库上查询V$ARCHIVE_GAP视图来确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

(二)逻辑DG手动解决GAP

在逻辑备库上查询DBA_LOGSTDBY_LOG视图可以确定是否有归档中断。例如,下面的查询指出断档号为16至18:

接下来复制丢失的日志文件到逻辑备库,并在逻辑备库上使用“ALTER DATABASE REGISTER LOGICAL LOGFILE”来注册这些日志文件。例如:

在逻辑备库上注册这些日志文件之后,重启SQL应用。和物理DG一样,在逻辑备库上的DBA_LOGSTDBY_LOG视图只返回当前妨碍SQL应用继续的下一个中断。在解决指定的中断并重启SQL应用之后,再次在逻辑备库上查询DBA_LOGSTDBY_LOG视图,以确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

需要注意的是,如果需要的归档日志已经不在主库上了,但是有归档日志的RMAN备份,那么可以通过RMAN恢复把缺少的归档日志进行还原,如下所示:

处理GAP方法2:主库基于SCN的增量备份来恢复DG(常规办法)

如果断档的归档日志已经丢失,且RMAN又没有备份,那么在Oracle 10g之前没有办法修复了,只能重建DG,但是从Oracle 10g开始可以采用主库基于SCN的增量备份来恢复DG,请参考:

https://www.dbaup.com/zaidghuanjingzhongzhukudiushiguidangduizhukujinxingjiyuscndezengliangbeifenlaihuifuwulidghuanjing.html

https://www.dbaup.com/dghuanjingzhukudiushiguidangqingkuangxiashujuwenjiandehuifu.html

https://www.dbaup.com/rachuanjingxiazhukudiushiguidangbeikudgdehuifuguocheng.html

https://www.dbaup.com/wulidgzaizhukudiushiguidangwenjiandeqingkuangxiadehuifu.html

从12c开始:RECOVER … FROM SERVICE

参考:https://www.dbaup.com/zaioracle-12czhongzairmanfangmianyounaxiezengqiangdexintexing.html#wu_tong_guo_wang_luo_yuan_cheng_hui_fu_shu_ju_ku_RestoreRecover_from_Service

从18c开始:RECOVER STANDBY DATABASE FROM SERVICE

Oracle在18c对(RESTORE/RECOVER ...FROM SERVICE)功能进行了加强,推出了(RECOVER STANDBY DATABASE ... FROM SERVICE)通过网络服务直接增量恢复备库数据,这个新特性也大大简化了DataGuard主备的问题修复。

示例

下面我们通过实验来进行展示:

首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。

12之前

当前GAP:32---34

1.在主库上创建一个备库的控制文件

2.以备库的当前SCN号为起点,在主库上做一个增量备份

3.将增量备份拷贝到备库上

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复