Oracle 12c Data Guard 环境中的 GAP 修复方法

news2024/12/27 7:07:05
概述

上文中提到Oracle 12c 引入了多项新技术来简化 Data Guard 环境中的 GAP 修复过程,如(RECOVER … FROM SERVICE)。这些新特性不仅减少了操作步骤,还提高了效率和准确性。本文档将详细说明如何利用这些新特性进行 GAP 修复。

示例场景

为了更好地理解整个过程,我们假设以下情景:

  • 模拟备库断电:备库突然断电,导致与主库之间的日志同步中断。
  • 主库切几个最新的归档:主库继续工作并切换了多个归档日志。
  • 手工删除归档日志:模拟过程中手工删除了一些归档日志文件。
  • 重新开启 DG 同步:尝试重新同步时发现存在 GAP。
步骤详解
1. 记录备库当前 SCN 号

首先,记录备库当前的 SCN 号,以便后续使用。

-- 在备库上查询当前 SCN 号
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
47879834
2. 使用 RECOVER STANDBY USING SERVICE 恢复

采用 RMAN 的新功能 recover standby using service,通过 RMAN 连接到 target 备库,并用主库的服务名执行恢复命令。

语法:
RECOVER DATABASE FROM SERVICE <primary_db_service_name> NOREDO USING COMPRESSED BACKUPSET;

注意:确认主库的 TNS 已配置,这里的 <primary_db_service_name> 即 TNSNAME。

具体步骤:
  1. 启动备库到 NOMOUNT 状态

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP NOMOUNT;
    
  2. 从主库恢复控制文件

    RUN {
      RESTORE STANDBY CONTROLFILE FROM SERVICE <primary_service_name>;
      ALTER DATABASE MOUNT;
    }
    

    这里 <primary_service_name> 是主库的服务名,例如 orcl

    -- 备库恢复控制文件
    RMAN> RESTORE STANDBY CONTROLFILE FROM SERVICE orcl;
    -- 备库启动到mount状态
    SQL> ALTER DATABASE MOUNT;
    
  3. 检查主备 GAP 期间是否添加了数据文件

    查询备库上数据文件头最小的 SCN

    SELECT MIN(fhscn) FROM x$kcvfh;
    -- 示例输出: 47879834
    

    在主库上查询低 SCN 后新增加的数据文件

    SELECT FILE# FROM V$DATAFILE WHERE CREATION_CHANGE# >= <min_scn>;
    -- 示例中 <min_scn> 为 47879834,查询得到缺失的数据文件号为 158。
    
    -- 查询在指定 SCN 后新增的数据文件
    SQL> SELECT FILE# FROM V$DATAFILE WHERE CREATION_CHANGE# >= 47879834;
    FILE#
    ----------
    158
    
  4. 恢复新添加的数据文件

    RMAN> RUN {
      SET NEWNAME FOR DATABASE TO '/oradata/ORCL_STBY/%f_%U';
      RESTORE DATAFILE 158 FROM SERVICE orcl;
    }
    
  5. 如果主备数据文件目录不一致,修改控制文件中数据文件位置

    RMAN> CATALOG START WITH '/oradata/ORCL_STBY/';
    RMAN> SWITCH DATABASE TO COPY;
    
  6. 重命名临时文件和日志文件

    • 设置 STANDBY_FILE_MANAGEMENT 为手动:

      SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
      
    • 清除日志文件组:

      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
      ...
      -- 重复以上命令直至所有需要清除的日志文件组都被处理。
      
    • 重命名日志文件:

      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/redo01.log' TO '/oradata/ORCL_STBY/redo01.log';
      ...
      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/standby_redo04.log' TO '/oradata/ORCL_STBY/standby_redo04.log';
      ...
      -- 重复以上命令直至所有需要重命名的日志文件都被处理。
      
    • 重命名临时文件:

      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/temp01.dbf' TO '/oradata/ORCL_STBY/temp01.dbf';
      ...
      -- 重复以上命令直至所有需要重命名的临时文件都被处理。
      
    • 设置 STANDBY_FILE_MANAGEMENT 为自动:

      SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
      
  7. 恢复主备 GAP

    RMAN> RECOVER DATABASE FROM SERVICE orcl NOREDO USING COMPRESSED BACKUPSET;
    

    注意:如果主备库文件目录不一致,则需要 catalog 切换控制文件中路径,否则报错。

