网站首页 > 技术文章 正文
最近又试了下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
这个过程让我对闪回的强大功能又有了新的认识和了解,希望在一些极端场景中依然能够帮助到你们。
猜你喜欢
- 2024-11-07 Oracle-块损坏故障:ORA-01578 oracle数据库坏块修复
- 2024-11-07 万字总结 MySQL核心知识,赠送25连环炮
- 2024-11-07 闪回区报警引发的性能问题分析(一)
- 2024-11-07 Oracle将物理Standby库临时激活用于测试
- 2024-11-07 谈谈MySQL中的重做日志,回滚日志及二进制日志的区别及各自作用
- 2024-11-07 insert导致的性能问题大排查(r11笔记第26天)
- 2024-11-07 ORACLE ORA-03113 故障解决方法 oracle error 3113
- 2024-11-07 「方法」被delete table后,记住这个找回方法,没准能救你命
- 2024-11-07 闪回数据库不是“万金油”(r11笔记第73天)
- 2024-11-07 关于Oracle数据库Flashback Archive总结,值得收藏
你 发表评论:
欢迎- 617℃几个Oracle空值处理函数 oracle处理null值的函数
- 610℃Oracle分析函数之Lag和Lead()使用
- 599℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 595℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 591℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 582℃【数据统计分析】详解Oracle分组函数之CUBE
- 572℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 560℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)