DG 物理Standby角色切换及Failover

一.角色转换:
==========

物理Standby的Switchover:
①在Primary库中检查v$database视图的switchover_status列的状态,是否支持switchover操作:如果该列值为"TO STANDBY"则表示primary 数据库支持转换为standby 角色,否则的话你就需要重新检查一下Data Guard 配置,比如看看LOG_ARCHIVE_DEST_n 之类参数值是否正确有效等等。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE -------注意该值不是TO STANDBY,所以需要检查spfile中LOG_ARCHIVE_DEST_n 参数的设置了
SQL>
如果值是SESSIONS ACTIVE,你需要检查和终止活动的用户,如果始终显示SESSIONS ACTIVE,你可以在语句ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY之后附加WITH SESSION SHUTDOWN子句来完成切换

SQL>  alter database commit to switchover to physical standby ; --------执行该语句后,primary 数据库将会转换为standby 数据库,并自动备份控制文件到trace。
SQL>
SQL>  shutdown immediate --------关库后重启到mount状态即可,至此该库转换成Standby库了
SQL>  startup mount
SQL>
SQL>  alter database recover managed standby database disconnect from session; ---------启动Redo应用

②在Standby库中检查v$database视图的switchover_status列的状态,是否支持switchover操作:
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL>
SQL>  alter database commit to switchover to primary ;  --------此时此库可以处于mount 模式或open read only 模式,但不能处于open read write模式。
SQL>
SQL>  alter database open; -----至此该库转换成为Primary库了
③验证下是否转换成功:
在新Primary库中查看(原standby库):
SQL> show parameter db_uni
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string standby
SQL>
SQL> alter system switch logfile;
SQL>
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
             10
SQL>
在新Standby库中查看(原primary库):----注意:此时新Standby库中启用了Redo应用。
SQL> show parameter db_uni
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string primary
SQL>
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
             10
SQL>
新Standby库的归档日志序列号与新Primary库归档日志的序列号一致,表示物理Standby的Switchover转换成功。


二、物理Standby的Failover:
====================

注意: 转换standby 数据库到MAXIMIZE PERFORMANCE模式作Failover操作:
SQL> alter database set standby database to maximize performance;

①检查归档文件是否连续:
如果standby处于maximum protection 或maximum availability 模式的话,归档日志应该是连续存在的
SQL>  select thread#,low_sequence#,high_sequence# from v$archive_gap;
no rows selected
SQL>
sql> alter system flush redo to Target_db_name;   
Note:1)11g新加功能,如果不是11g的data gurad 则跳过。
      如果返回的有记录,按照列出的记录号复制对应的归档文件到待转换的standby服务器。这一步非常重要,必须确保所有已生成的归档文件均已存在于standby 服务器,不然可能会数据不一致造成转换时报错。
------文件复制之后,通过下列命令将其加入数据字典:
SQL>  alter database register physical logfile 'filespec1';


②在主备库上检查归档文件是否完整(若Primary库仍可查的话):
执行下列语句获取各线程归档文件最大序号。
SQL> select distinct thread#,max(sequence#) over(partition by thread#) as "last" from v$archived_log;
   THREAD#     LAST
--------------  ------
         1              9
SQL>

③停止Apply Redo,启动Failover:
       在执行failover 之前,尽可能将原primary 数据库的可用redo都复制到standby 数据库。
SQL> alter database recover managed standby database cancel ;         停止Redo应用

SQL>  alter database recover managed standby database finish [ force | wait | nowait ] ;     Start Failover,stop apply Redo
在执行这个命令的时候,如果主库和备库之间的网络中断了。 那么备库的RFS进程就会等待网络的连接,直到TCP超时。FORCE 关键字将会停止当前活动的RFS 进程,以便立刻执行failover。

④切换物理Standby角色为Primary库,并重新启动新Primary库:
SQL> alter database commit to switchover to primary;
SQL> alter database open; ------如果处于read only状态,则需shutdown immediate后启动。
SQL>
Note:当我们正常切换的时候,如果提示我们需要介质恢复的时候执行
恢复备库: recover standby database until cancel;
Note:手工输入online redo尝试
激活备库: alter database activate standby database;
重启数据库
shutdown immediate;
startup

       角色转换工作完成。剩下的是补救措施(针对原primary 数据库),由于此时primary 数据库已经不再是data guard 配置的一部分,我们需要做的就是尝试看看能否恢复原primary 数据库,将其改造为新的standby服务器。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值