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

    今天看到有一个网友提了一个问题,描述很简短
    测试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的闪回给备库带来了如此多的改进。

时间: 2024-09-20 00:58:54

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

浅谈ORACLE 10G 闪回恢复区

oracle|恢复   何为闪回恢复区 Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery ).实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area ).闪回恢复区是 Oracle 10g 中的新事物.简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间.允许用户集中存储所有恢复相关的文件.   闪回恢复区可以放在如下几种存储形式上: l         目录

oracle10g新特性:闪回恢复区(Flash recovery area)

1.设置闪回恢复区 闪回恢复区主要通过3个初始化参数来设置和管理: · db_recovery_file_dest:指定闪回恢复区的位置. · db_recovery_file_dest_size:指定闪回恢复区的可用空间大小. · db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天.当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flash log.所以这个参数要和db_recovery_f

Oracle的闪回恢复区详解

1.什么是闪回恢复区? Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery ).实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area ).闪回恢复区是 Oracle 10g 中的新事物.简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间.允许用户集中存储所有恢复相关的文件. 闪回恢复区可以放在如下几种存储形式上: (1)目录 (2)一个文件系统 (3)自动存储

10g关闭归档/启用闪回恢复区归档

一.关闭归档 1.启动SQL*PLUS以管理身份登录Oracle数据库: SQL> connect / as sysdba 2.关闭数据库实例 SQL> shutdown immediate 3.备份数据库:在对数据库做出任何重要的改变之前,建议备份数据库以免出现任何问题. 4.启动一个新的实例并装载数据库,但不打开数据库: SQL> startup mount 5.禁止自动存档 SQL> alter system archive log stop; 6.禁止存档联机重做日志:转换

如何彻底的删除Oracle表 及 闪回恢复在回收站里的数据

当一个表被删除时,它并不是真正的被删除了,而只是放在回收站里(recyclebin)了,当然只要表还在回收站里,它就可以被重新恢复,这也就是"闪回"技术的基本原理.需要说明的是,oracle并不提供100%的闪回,因为当用户在某个表空间里创建一个新表时或需要磁盘空间时,oracle首先使用空闲的磁盘空间,当没有足够的磁盘空间时,oracle会使用回收站的磁盘空间. 2 删除表 test 3 查看 回收站 SQL> show recyclebinORIGINAL NAME    R

归档日志物理删除后闪回恢复区空间未释放

连接数据库进去提示ora-00257:archiver error.Connect internal only,until freed. 登录服务器,操作系统验证,登录好久登录不进去 无奈,把oracle服务重启了下,终于登录进去了 查询v$archived_log 里面有2条归档日志记录,但是在磁盘上怎么找都找不到 select * from V$FLASH_RECOVERY_AREA_USAGE;--显示归档日志占用闪回恢复区有98% select sum(percent_space_use

PyQt 5信号与槽的几种高级玩法

信号(Signal)和槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制.本文介绍了几种PyQt 5信号与槽的几级玩法. 在Qt中,每一个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject的子对象)都支持信号与槽机制.当信号发射时,连接的槽函数将会自动执行.在PyQt 5中信号与槽通过object.signal.connect()方法连接. PyQt的窗口控件类中有很多内置信号,开发者也可以添加自定义信号.信号与槽具有如下特点. 一个信

十五天精通WCF——第九天 高级玩法之自定义Behavior

一: Behavior这个泼妇的厉害 在前面的文章中,我也清楚的说明了整个wcf通信流,而Behavior这个泼妇可以在wcf通信流中的任何地方插上一脚,蛮狠无比,利用的好,让你上天堂,利用的不 好,让你下地狱...下面让你看看behavior到底有哪些可以注入的点???先画个简图: 上面的图,大概就是wcf的通信简图,所有蓝色字体都是Behavior注入的点,其中Client和Service端都可以注入,如果按照功能分的话,又可以分为"操作级别"和 "端点级别",

Oracle DBCA高级玩法:从模板选择、脚本调用到多租户

作者介绍 杨建荣,DBAplus社群联合发起人.现就职于搜狐畅游,Oracle ACE-A.YEP成员,超7年数据库开发和运维经验,擅长电信数据业务.数据库迁移和性能调优.持Oracle 10G OCP,OCM,MySQL OCP认证,<Oracle DBA工作笔记>作者.   本篇文章的思路如下: DBCA-熟悉而又陌生 Oracle中创建数据库的模板      解读seed模板的原理 解析seed模板创建数据库的过程     解析DBCA的调用脚本      DBCA和技术趋势发展的关系