前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试758】在Oracle的DG中,Switchover和Failover的区别有哪些?

【DB笔试面试758】在Oracle的DG中,Switchover和Failover的区别有哪些?

作者头像
小麦苗DBA宝典
发布2020-02-25 11:17:54
1.2K0
发布2020-02-25 11:17:54
举报

题目部分

在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语句为:

代码语言:javascript
复制
--在主库操作
alter database commit to switchover to physical standby with session shutdown; 
startup force mount;
--在备库操作
select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name, flashback_on  from v$database; 
alter database commit to switchover to primary with session shutdown; 
alter database open;

物理DG在执行Failover切换的主要SQL语句为:

代码语言:javascript
复制
--在备库操作
alter database recover managed standby database finish force; 
alter database commit to switchover to primary with session shutdown;
alter database open; 

物理DG在执行Failover后,在原备库端查看V$DATABASE视图的STANDBY_BECAME_PRIMARY_SCN列,可以看到这个库成为primary的具体时间,如下所示:

代码语言:javascript
复制
--新主库
SELECT STANDBY_BECAME_PRIMARY_SCN FROM V$DATABASE;
--原主库或新主库
startup mount
flashback database to scn 1326995;

在原主库或新主库执行闪回数据库后,切换主库为备库的SQL语句为:

代码语言:javascript
复制
alter database convert to physical standby; 
startup force;
alter database recover managed standby database using current logfile disconnect from session;

(2) 逻辑DG在执行Switchover切换时的主要SQL语句为:

代码语言:javascript
复制
select switchover_status,database_role,open_mode from gv$database;
--在主库操作
alter database prepare to switchover to logical standby;
select switchover_status from v$database;--PREPARING SWITCHOVER
--在备库操作
alter database prepare to switchover to primary;
select switchover_status from v$database;--PREPARING SWITCHOVER
--在主库操作
select switchover_status from v$database; --结果应该为:TO LOGICAL STANDBY,否则需要取消转换ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
alter database commit to switchover to logical standby; --开始转换主库为逻辑备库
--在备库操作
select switchover_status from v$database;--状态应该为为TO PRIMARY,若不是该状态,则不能转换为主库,可能出现ORA-16109错误,那么就得回退刚刚的操作
alter database commit to switchover to primary;--开始转换逻辑备库为主库
--新逻辑备库执行
alter database start logical standby apply immediate;--启动新逻辑standby的SQL应用

逻辑DG在执行Failover切换时的主要SQL语句为:

代码语言:javascript
复制
--在备库操作
alter 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程序员面试笔试宝典》,作者:小麦苗

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档