♣
题目部分
在Oracle的DG中,Switchover和Failover的区别有哪些?
♣
答案部分
一个DG环境中只有两种角色:Primary和Standby。所谓角色转换就是让数据库在这两种角色中切换,切换也分两种:Switchover和Failover,关于角色切换需要注意以下几点:
① Switchover是指主库转换成备库,然后将原备库转换成新主库;而Failover是指将备库转换成主库。
② 使用场合不同:Switchover用于有准备的、计划之中的切换,通常是系统升级、数据迁移等常态任务;Failover用于意料之外的突发情况,例如异常断电、自然灾难等等。
③ 数据丢失程度不同:Switchover不会丢失数据,Failover通常意味着有部分数据丢失。
④ 善后处理的不同:Switchover之后DG环境不会被破坏,仍然有Primary、Standby两种角色的系统存在,但是Failover之后,DG环境就会被破坏,一般情况下需要重建。但是,若主库或备库开启了闪回功能,则都可以通过闪回数据库功能恢复DG环境。例如,PROD1为主库,SBDB1为备库;若PROD1意外宕机,则SBDB1执行Failover操作变为主库;此时若想恢复DG环境,则有3种处理办法:
a. 将PROD1利用闪回数据库功能闪回到SBDB1变为主库的SCN时间点,然后将PROD1转换为备库,最后利用switchover转换为最初的环境。在这种情况下,PROD1需要开启闪回。
b. 将SBDB1利用闪回数据库功能闪回到SBDB1变为主库的SCN时间点,此时SBDB1仍然是主库的角色,然后将SBDB1转换为备库。在这种情况下,SBDB1需要开启闪回,而且会丢失部分数据。
c. 利用RMAN重新搭建DG环境。
下面给出角色切换过程中常用的一些SQL语句。
(1) 物理DG在执行Switchover切换时的主要SQL语句为:
1--在主库操作 2alter database commit to switchover to physical standby with session shutdown; 3startup force mount; 4--在备库操作 5select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name, flashback_on from v$database; 6alter database commit to switchover to primary with session shutdown; 7alter database open;
物理DG在执行Failover切换的主要SQL语句为:
1--在备库操作 2alter database recover managed standby database finish force; 3alter database commit to switchover to primary with session shutdown; 4alter database open;
物理DG在执行Failover后,在原备库端查看V$DATABASE视图的STANDBY_BECAME_PRIMARY_SCN列,可以看到这个库成为primary的具体时间,如下所示:
1--新主库 2SELECT STANDBY_BECAME_PRIMARY_SCN FROM V$DATABASE; 3--原主库或新主库 4startup mount 5flashback database to scn 1326995;
在原主库或新主库执行闪回数据库后,切换主库为备库的SQL语句为:
1alter database convert to physical standby; 2startup force; 3alter database recover managed standby database using current logfile disconnect from session;
(2) 逻辑DG在执行Switchover切换时的主要SQL语句为:
1select switchover_status,database_role,open_mode from gv$database; 2--在主库操作 3alter database prepare to switchover to logical standby; 4select switchover_status from v$database;--PREPARING SWITCHOVER 5--在备库操作 6alter database prepare to switchover to primary; 7select switchover_status from v$database;--PREPARING SWITCHOVER 8--在主库操作 9select switchover_status from v$database; --结果应该为:TO LOGICAL STANDBY,否则需要取消转换ALTER DATABASE PREPARE TO SWITCHOVER CANCEL; 10alter database commit to switchover to logical standby; --开始转换主库为逻辑备库 11--在备库操作 12select switchover_status from v$database;--状态应该为为TO PRIMARY,若不是该状态,则不能转换为主库,可能出现ORA-16109错误,那么就得回退刚刚的操作 13alter database commit to switchover to primary;--开始转换逻辑备库为主库 14--新逻辑备库执行 15alter database start logical standby apply immediate;--启动新逻辑standby的SQL应用
逻辑DG在执行Failover切换时的主要SQL语句为:
1--在备库操作 2alter database activate logical standby database finish apply;
该语句主要是停止待转换的逻辑standby中RFS进程,并应用完当前所有已接收但并未应用的redo数据,然后停止SQL应用,将数据库转换成primary角色。在切换完成后,原主备库关系遭到破坏,已经不能再使用简单的命令修复了。
需要注意的是,要在primary和逻辑standby之间切换角色,一般是从操作primary开始。如果primary或逻辑standby是RAC架构,那么只保留一个实例启动,其它实例全部shutdown,等角色转换操作完成之后再启动其它实例,角色转换的操作会自动传播到这些实例上,并不需要再对这些实例单独做处理。
& 说明:
有关具体的Switchover和Failover切换的过程可以参考我的BLOG:
① 物理DG的Switchover切换:http://blog.itpub.net/26736162/viewspace-1753111/
② 物理DG的Failover切换:http://blog.itpub.net/26736162/viewspace-1753130/
③ 利用闪回数据库(flashback)修复Failover后的DG环境:http://blog.itpub.net/26736162/viewspace-2146883/
④ Switchover和Failover的区别:http://blog.itpub.net/26736162/viewspace-2141207/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
DBA宝典
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。