Data Guard高级玩法:通过闪回恢复failover备库

2023-05-16

转载于:Data Guard高级玩法:通过闪回恢复failover备库_ITPUB博客

    今天看到有一个网友提了一个问题,描述很简短
    测试DG时,主库不能宕机,如何测试failover?
    其实这个需求从业务层面来说是合理的,一个数据量很大的核心数据库,如果需要做灾难演练,就希望在备库上做一下演练工作,而这个演练其实又不想影响到目前的主库,而且又希望能够尽可能模拟真实的情况,我想这样对于运维部门来说是最具有考核力度,而对于开发业务部门来说是最受欢迎的,因为他们什么都不需要改动。
而从技术角度来看,似乎有一些地方需要考量,如果备库Failover为主库,那么这个主库肯定是可以进行读写操作的,如果把它再切回备库,数据一致性怎么保证,怎么能保证是从上次的断电开始恢复。如果可以做,那真是一大福利。
    我们来看看Oracle提供的方式方法,两大法宝,switchover和Failover
    Switchover切换的核心脚本如下,
    在备库执行,取消日志应用
    recover managed standby database cancel;
    在主库执行,切换角色
    Alter database commit to switchover to physical standby with session shutdown;
    而Failover的核心脚本则为:
    在备库执行
    alter database recover managed standby database finish force;
    alter database commit to switchover to primary;
如此来看,要实现上面的部分还是有一些难度。
今天反反复复测试了不下十多次,重建了很多次环境,总算在晚饭过后把这个问题顺利调试好了,虽然思路上是可行的,但是有一个地方总是卡在了下面的错误上。
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: '/U01/app/oracle/oradata/newtest2/system01.dbf'
明白了原委,解决起来全然不费功夫。
我们先讲讲思路,还是闪回,但是闪回的玩法有一些差别,和reinstate的方式有一些区别。假设是一主一备的环境,备库开启了闪回数据库功能。


我们不动原来的主库,把备库Failover为主库。

然后这个时候Failover的主库可读可写,当然最后还是要切换回备库接收归档,可以使用闪回,同时还需要切换角色,这个地方需要好好琢磨一番改怎么处理。

假设我们的数据库主库为newtest2,备库为snewtest2
在备库snewtest2上开启闪回,在备库上MRP可以实时接受数据变化。
SQL> alter database open;
Database altered.

SQL> SQL> alter database flashback on;
Database altered.

得到一个参考的SCN
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    1765837
查看闪回数据库特性是打开的。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES

然后我们在备库上开始failover
DGMGRL> DGMGRL> failover to snewtest2;
Performing failover NOW, please wait...
Failover succeeded, new primary is "snewtest2"
DGMGRL>
操作很快完成,我们查看备库此时的状态和角色
SQL> select open_mode,database_role    from v$database;
OPEN_MODE                                DATABASE_ROLE
---------------------------------------- --------------------------------
READ WRITE                               PRIMARY
当然这个步骤可以做一些读写操作之类的。
然后我们开始计划切回备库。
SQL> shutdown immediate

SQL> startup mount

然后开启闪回数据库,恢复到指定的SCN,这个时候要注意,此时还是主库。
SQL> flashback database to scn 1765837;           
Flashback complete.
我们需要切换为备库,这个时候切换的命令就是关键,不是使用switchover的方式。
SQL> alter database convert to physical standby;
Database altered.
当然这个时候数据库在nomount阶段,我们需要重启备库。
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted

SQL> shutdown immediate
SQL> startup mount

重新配置一下DG Broker即可,可以设置dg_broker_start=false,停掉dmon,然后删掉$ORACLE_HOME/dbs下的dr*newtest2.dat的配置文件,重新配置DG Broker即可。
配置起来都是老套路。
简单配置后,DG Broker的检查就正常了。
DGMGRL> DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    newtest2  - Primary database
    snewtest2 - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
对应的数据库日志中可以看到后台已经开始应用日志了。
RFS[2]: Assigned to RFS process 44981
RFS[2]: Selected log 5 for thread 1 sequence 48 dbid 795252212 branch 921251959
Tue Aug 30 21:32:01 2016
Archived Log entry 5 added for thread 1 sequence 48 ID 0x2f7352f8 dest 1:
Tue Aug 30 21:32:01 2016
Media Recovery Log /U01/app/oracle/fast_recovery_area/SNEWTEST2/archivelog/2016_08_30/o1_mf_1_48_cwc2pk57_.arc
Media Recovery Waiting for thread 1 sequence 49 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 49 Reading mem 0
  Mem# 0: /U01/app/oracle/fast_recovery_area/SNEWTEST2/onlinelog/o1_mf_4_cwc0lmr7_.log
    当实现这个看起来有些特殊的需求的时候,我真心内心充满了喜悦,也着实惊叹Oracle的闪回给备库带来了如此多的改进。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Data Guard高级玩法:通过闪回恢复failover备库 的相关文章

