当前位置: 首页 > news >正文

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

概述

上文中提到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 修复过程。这些新功能不仅减少了操作复杂度,还提高了效率和准确性。

相关文章:

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

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

力扣 三角dp

动态规划基础题&#xff0c;当前所在元素来自上一行的两列的值。 题目 从图可以看出&#xff0c;每一行的第一个数与最后一个数都是1&#xff0c;然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状&#xff0c;因此可以想到正常的打印方式应该是…...

SQL基础语法全解析(上篇)

一、基本概念 1. 数据库术语 数据库&#xff08;database&#xff09; - 保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。数据表&#xff08;table&#xff09; - 某种特定类型数据的结构化清单。模式&#xff08;schema&#xff09; - 关于数据库…...

【笔记】Linux服务器端使用百度网盘

1、在python环境下&#xff0c;下载bypy pip install bypy 2、第一次连接需要认证 bypy info 认证通过后百度网盘会出现bypy文件夹&#xff0c;如下 3、查看当前文件夹下的文件 bypy list 若有很多文件夹&#xff0c;可在后面增加文件夹名称&#xff0c;列出对应位置下的文件&a…...

UEFI Spec 学习笔记---3 - Boot Manager(3)

3.2 Boot Manager Policy Protocol EFI_BOOT_MANAGER_POLICY_PROTOCOL----EFI应用程序使用该协议请求UEFI引导管理器使用平台策略连接设备。 typedef struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL EFI_BOOT_MANAGER_POLICY_PROTOCOL; struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL…...

ATTCK红队评估实战靶场(四)

靶机链接&#xff1a;http://vulnstack.qiyuanxuetang.net/vuln/detail/6/ 环境搭建 新建两张仅主机网卡&#xff0c;一张192.168.183.0网段&#xff08;内网网卡&#xff09;&#xff0c;一张192.168.157.0网段&#xff08;模拟外网网段&#xff09;&#xff0c;然后按照拓补…...

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接&#xff1a;https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Ladybug | 2024.2.1 October 1, 2024 【https://redirector.gvt1.com/edgedl/android/studio/ide-zip…...

微信小程序px和rpx单位互转方法

