前言
DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。
那么,如果遇到GAP如何修复呢?且听我细细道来~
一、介绍
DG GAP 主要分为以下两类情况:
1、主库归档日志存在,可以通过配置 Fetch Archive Log(FAL) 参数,自动解决归档 GAP。2、主库归档日志丢失,需要 人工干预 来修复。
不同 Oracle 版本的 GAP 修复方式也不尽相同,下面分别介绍不同版本的方式!
11G 的处理步骤:
a.在主库上创建一个备库的控制文件
b.以备库的当前SCN号为起点,在主库上做一个增量备份
c.将增量备份拷贝到备库上
d.使用新的控制文件将备库启动到mount状态
e.将增量备份注册到RMAN的catalog,取消备库的恢复应用,恢复增量备份
f.开启备库的恢复进程
12C 的新特性(RECOVER … FROM SERVICE)
18C 的新特性(RECOVER STANDBY DATABASE FROM SERVICE)
Oracle随着版本的升级,逐渐将步骤缩减,进行封装,18C之后可谓是达到了所谓的一键刷新,恢复DG同步。
二、实战
下面我们通过实验来进行演示如何修复:
- 11G常规修复
- 12C新特性(RECOVER … FROM SERVICE)修复
- 18C新特性(RECOVER STANDBY DATABASE FROM SERVICE)修复
三、11G常规修复
首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。
备库停止DG同步进程:
- sqlplus / as sysdba
- ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
- shutdown immediate
主库切换多次归档:
- sqlplus / as sysdba
- alter system switch logfile;
主库删除最近几个归档日志:
- rm 1_34_1070147137.arc
- rm 1_33_1070147137.arc
备库开启同步进程:
- startup
- ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
查看GAP:
- sqlplus / as sysdba
- SELECT * FROM V$ARCHIVE_GAP;
- THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
- ---------- ------------- --------------
- 1 32 34
- SELECT max(sequence#) from v$archived_log where applied='YES';
- MAX(SEQUENCE#)
- --------------
- 31