3. 开启备库日志应用,检查同步情况
  1. 检查主备 SCN 是否一致

    SQL> SET LINE 300
    SQL> COL HXFNM FOR A100
    SQL> SELECT HXFIL File_num, SUBSTR(HXFNM, 1, 40) HXFNM, FHSCN FROM x$kcvfh;
    
  2. 主库切几次归档

    SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
    SQL> ALTER SYSTEM SWITCH LOGFILE;
    
  3. 开启备库应用日志

    SQL> ALTER DATABASE OPEN;
    SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    
  4. 查看备库同步是否正常

    SQL> SET LINE 300
    SQL> COL MEMBER FOR A60
    SQL> SELECT T1.GROUP#, T1.THREAD#, T1.BYTES / 1024 / 1024, T1.STATUS, T2.MEMBER 
        FROM GV$STANDBY_LOG T1, GV$LOGFILE T2 
        WHERE T1.GROUP# = T2.GROUP#;
    
  5. 测试同步情况

    • 在主库插入数据:

      SQL> INSERT INTO test.test VALUES (999);
      SQL> COMMIT;
      
    • 在备库查询是否实时同步:

      SQL> ALTER SESSION SET CONTAINER=pdb01;
      SQL> SELECT * FROM test.test;
      
方法二:通过网络服务直接增量恢复(适用于 12c 及以上版本)
  1. 连接目标数据库

    CONNECT TARGET "sys/@orcldg AS SYSDBA"
    
  2. 设置压缩参数以减少网络带宽

    压缩级别选项:

    SET COMPRESSION ALGORITHM 'BASIC';
    SET COMPRESSION ALGORITHM 'LOW';
    SET COMPRESSION ALGORITHM 'MEDIUM';
    SET COMPRESSION ALGORITHM 'HIGH';
    

    选择合适的压缩级别

    SET COMPRESSION ALGORITHM 'HIGH';
    
  3. 执行恢复命令

    RECOVER DATABASE FROM SERVICE orcl USING COMPRESSED BACKUPSET;
    
  4. 开启备库应用日志

    ALTER DATABASE OPEN;
    ALTER PLUGGABLE DATABASE ALL OPEN;
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    
  5. 验证修复结果

    确保所有的修复操作完成后,检查数据库状态以验证 GAP 是否已经成功修复。

    -- 查看是否有剩余的 GAP
    SELECT * FROM V$ARCHIVE_GAP;
    
    -- 检查应用的最大序列号
    SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES';
    
    -- 检查管理进程的状态
    SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
    
总结

通过上述步骤,可以利用 Oracle 12c 提供的新特性显著简化 Data Guard 环境中的 GAP 修复过程。这些新功能不仅减少了操作复杂度,还提高了效率和准确性。

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

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

相关文章

uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊

实现效果如图 抽成组件navbar.vue&#xff0c;放入分包 <template><view class"header-nav-box":style"{height:Props.imgShow?:statusBarHeightpx,background:Props.imgShow?:Props.bgColor||#ffffff;}"><!-- 是否使用图片背景 false…

Android KEY的哪些事儿

目录 一、APK应用签名 1、什么是APK应用签名&#xff1f; 1.1 目的和作用&#xff1f; 1.2 长什么样子&#xff1f; 2、APK应用签名使用流程 步骤一&#xff1a;如何生成APK应用签名文件&#xff1f; 步骤二&#xff1a;如何集成APK应用签名文件&#xff1f; 步骤三&am…

Docker中安装GeoServer

