Oracle 11g DataGuard GAP处理

1 说明

在Oracle Data Guard中,GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况,会导致数据保护和实时数据复制的能力受到影响。

Oracle Data Guard架构日志同步有三个阶段:

  1. 日志发送;
  2. 日志接收;
  3. 日志应用。

GAP问题常发生在第一阶段日志发送环节,Primary在运行过程中,会不断产生Redo日志,这些Redo日志需要发送到Standy,这个发送动作由Primary的LGWR或者ARCH进程完成,选择使用什么进程进行日志发送,由log_archive_dest_2参数控制。

2 故障模拟

原理是阻断主库日志发送,然后删除新产生的归档,这样就生成GAP了。log_archive_dest_2参数定义了主库归档日志传输到备用数据库的方式和目标,当此参数不生效时,主库就无法将日志发送至备库。

步骤大致如下:

  1. 阻止日志发送;
  2. 主库切日志;
  3. 主库删除归档;
  4. 恢复日志发送。

2.0 当前状态

查看是否有gap:

SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;

image.png

当前不存在gap

查看日志应用状态:

set lines 200
col name for a70
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select *
  from (select name, sequence#, first_time, next_time, archived, applied
          from v$archived_log
         where name is not null
         order by sequence# desc)
 where rownum <= 20;

image.png

最新应用的归档序列号是349。

2.1 阻止日志发送

有多种方式可以阻止主库将日志发送到备库,比如将备库关闭,或设置log_archive_dest_state_2为defer。

这里采用第二中方式,不用麻烦关机。

一、设置log_archive_dest_state_2参数

在主库中将此参数设置为defer,暂停日志的发送到standby。

SQL> alter system set log_archive_dest_state_2 = 'defer' scope = both;

System altered.

刷新日志:

image.png

查看LNS进程状态:

SQL> select process, status, SEQUENCE#, delay_mins, block#, blocks from v$managed_standby where process = 'LNS';

PROCESS   STATUS        SEQUENCE# DELAY_MINS     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
LNS       CLOSING             320          0      13560          1

LNS进程已经关闭,此时主库已经停止日志发送。

2.2 主库切日志

主库多切几次日志,生成新的归档。

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

查看日志发送情况:

SQL> select process, status, SEQUENCE#, delay_mins, block#, blocks from v$managed_standby order by SEQUENCE#;

image.png

可以看到最新的归档日志是355,但是日志发送停止在了351,还有3个日志未发送。

2.3 创建新数据

创建测试数据,用于恢复后验证。

SQL> create tablespace ts_gaptest datafile '+DATA';

Tablespace created.


SQL> select file_name from dba_data_files where tablespace_name = 'TS_GAPTEST';

FILE_NAME
----------------------------------------------------------------------
+DATA/orcl/datafile/ts_gaptest.278.1183716375


SQL> create user us_gaptest identified by us_gaptest default tablespace ts_gaptest;

User created.

SQL> grant dba to us_gaptest;

Grant succeeded.

SQL> create table us_gaptest.tab_gaptest as select * from dba_objects;

Table created.

SQL> select count(*) from us_gaptest.tab_gaptest;

  COUNT(*)
----------
     86358

SQL> alter system switch logfile;

System altered.

新增了数据文件+DATA/orcl/datafile/ts_gaptest.278.1183716375,创建了表us_gaptest.tab_gaptest

2.4 主库删除归档

将新生成的那几个还未发送到standby的归档日志删除掉。首先,找到要删除的归档文件:

set lines 200
col name for a70
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select *
  from (select name, sequence#, first_time, next_time, archived, applied
          from v$archived_log
         where name is not null
         order by sequence# desc)
 where rownum <= 20;

备库:
image.png

主库:
image.png

可以看到,主库多了352至357号归档,将这几个文件删除。

[oracle@oracle11g ~]$ cd /u01/app/oracle/arch/
[oracle@oracle11g arch]$ rm -rf 1_352_1166397622.dbf 1_353_1166397622.dbf 1_354_1166397622.dbf 1_355_1166397622.dbf 1_356_1166397622.dbf 1_357_1166397622.dbf

RMAN检查已经发现这几个归档无效:

RMAN> crosscheck archivelog all;

image.png

2.5 恢复日志发送

在主库中将log_archive_dest_state_2参数还原,恢复日志发送。

SQL> alter system set log_archive_dest_state_2 = 'enable' scope = both;

切个日志:

SQL> alter system switch logfile;

System altered.

2.6 查看GAP

备库告警日志提示出现GAP:

image.png

备库查看GAP相关视图:

SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;

image.png

上述结果都提示了缺失352到357号归档日志文件。

3 处理过程

3.1 备库查看当前scn

SQL> select CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
    2687514

此scn为恢复的起点。

3.2 查看新增数据文件

SQL> SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 2687514;

     FILE# NAME
---------- ----------------------------------------------------------------------
         8 +DATA/orcl/datafile/ts_gaptest.278.1183716375

在scn为2687514后有一个新创建的数据文件8,需要进行恢复。

3.3 增量备份缺失数据和控制文件

在主库上,做一个基于scn为2687514的数据库增量备份:

RMAN> backup incremental from scn 2687514 database format '/home/oracle/orabak/scn2687514_%d_%T_%U_%s';

image.png

创建备库控制文件:

SQL> alter database create standby controlfile as '/home/oracle/orabak/controlfile.ctl';

Database altered.

image.png

3.4 将备份发送到备库

将刚刚创建的增备和控制文件发送到备库。

[oracle@oracle11g orabak]$ scp * oracle11gadg:/home/oracle/orabak/
oracle@oracle11gadg's password:
controlfile.ctl                                                                                                                                 100%   13MB  13.3MB/s   00:00
scn2687514_ORCL_20241030_mk38s8bj_1_1_724                                                                                                       100%   29MB  29.0MB/s   00:00
scn2687514_ORCL_20241030_ml38s8bq_1_1_725                                                                                                       100%   13MB  13.3MB/s   00:0

3.5 备库重启到nomount状态

关闭日志应用:

SQL> alter database recover managed standby database cancel;

闭库:

SQL> shutdown immediate;

启动至nomount状态:

SQL> startup nomount;

3.6 控制文件恢复

使用备份恢复控制文件。

RMAN> restore controlfile from '/home/oracle/orabak/controlfile.ctl';

image.png

恢复后启动之mount状态:

RMAN> alter database mount;

将增量备份集信息导入到当前控制文件:

RMAN> catalog start with '/home/oracle/orabak/';

image.png

3.7 恢复缺失的数据文件

查看文件8信息:

RMAN> report schema;

image.png

对比主库发现,主库中Size为100,而备库这里size为0。

执行恢复:

RMAN> restore datafile 8;

image.png

恢复后再次查看发现size已经为100:

image.png

数据文件8恢复完成。

3.8 增备恢复

RMAN> recover database noredo;

image.png

4 备库开启日志应用

打开备库:

SQL> alter database open read only;

开启日志应用:

SQL> alter database recover managed standby database using current logfile disconnect;

查看进程状态:

SQL> select process, status, SEQUENCE#, delay_mins, block#, blocks from v$managed_standby order by SEQUENCE#;

image.png

MRP0进程应用日志正常。

5 恢复后检查

备库查看gap:

SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;

no rows selected

gap已经消失。

查看归档是否一致:

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
           362

主备库都为362。

查看新建的表是否恢复:

SQL> select count(*) from us_gaptest.tab_gaptest;

  COUNT(*)
----------
     86358

表已经恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter结合ansible分布式压测--1数据准备

一、搭建ansible环境 ansible是基于python开发&#xff0c;通过ssh连接客户机执行任务。ansible可以批量系统配置、批量程序部署、批量运行命令等。 1、安装yum install ansible 2、检查ansible的版本:ansible --version 二、利用ansible在其他机器上准备压测数据 1、本地准…

Vue:计算属性

Vue&#xff1a;计算属性 计算属性getset 在模板中&#xff0c;有时候填入的值要依赖于多个属性计算得出。 例如使用姓和名拼出全名&#xff1a; 以上效果可以通过以下代码实现&#xff1a; <div id"root">姓&#xff1a;<input type"text" v-m…

PHP不良事件上报系统源码,医院安全不良事件管理系统,基于 vue2+element+ laravel框架开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

PL端:LED闪烁

实验环境 vivado2024.1 实验任务 LED闪烁 引脚关系 硬件配置 新建一个vivado实验 创建 Verilog HDL 文件点亮 LED 点击 Project Manager 下的 Add Sources 图标&#xff08;或者使用快捷键 AltA&#xff09; 编辑led.v module led(input sys_clk,input rst_n,outp…

摘要、数字签名、对称加密、非对称加密综合应用示例以及技术原理说明

图&#xff1a;介绍了数字信封的安全传输过程 关键术语 散列&#xff1a;Hash&#xff08;哈希&#xff09;&#xff0c;一般翻译做散列、杂凑&#xff0c;是把任意长度的输入&#xff08;数据信息&#xff09;通过散列算法变换成固定长度的输出&#xff0c;该输出就是散列值…

美股集体收跌:汇盈策略股票交易特朗普、哈里斯概念股一同上涨

查查配分析随着美国大选进入最后倒计时,三大指数在多数投资者保持观望的状态下集体收跌。美债收益率集体回落,十年期美债收益率跌超8个基点至4.29%。 截至周一收盘,标普500指数跌0.28%,报5712.69点;纳斯达克指数跌0.33%,报18179.98点;道琼斯工业指数跌0.61%,报41794.6点。 汇…

力扣最热一百题——验证二叉搜索树

目录 题目链接&#xff1a;98. 验证二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 二叉搜索树的要求 解法一&#xff1a;采用中序遍历 中序遍历的定义 为什么二叉搜索树的中序遍历是严格递增的 二叉搜索树&#xff08;BST&#x…

golang 实现 bitcoin内核:编码实现椭圆曲线上的点

比特币在很大程度上依赖于一个称为椭圆曲线的数学对象&#xff0c;如果没有这个数学结构&#xff0c;比特币就像海滩上的城堡&#xff0c;随时可能崩溃。什么是椭圆曲线&#xff0c;它的方程是这样的&#xff1a;y^2 x^3 ax b&#xff0c;它的形状就像下面这样&#xff1a; …

[免费]基于Python的Django+Vue3在线考试系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的DjangoVue3在线考试系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 本论文提出并实现了一种基于Python…

API网关 - JWT认证 ; 原理概述与具体实践样例

API网关主要提供的能力&#xff0c;就是协议转换&#xff0c;安全&#xff0c;限流等能力。 本文主要是分享 如何基于API网关实现 JWT 认证 。 包含了JWT认证的流程&#xff0c;原理&#xff0c;与具体的配置样例 API网关认证的重要性 在现代Web应用和微服务架构中&#x…

【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载

最近&#xff0c;Linux 服务器自带的固态硬盘&#xff0c;空间告警&#xff0c;急需加上一块新的硬盘来救急。 今日分享&#xff0c;系统梳理下 Linux 下挂载磁盘的详细步骤和注意事项&#xff0c;方便日后翻阅&#xff0c;也给有类似需求的小伙伴一点帮助。 1. SSD&#xff…

平衡二叉树(递归)

给定一个二叉树&#xff0c;判断它是否是 平衡二叉树.平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4…

雷池社区版新版本功能防绕过人机验证解析

前两天&#xff0c;2024.10.31&#xff0c;雷池社区版更新7.1版本&#xff0c;其中有一个功能&#xff0c;新增请求防重放 更新记录&#xff1a;hhttps://docs.waf-ce.chaitin.cn/zh/%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95 仔细研究了这个需求&#xff0c;…

黑龙江某涝区泵闸站自动化、信息化改造项目案例

项目背景 黑龙江某地区紧邻松花江&#xff0c;雨季时降雨量增大&#xff0c;排水渠水位上涨&#xff0c;如果出现排涝不及时&#xff0c;水位过高时会漫入周边农田&#xff0c;引发洪涝灾害&#xff0c;对作物生长造成重大损害。为应对这一问题&#xff0c;自今年起&#xff0c…

Java 多线程(八)—— 锁策略,synchronized 的优化,JVM 与编译器的锁优化,ReentrantLock,CAS

前言 本文为 Java 面试小八股&#xff0c;一句话&#xff0c;理解性记忆&#xff0c;不能理解就死背吧。 锁策略 悲观锁与乐观锁 悲观锁和乐观锁是锁的特性&#xff0c;并不是特指某个具体的锁。 我们知道在多线程中&#xff0c;锁是会被竞争的&#xff0c;悲观锁就是指锁…

【Spring IOC】实现一个简单的 Spring 容器

1. 理解知识 Spring 容器的作用 Spring 容器是Spring的核心&#xff0c;用来管理Bean对象的。容器将创建对象&#xff0c;把它们连接在一起&#xff0c;配置它们&#xff0c;并管理他们的整个生命周期从创建到销毁。 Bean 对象的管理 当一个 Bean 对象交给 Spring 容器管理…

非线性数据结构之图

一、有向图&#xff08;Directed Graph&#xff09; 1. 定义 有向图是一个由顶点&#xff08;节点&#xff09;和有方向的边&#xff08;弧&#xff09;组成的图。在有向图中&#xff0c;每条边都有一个起点和一个终点&#xff0c;表示从一个顶点到另一个顶点的关系。 2. 特…

【算法】——滑动窗口专题

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;长度最小的子数组 二&#xff1a;无重复字符的最长子串 三&#xff1a;最大连续1的个…

目前主流的人工智能学习框架有哪些?

随着人工智能&#xff08;AI&#xff09;技术的蓬勃发展&#xff0c;越来越多的AI学习框架相继推出&#xff0c;成为开发者、研究人员和企业构建机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;模型的首选工具。AI学习框架不仅提供了丰富的工具库和函…

揭开自然语言处理(NLP)的神秘面纱

时间&#xff1a;2024年 11月 05日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频&#xff1a;喜马拉雅 大家好&#xff0c;欢迎来到“小蒋聊技术” &#xff0c;我是小蒋&#xff01;。小蒋最近在学习清华大模型课程&…