Data Guard高级玩法:通过闪回恢复switchover主库

简介: 最近又发掘出了Data Guard的新玩法,可以通过闪回恢复switchover的主库,这种场景听起来比较特别,但是Oracle依旧支持。 我们的大体思路就是,在主库我们标记一下数据状态,然后做Switchover之后,我们truncate 某个表中的数据,也就间接模拟了一个数据库故障,这个时候需要做回退,需要把主库的数据都恢复到切换前的状态,这个听起来还是比较复杂的场景,备库还可以一如既往的跟着主库吗? 我们用图表来说明一下: 首先是一个主备库的环境: switchover是计划内的任务,就是主切备,备切主。
最近又发掘出了Data Guard的新玩法,可以通过闪回恢复switchover的主库,这种场景听起来比较特别,但是Oracle依旧支持。
我们的大体思路就是,在主库我们标记一下数据状态,然后做Switchover之后,我们truncate 某个表中的数据,也就间接模拟了一个数据库故障,这个时候需要做回退,需要把主库的数据都恢复到切换前的状态,这个听起来还是比较复杂的场景,备库还可以一如既往的跟着主库吗?
我们用图表来说明一下:
首先是一个主备库的环境:


switchover是计划内的任务,就是主切备,备切主。

这个时候发现切换出现了问题,我们需要紧急回退,需要回退到切换前的状态,要知道此时的主库已经不是原来的主库,备库也不是原来的备库了。闪回是否依旧可行,备库是否可以依旧选择一个新的断点可以重新同步?


我们来通过实战演练一下,当然这个操作需要保证主备库都开启了闪回数据库的特性,在11g中开启已经不再需要重启数据库,open阶段即可随时开关。

主库的操作如下:

我们创建一个表test,插入2行记录。
SQL> select count(*)from n1.test;
  COUNT(*)
----------
         2
然后我们得到一个初始的SCN值。         
SQL> select current_scn,database_role,flashback_on from v$database;    
CURRENT_SCN DATABASE_ROLE                  FLASHBACK_ON
----------- ------------------------------ ------------------------------------
    2084486 PRIMARY                        YES
检查DG Broker的状态,这里snewtest2是主库,newtest2是备库。
DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    snewtest2 - Primary database
    newtest2  - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
然后我们开始测试这个方案。

备库的操作如下:
DGMGRL> switchover to newtest2;
Performing switchover NOW, please wait...
New primary database "newtest2" is opening...
Operation requires startup of instance "newtest2" on database "snewtest2"
Starting instance "newtest2"...
...

切换之后查看DG Broker的状态,也看到主备库的角色已经调整过来了。

DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    newtest2  - Primary database
    snewtest2 - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
这个时候我们查看表test的数据。
SQL> select count(*)from n1.test;
  COUNT(*)
----------
         2

然后开始破坏。直接truncate
SQL> truncate table n1.test;
Table truncated.    

这个时候业务层面发现了数据的连锁错误,准备开始回退到初始的状态。    
SQL> shutdow immediate
SQL> startup mount

开始闪回数据库,恢复到初始的数据状态

SQL> flashback database to scn 2084486;
Flashback complete.

这个时候需要resetlogs
SQL> alter database open resetlogs;
Database altered.

原来的主库操作如下:

先初步验证,发现这个时候DG Broker验证失败。
DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    newtest2  - Primary database
    snewtest2 - Physical standby database
      Error: ORA-16810: multiple errors or warnings detected for the database
Fast-Start Failover: DISABLED
Configuration Status:
ERROR
我们关闭日志的应用。
SQL> recover managed standby database cancel;

然后开始闪回到指定的SCN
SQL> flashback database to scn 2084486;
Flashback complete.
完成之后,重新开启日志应用。
SQL> recover managed standby database disconnect from session;
Media recovery complete.

这个时候操作成功,我们就直接开启ADG,把数据库开启到open状态。
SQL> alter database open;

稍作等待,就会发现备库的状态为READ ONLY WITH APPLY.

SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ ONLY WITH APPLY

这个时候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
这个过程让我对闪回的强大功能又有了新的认识和了解,希望在一些极端场景中依然能够帮助到你们。
目录
相关文章
|
存储 缓存 算法
xv6 启动理论部分
xv6 启动理论部分
370 2
|
关系型数据库 MySQL Shell
MySQL高可用之双主+Keepalived,轻松实现单点故障VIP转移
MySQL高可用之双主+Keepalived,轻松实现单点故障VIP转移
2278 0
MySQL高可用之双主+Keepalived,轻松实现单点故障VIP转移
|
9月前
|
缓存 算法
函数递归超详解!
递归是解决许多计算机科学问题的强大工具。通过将问题分解为更小的子问题,递归提供了一种简洁且自然的解决方法。本文详细解释了递归的基本概念、类型、优缺点,并通过示例展示了如何应用递归解决实际问题。掌握递归技术对于编写高效、清晰的代码至关重要。希望本文能帮助读者更好地理解和应用递归,提升编程技巧。
345 8
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与CUDA:加速深度学习模型训练的最佳实践
【8月更文第27天】随着深度学习应用的广泛普及,高效利用GPU硬件成为提升模型训练速度的关键。PyTorch 是一个强大的深度学习框架,它支持动态计算图,易于使用且高度灵活。CUDA (Compute Unified Device Architecture) 则是 NVIDIA 开发的一种并行计算平台和编程模型,允许开发者直接访问 GPU 的并行计算能力。本文将详细介绍如何利用 PyTorch 与 CUDA 的集成来加速深度学习模型的训练过程,并提供具体的代码示例。
1466 3
|
机器学习/深度学习 编解码 自动驾驶
lidar激光雷达介绍,以及使用激光雷达数据通过深度学习做目标检测
lidar激光雷达介绍,以及使用激光雷达数据通过深度学习做目标检测
445 0
|
Oracle 关系型数据库 Linux
RHEL7.9系统下一键脚本安装Oracle 11gR2单机版本
RHEL7.9系统下一键脚本安装Oracle 11gR2单机版本
909 1
|
存储 Oracle 关系型数据库
RAC创建ASM磁盘组时配置多路径和UDEV
RAC创建ASM磁盘组时配置多路径和UDEV
3064 7
|
监控 Java API
Spring Boot与Camunda的完美融合
【4月更文挑战第20天】
3390 0
|
Java 关系型数据库 MySQL
太牛了! GitHub大牛呕心沥血整理的5000页Java学习手册文档
今天整理了一套 5000 页的 Java 学习手册,,新鲜出炉,分享给大家!此手册内容专注 Java技术,包括 JavaWeb,SSM,Linux,Spring Boot,MyBatis,MySQL,Nginx,Git,GitHub,Servlet,IDEA,多线程,集合,JVM,DeBug, Dubbo,Redis,算法,面试题等相关内容。
|
SQL Oracle 关系型数据库
数据库连接报错之IO异常(The Network Adapter could not establish the connection)
有以下四个原因: 1. ORACLE数据库 1、oracle配置 listener.ora 和tnsnames.ora 文件里面查看是否配置正确
4206 1