js代码如下 Page({data: {width: 0,width2: 0},onLoad: function (options) {let px this.pxToRpx(380)let rpx this.rpxToPx(730.7692307692307) // 检查两个互转是否是相同即可,例如pxToRpx(380)转成730.7692307692307 则rpxToPx(730.7692307692307)如果是380则代表互转没…...

Vercel 部署与管理指南:简化前端应用的自动化部署流程

引言 在现代的前端开发中&#xff0c;部署和托管项目一直是开发者关注的重要环节。Vercel&#xff0c;作为一个专注于简化前端开发和部署的平台&#xff0c;凭借其强大的自动化功能、全球内容分发网络&#xff08;CDN&#xff09;以及对 Next.js 等框架的优越支持&#xff0c;…...

Java11使用JVM同一日志框架启用日志记录

你可以使用-Xlog选项配置或启用Java虚拟机同一日志框架的日志记录。 -Xlog:gc*trace:file/Users/xx/gc-%t.log:time,tags,level,pid,tid,hostname,path:filecount3,filesize10K -Xlog:gc*trace:stdout:time,tags,level,pid,tid,hostname:filecount3,filesize10K -Xlog:gc*trac…...

onlyoffice实现文档比对(Beta版)-纯文字比对(非OCR)

一、说明 文档比对光靠前端或者后端是无法实现的。 该文中的实现方案为&#xff1a;onlyofficejava。java进行文档差异化比较并输出对比结果&#xff0c;only进行得到结果处理渲染。 此方案目前为Beta版本&#xff0c;简单Word Demo实现了比对结果。css、关联动态效果登将在后期…...

JS querySelector方法的优点

1. 灵活性 支持所有 CSS 选择器 ID 选择器&#xff1a;#id 示例&#xff1a;document.querySelector(#myId)解释&#xff1a;选择 id 为 myId 的元素。类选择器&#xff1a;.class 示例&#xff1a;document.querySelector(.myClass)解释&#xff1a;选择具有 class 为 myCla…...

利用获取商品详情API:item_get可以获取到淘宝商品详情的哪些数据?

先来看下测试的返回数据吧 items: { total_results: 76, totalpage: 8, page_size: 10, page: "1", item: [ { rate_content: "和我家的鞋柜特别搭&#xff0c;加上这一条遮挡布&#xff0c;感觉整洁多了&#xff0c;布料不是硬邦邦的那种&#xff0c;很满意。…...

【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)

Spark 3.x 中的自适应查询执行&#xff08;Adaptive Query Execution&#xff0c;简称 AQE&#xff09;通过多种方式提升性能&#xff0c;主要包括以下几个方面&#xff1a; 动态合并 Shuffle 分区&#xff08;Coalescing Post Shuffle Partitions&#xff09;&#xff1a; 当 …...

[Vue]Vue-router

路由 对前端路由的理解 在前端技术早期&#xff0c;一个 url 对应一个页面&#xff0c;如果要从 A 页面切换到 B 页面&#xff0c;那么必然伴随着页面的刷新。这个体验并不好&#xff0c;不过在最初也是无奈之举——用户只有在刷新页面的情况下&#xff0c;才可以重新去请求数…...

【HarmonyOS】鸿蒙应用使用lottie动画

【HarmonyOS】鸿蒙应用使用lottie动画 一、lottie动画是什么&#xff1f; https://airbnb.design/lottie Lottie是由Airbnb团队开发的一个适用于iOS、Android、React Native、Web和Windows的开源动画库&#xff0c;用于解析使用Bodymovin导出为JSON的Adobe After Effects动…...

1.使用docker 部署redis Cluster模式 集群3主3从

1.使用docker 部署redis Cluster模式 集群3主3从 1.1 先安装docker 启动docker服务&#xff0c;拉取redis镜像 3主3从我们要在docker启动6个容器docker run --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-…...

vue基础之8:computed对比watch

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

Luban数据插件的用法

配置后数据后&#xff0c;点击图1中的gen.bat文件启动生成配置数据和解析配置数据代码的程序&#xff0c;自动生成配置数据和解析用到的代码&#xff1b;因为我已经 指定了生成内容的输出路径为Unity项目的路径下面&#xff0c;所以&#xff0c;不用再搬运生成的内容到项目目录…...

指针(上)

目录 内存和地址 指针变量和地址 取地址&#xff08;&&#xff09; 解引用&#xff08;*&#xff09; 大小 类型 意义 const修饰 修饰变量 修饰指针 指针运算 指针- 整数 指针-指针 指针的关系运算 野指针 概念 成因 避免 assert断言 指针的使用 strl…...

结构可辨识性映射:提升小样本时间序列分类性能的机理驱动方法

1. 项目概述&#xff1a;当动态系统建模遇上机器学习分类在生物医学、工业过程控制这些领域&#xff0c;我们常常会遇到一个核心问题&#xff1a;如何根据一组随时间变化的观测数据&#xff08;也就是时间序列&#xff09;&#xff0c;来判断系统当前处于哪种状态或类别&#x…...

PearSAN框架:用PearSOL损失与VCA采样破解纳米光子学逆设计难题

1. 项目概述&#xff1a;当机器学习遇上纳米光子学逆设计在纳米光子学领域&#xff0c;我们常常面临一个“反着来”的工程难题&#xff1a;给定一个我们梦寐以求的光学性能目标&#xff0c;比如在特定波段实现近乎完美的光吸收&#xff0c;如何从浩如烟海的可能结构中&#xff…...

Arm嵌入式工具链全解析:从获取到优化

1. Arm嵌入式工具链概述Arm Toolchain for Embedded是Arm公司为嵌入式系统开发提供的一套完整工具链集合&#xff0c;包含编译器、调试器、链接器等核心组件。作为嵌入式开发领域的标准工具链&#xff0c;它支持从Cortex-M系列微控制器到Cortex-A系列应用处理器的全系列Arm架构…...

WSL2 2023史诗级更新实测:你的.wslconfig文件真的配对了吗?(从版本检查到稀疏VHD全流程)

WSL2 2023史诗级更新实战&#xff1a;从版本适配到性能调优全解析如果你最近尝试在WSL2中配置网络功能时遇到各种"玄学问题"&#xff0c;比如代理失效、端口转发异常或是磁盘空间莫名被占满&#xff0c;很可能是因为忽略了版本兼容性这个关键前提。2023年9月后&#…...

UnityXFramework:面向商业手游的可扩展热更新框架设计

1. 这不是又一个“Hello World”框架&#xff1a;为什么UnityXFramework从第一天就拒绝“玩具感”我第一次在公司内部技术分享会上演示UnityXFramework原型时&#xff0c;台下有位做了八年客户端的老同事直接问&#xff1a;“你这框架和AssetStore上那些卖99块的‘通用框架’比…...

C#中Activator的具体使用

Activator 是 C# 中用于动态创建对象实例的核心类&#xff0c;位于 System 命名空间。它通过**反射&#xff08;Reflection&#xff09;**机制&#xff0c;在运行时根据类型信息创建对象&#xff0c;而无需在编译时知道具体类型。&#x1f50d; 一、Activator的核心作用在不知道…...

PXE安装麒麟Kylin后,我用这个脚本搞定了软件源、远程桌面和sudo免密

PXE安装麒麟Kylin后的高效配置脚本实战指南当你通过PXE完成麒麟Kylin系统的无人值守安装后&#xff0c;系统往往处于"毛坯房"状态——基础框架有了&#xff0c;但离真正的生产环境还有距离。本文将分享一个名为.kylin-post-actions的神奇脚本&#xff0c;它能帮你一键…...

焰境·万载——新一代文旅网站制作展示

江西万载数字文旅平台 北京高校在读生发起 AI 技术赋能县域文旅数字化转型 项目简介 焰境万载是围绕江西省万载县打造的数字文旅平台&#xff0c;以"中国花炮之乡"的千年烟花文化为核心&#xff0c;融合非遗传承、美食特产、旅游导览&#xff0c;以 AI 动漫角色&q…...

API接口签名验证实战

API接口签名验证实战 一、接口签名概述 API签名验证是保护接口安全的重要手段&#xff0c;防止请求被篡改或伪造。 1.1 签名机制原理 ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 客…...

数据类型与变量-Part3-输入输出格式化艺术

C语言输入输出格式化艺术系列导航 ✅ Part 1: C语言数据类型与变量&#xff08;基础篇&#xff09;✅ Part 2: C语言内存探秘&#xff08;进阶篇&#xff09;&#x1f4cd; Part 3: C语言输入输出格式化艺术 ← 你在这里上一篇我们深入了内存底层&#xff0c;这篇我们来聊聊你和…...