一、准备工作 #创建数据持久化目录 mkdir -p /usr/local/application/geoserver/data_dir#授权 chmod 777 -R /usr/local/application/ 这一步是为了在容器外部管理GeoServer的数据&#xff0c;使得数据能够持久化存储。 二、拉取GeoServer镜像 从Docker Hub拉取GeoServer的…

Create Stunning Word Clouds with Ease!

Looking to craft breathtaking word clouds? WordCloudStudio is your go-to solution! Whether you’re a marketer, educator, designer, or simply someone who loves visualizing data, this app has everything you need. Download now: https://apps.apple.com/app/wor…

【JavaEE初阶】落霞与孤鹜齐飞,秋水共长天一色 - (重点)线程

本篇博客给大家带来的是线程的知识点, 由于时间有限, 分三天来写, 本篇为线程第二篇. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅…

java_判断语句——acwing

题目一&#xff1a;倍数 665. 倍数 - AcWing题库 代码 import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.nextInt(), b sc.nextInt();if(a%b0 || b%a0) System.out.printf("Sao Mu…

深度解析棋牌游戏开发:从搭建到运营的全流程实战分享

作为从事游戏开发十五年的技术老兵&#xff0c;经历了国内游戏市场从端游到手游的全流程变迁。市面上大多数棋牌产品&#xff0c;无论是传统房卡模式还是创新竞技玩法&#xff0c;自己曾经都参与设计和研发过。今天&#xff0c;我将结合多年的实战经验&#xff0c;分享棋牌游戏…

mfc110u.dll是什么意思,mfc110u.dll丢失解决方法大全详解

mfc110u.dll是Microsoft Foundation Classes (MFC)库的一个特定版本&#xff08;版本11.0&#xff09;的Unicode动态链接库文件。MFC是Microsoft为C开发者设计的一个应用程序框架&#xff0c;主要用于简化Windows应用程序的开发工作。这个框架封装了很多Windows API函数&#x…

【C++跬步积累】—— 继承

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;C跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; Linux跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0…

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介&#xff1a;本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点&#xff0c;随后深入讲解 GET 请求&#xff0c;以百度页面为例&#xff0c;展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索&#xff0c;以及正确设置 encoding 避…

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

C++设计模式(装饰模式)

一、介绍 1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的组合&#xff0…

【VMware】Ubuntu 虚拟机硬盘扩容教程(Ubuntu 22.04)

引言 想装个 Anaconda&#xff0c;发现 Ubuntu 硬盘空间不足。 步骤 虚拟机关机 编辑虚拟机设置 扩展硬盘容量 虚拟机开机 安装 gparted sudo apt install gparted启动 gparted sudo gparted右键sda3&#xff0c;调整分区大小 新大小拉满 应用全部操作 调整完成

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

SpringCloud Alibaba第十二章&#xff0c;升级篇&#xff0c;服务注册与配置中心Nacos 一、为什么SpringCloud Alibaba 1、为什么 有了spring cloud这个微服务的框架&#xff0c;为什么又要使用spring cloud alibaba这个框架了&#xff1f;最重要的原因在于spring cloud中的…

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议&#xff1f; 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介&#xff1a;本文章主要是演示如何用java代码以及TCP协议实现网络通信&#xff0c;实…

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了&#xff0c;那就是-协程池&#xff0c;无论你是日常工作还是面试中面试官都无法避免协程池&#xff0c;掌握协程池你也就算是入门go的并发编程了&#xff0c;打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…

万能门店小程序管理系统 onepic_uploade 任意文件上传漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

QT:信号和槽01

QT中什么是信号和槽 概念解释 在 Qt 中&#xff0c;信号&#xff08;Signals&#xff09;和槽&#xff08;Slots&#xff09;是一种用于对象间通信的机制。信号是对象发出的事件通知&#xff0c;而槽是接收并处理这些通知的函数。 例如&#xff0c;当用户点击一个按钮时&#…