随机推荐

  • TensorFlow入门教程(十三):利用inception-v3训练自己的模型

    一 训练自己模型的方法 inception v3 最初是在ImageNet比赛训练的 xff0c 其分类有1000多种 xff0c 但对于自己的特定目标 xff0c 分类效果并不好 xff0c 需要自己再对自己的数据进行训练 xff0c 有
  • 本地代码修改后如何更新Gitee仓库

    1 git status 查看当前有变更的代码文件 2 git add 你本地所有修改了的文件添加到暂存区 3 git commit m xxxxx 引号里面是你的介绍 xff0c 就是你的这次的提交是什么内容 xff0c 便于你以后查看
  • 大小端模式

    32位数字0x12345678在内存中的表示形式为 xff1a 1 大端模式 xff1a Big Endian就是高位字节排放在内存的低地址端 xff0c 低位字节排放在内存的高地址端 网络上的数据都是以大端数据模式进行交互的 低地址 gt
  • torch 和numpy的相互转化

    span class token keyword import span math span class token keyword import span torch span class token keyword import spa
  • 我的第二篇博客(vue中的瀑布流插件 vue-waterfall-easy)

    vue waterfall easy是一款很好的瀑布流插件 以下是代码 转载自GitHub的官方文档 https github com lfyfly vue waterfall easy 以下是代码 span class token ope
  • table_exists_action=append和table_exists_action=truncate

    table exists action 61 append和table exists action 61 truncate 一 环境准备 1 1 192 168 1 22上创建single01 student表 SQL gt select
  • 记录oracle的几个参数 db_files,Cursor_sharing ,open_cursor

    db files 定义了oracle数据中数据文件 的个数 xff0c 当数据文件个数超过这个参数设定的值就会报ORA 00059这个错误 这个参数设置的值的大小不会影响效率 xff0c 只是单纯的控制数据文件的个数 详情请看 xff1a
  • 【原】expdp参数CONTENT

    作者 xff1a david zhang 64 sh 转载时请以超链接形式标明文章 链接 xff1a http www cnblogs com david zhang index archive 2012 03 01 2376059 htm
  • 动态性能视图概述

    动态性能视图概述 动态性能视图属于数据字典 xff0c 它们的所有者为SYS xff0c 并且多数动态性能视图只能由特权用户和DBA用户查询 当数据库处于不同状态时 xff0c 可以访问的动态性能视图有所不同 启动例程时 xff0c ORA
  • 安装oracle19c时报错DBT-50000

    转载于 xff1a 重庆思庄每日技术分享 安装oracle19c时报错DBT 50000 知乎 在Windows10上使用dbca配置oracle19 3 0 0时 xff0c 报错DBT 50000 无法检查可用内存 查找官方文档2631
  • oracle 不直接提供的软件包和数据库下载

    oracle 不直接提供的软件包和数据库下载 想要下载11 2 0 1的client xff0c 点击提示的doc id 进入如下文章界面 点击提示的网址 xff1a 进入如下界面 xff1a 点击登陆 xff0c 进入如下界面 xff1a
  • ora-245control file backup failed; target is likely on a local file system

    一 rac环境控制文件快照位置存放错误 xff08 以下内容转载自ora 00245报错解决方法 晟数 博客园 xff09 1 发现问题 最近使用备份软件对客户11G RAC数据库进行备份 xff0c 发现备份失败查看日志发现数据库报ORA
  • PDB导出导入

    检查当前目录 set linesize 100 col DIRECTORY NAME for a20 col OWNER for a10 col DIRECTORY PATH for a50 select from dba director
  • 麒麟安装问题

    对于本系统 需要打开 firewall cmd zone 61 public add port 61 8001 tcp permanent firewall cmd zone 61 public add port 61 8011 tcp p
  • 单实例11g升级到19c

    11g的服务器上安装19c的软件 安装完成后 xff0c 不需要关库 xff0c 修改环境变量为19c的 xff0c 执行dbua开始下述升级 11g升级到19c 执行预检查
  • 编译方式安装mysql

    转载于 xff1a 编译编译方式安装mysql编译 环境准备 环境 xff1a 硬件为4C 4G 50G 系统版本为redhat7 9 创建用户和组 创建MySQL用户和组 并且用户不能登陆 系统自带mysql软件 xff0c 安装时会自动
  • mysql 5.7登陆简单密码问题

    lucifer mysql gt update user set authentication string 61 password 39 mysql 39 where user 61 39 root 39 Query OK 1 row a
  • 5.7及以下版本mysql不能插入中文

    转载于 xff1a https blog csdn net qq 59500621 article details 122390644 5 7及以下版本mysql默认数据库使用的字符集是Latin1 我们需要为其修改字符集为 xff1a u
  • 备库failover升级

    1 centos 6 9 single06 gt centos7 9 single06std 11 2 0 4 搭建上面的dg 2 adg上打补丁psu xff1a 31537677 3 centos 7 9 上安装19c软件 xff0c
  • Data Guard高级玩法:通过闪回恢复failover备库

    转载于 xff1a Data Guard高级玩法 xff1a 通过闪回恢复failover备库 ITPUB博客 今天看到有一个网友提了一个问题 xff0c 描述很简短 测试DG时 xff0c 主库不能宕机 xff0c 如何测试failove