博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Data Guard高级玩法:通过闪回恢复switchover主库
阅读量:2447 次
发布时间:2019-05-10

本文共 3117 字,大约阅读时间需要 10 分钟。

最近又发掘出了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
这个过程让我对闪回的强大功能又有了新的认识和了解,希望在一些极端场景中依然能够帮助到你们。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2124543/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-2124543/

你可能感兴趣的文章
如何使用Google Assistant控制Xbox One
查看>>
图标缓存 vista_在Windows Vista中将Internet Explorer 7图标添加到桌面
查看>>
iexplore.exe_如何一次杀死所有iexplore.exe进程?
查看>>
discord linux_如何启用和自定义Discord的游戏内叠加
查看>>
ipad 悬浮按钮 自定_如何在iPad上自定义鼠标按钮
查看>>
css 按钮固定在右上交_如何在iPad上交换左右鼠标按钮
查看>>
如何加入“动物杂交:新视野”寻蛋活动
查看>>
cloudlet_使用Search Cloudlet为您的搜索添加种类
查看>>
rsync 同步数据记录_非初学者指南与Rsync同步数据
查看>>
用户名和密码使用的字段类型_如果在“用户名”字段中提交密码,对安全有何影响?...
查看>>
HTG评论RAVPower Bolt:您渴望的多合一充电器
查看>>
firefox pdf预览_如何启用Firefox的内置PDF阅读器
查看>>
android卸载应用代码_如何在Android设备上卸载应用
查看>>
xbmc_如何在XBMC上重新创建频道冲浪体验
查看>>
选择偏好_网站如何记住您的偏好(以及关于Cookie的选择)?
查看>>
将隐藏的车库门开启器添加到您的车辆中
查看>>
如何在Ubuntu 14.04中轻松隐藏Unity Launcher
查看>>
snapchat_如何配置Bitmoji和Snapchat
查看>>
在Redhat Linux机器上更改主机名
查看>>
如何在Windows Server 2003的IIS 6上安装Perl
查看>>