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

最近又发掘出了Data Guard的新玩法,可以通过闪回恢复switchover的主库,这种场景听起来比较特别,但是Oracle依旧支持。

我们的大体思路就是,在主库我们标记一下数据状态,然后做Switchover之后,我们truncate 某个表中的数据,也就间接模拟了一个数据库故障,这个时候需要做回退,需要把主库的数据都恢复到切换前的状态,这个听起来还是比较复杂的场景,备库还可以一如既往的跟着主库吗?

我们用图表来说明一下:

首先是一个主备库的环境:

f42ed7a077cac41a5d35323b41f4c965.png

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

e133c264fbd166b5ce941396cefe45d4.png

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

7cbd20fa40fcaa2beeb4d002a99ff81d.png

我们来通过实战演练一下,当然这个操作需要保证主备库都开启了闪回数据库的特性,在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

这个过程让我对闪回的强大功能又有了新的认识和了解,希望在一些极端场景中依然能够帮助到你们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值