Oracle 11g dataguard failover

    Switchover动作是不会引起数据丢失的,Standby可以保证接受并且应用所有的Redo Log数据。而Failover则不好说,根据不同的保护模式(Protection Mode),一个事务在主库上面是否被commit,是取决于standby上是否接受和应用上日志数据。所以,在进行Failover的时候,是可能会丢数据的。

    在进行Failover之后,Primary库实际上是退出了Oracle HA架构体系,成为游离对象。Standby在切换之后就成为新的Primary。这个过程就是角色切换。

操作过程:

1.模拟primary崩溃,直接关闭。

SQL>  shutdown abort
ORACLE instance shut down.

真实环境下,Primary的故障是多样的,现象也是多样的。最彻底的就是Primary站点直接失去联系,不能访问。这种情况出现并不多,但是也能出现。比如磁盘(非冗余)损坏、断电、地震天灾。最简单的情况也许是监听器停止工作需要重启、实例停止等等。
 
故障的多样,也就意味着恢复的机会是多样的。在11g里面,Oracle认为最理想的情况是,虽然Oracle数据库不能打开,但是可以启动到mount状态。

Mount状态之所以重要,就在于如果可以到这个阶段,控制文件control_file就可以读取到,归档日志和在线日志的位置、信息都可以读取到。这也就意味着最大可能性的进行数据恢复,避免数据损失。
 
在11g中,推出了日志手工flush的功能,来弥补日志数据没有传递的问题。

#10g版本下没有办法自动flush redo的。解决的方法也是有的,就是从Primary目录中,将日志拷贝到Standby端,手工去加载。

SQL> alter system flush redo to 'db131';

System altered.

检查日志gap的问题,可以查看视图v$archive_gap。

SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;

no rows selected

如果没有发现明显的gap现象,说明此次的failover不会有数据损失情况。在standby端,要进行关闭apply和结束应用动作。

2.将备库进行关闭apply和结束应用动作。

SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;

no rows selected

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database recover managed standby database finish;

Database altered.


将角色切换为primary,观察database_role在切换角色前后的变化:

SQL>  select name,open_mode,database_role,db_unique_name from v$database;

NAME      OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
--------- -------------------- ---------------- ------------------------------
ORCL      READ ONLY            PHYSICAL STANDBY db131

SQL> alter database activate physical standby database;

Database altered.

SQL> select name,open_mode,database_role,db_unique_name from v$database;

NAME      OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
--------- -------------------- ---------------- ------------------------------
ORCL      MOUNTED              PRIMARY          db131

最后打开备库:

SQL> alter database open;

Database altered.

SQL>  select name,open_mode,database_role,db_unique_name from v$database;

NAME      OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
--------- -------------------- ---------------- ------------------------------
ORCL      READ WRITE           PRIMARY          db131

 

Failover做完 后,HA环境已结束,需要重新搭建dataguard。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值