Oracle 11g DataGuard GAP处理

news2024/11/22 20:55:46

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

表已经恢复。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年编程语言排行榜

随着编程语言的不断发展&#xff0c;跟踪哪些语言处于领先地位至关重要。在这两部分中&#xff0c;我们将深入研究 2023 年排名前 40 的编程语言&#xff0c;并分析它们脱颖而出的原因。 40 种顶级 TIOBE 编程语言 1. Python 受欢迎程度&#xff1a;非常高学习难度&#xff1…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code)&#xff0c;发明于1837年(另有一说是1836年)&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff0c;在这里作一简单处理&#xff0c;仅产生点(Dit)和划(Dah)&#xff0c;时长在0.25秒之内为点&#xff0c;超过为划…

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求&#xff0c;例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

在美团外卖上抢券 Python来实现

在美团外卖上抢券的 Python 实现 在如今的互联网时代&#xff0c;自动化脚本已经成为了许多用户生活中不可或缺的工具。尤其是在购物、抢券等场景中&#xff0c;自动化脚本能够帮助我们节省大量的时间和精力。今天&#xff0c;我们将一起探索如何使用 Python 编写一个简单的脚…

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

即插即用显著位置注意力spab,涨点起飞

题目&#xff1a;Salient Positions based Attention Network for Image Classification 论文地址&#xff1a;https://arxiv.org/pdf/2106.04996 创新点 提出了基于显著位置的注意力机制&#xff1a;论文提出了一种名为SPAblock的显著位置选择算法(SPS)&#xff0c;通过在注…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接&#xff1a;R语言贝叶斯&#xff1a;INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说&#xff0c;该模式的目的用于隔离接口&#xff0c;换句话说&#xff0c;就是扮演中间层的角色&#xff0c;把本来结合…

物流公司出货单据模板下载软件 佳易王物流单管理系统操作使用教程

一、概述 【软件资源文件下载可以点文章最后信息卡片】 物流公司出货单据模板下载软件物流单管理系统操作使用教程 ‌软件功能‌&#xff1a; ‌记录管理‌&#xff1a;记录运费、垫付货款、代收货款、保险费等。‌打印模式‌&#xff1a;支持空白单、卷纸、印刷好的单子等多…

谷粒商城のsentinelzipkin

文章目录 前言一、Sentinel1、什么是Sentinel2、项目配置3、使用案例3.1、流控3.2、降级3.3、黑白名单设置 二、Zipkin1、什么是Zipkin2、项目配置3、整合案例 前言 本篇介绍Spring Cloud Ali的sentinel组件&#xff0c;用于对微服务的熔断降级&#xff0c;以及链路追踪zipkin的…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

keepalived + nginx 实现网站高可用性(HA)

keepalive 一、keepalive简介二、实现步骤1. 环境准备2. 安装 Keepalived3. 配置 Keepalived 双机主备集群架构4. 配置 Nginx5. 启动Keepalived6. 测试高可用性7. 配置keepalived 双主热备集群架构 一、keepalive简介 目前互联网主流的实现WEB网站及数据库服务高可用软件包括&a…

破局智能制造:难点分析与对策

一、 智能制造过程中可能遇到难点: 1. --概念和技术繁多--: - 智能制造领域涉及众多概念和技术,如工业4.0、CPS、工业互联网等,让企业难以选择和应用。 2. --缺乏经验和成功案例--: - 企业在推进智能制造时缺乏经验,存在信息孤岛、自动化孤岛等问题,缺乏统一规划和系统推…

中汽测评观察 亲子出行健康为先,汽车健康用材成重要考量

在中国&#xff0c;亲子出行是驾车的主要场景之一。汽车不仅仅是一种便捷的交通工具&#xff0c;更是生活中的移动“第三空间”。在此背景下&#xff0c;汽车健康用材不仅是消费者关注的焦点问题&#xff0c;也成为汽车企业发力的重要方向。 对消费者而言&#xff0c;在家庭亲子…

阿里巴巴Seata分布式事务解决方案

Seata是什么 Seata是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 当开发框架为spring boot或者SSM&#xff0c;都可以使用Seata进行开发。 分布式事务是什么 在大型架构中&#xff0c;一般会把一个应用系统&#x…

Cuebric:用AI重新定义3D创作的未来

一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…

【Spring IoCDI】IoC容器,IoC注解,Bean的使用

【Spring核心思想:IoC】 spring是一个开源框架&#xff0c;支持广泛的应用场景&#xff0c;简而言之:Spring是包含了众多工具方法的IoC容器 【IoC】 IoC的意思是「控制反转」&#xff0c;也就是说Spring是一个“控制反转”的容器 通用程序的实现代码&#xff0c;类的创建顺序…