Oracle-DG环境进行failover故障演练
简介
failover故障切换是指主库非计划内不可用时进行的切换操作。failover之后,DG环境会被破环,一般需要重建才能恢复DG。如果开启闪回功能,可以通过闪回数据库功能快速恢复DG环境。
恢复DG环境的方法
例如当前的DG环境:orcl为主库,orclstd为备库,当orcl宕机后,orclstd执行failover操作变为主库,此时想恢复DG环境。
-
将 orcl 利用闪回数据库功能闪回到 orclstd 执行failover的SCN时间点,然后将orcl转为备库,最后利用switchover转换为最初的状态。orcl需要开启闪回
-- 闪回数据库后,切换为备库SQL语句 alter database convert to physical standby;
-
将 orclstd 利用闪回数据库功能闪回到 orclstd 执行failover的SCN时间点,此时orclstd仍然会主库角色运行,然后将orclstd转换备库。orclstd需要开启闪回,而且会丢失部分数据
-
利用rman重新搭建DG环境
实验过程
主备库开启闪回
检查配置参数
-- 检查配置
set lines 300 pages 999
col name for a16
col db_unique_name for a18
col host_name for a28
select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
select oldest_flashback_scn, to_char(oldest_flashback_time,'yyyy-mm-dd HH24:mi:ss') oldest_flashback_time from v$flashback_database_log;
show parameter db_flashback_retention_target
数据库必须开启归档模式
必须配置闪回恢复区
show parameter db_recovery_file
参数配置
-- 指定闪回恢复区,也就是存放闪回日志的位置
alter system set db_recovery_file_dest ='+FRA' scope=spfile sid='*';
-- 指定恢复区大小
alter system set db_recovery_file_dest_size=10G scope=spfile sid='*';
--设置闪回保留的目标时间(只是target,2880分钟=两天)
alter system set db_flashback_retention_target=2880 scope=spfile sid='*';
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';
主库开启闪回
-- 开启闪回
startup mount;
alter database flashback on;
alter database open;
参数db_flashback_retention_target控制闪回时间范围,数字单位是分钟,默认值为1天
备库开启闪回
alter database recover managed standby database cancel;
alter database flashback on;
alter database recover managed standby database using current logfile disconnect from session;
利用flashback恢复ADG架构
主库(主库故障模拟)
-- 模拟主库发生故障
shutdwon abort;
备库(故障转移接管业务请求)
检查现备库是否有GAP
select thread#, low_sequence#, high_sequence# from v$archive_gap;
关闭日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- alter database recover managed standby database finish;
切换为主库
激活方式将备库转换为主库
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
switchover方式转换为主库
alter database commit to switchover to primary with session shutdown; -- <<<< 等数据库采用shutdown abort方式关闭或人为进行shutdown abort方式关闭数据库
检查数据库信息
-- 检查新主库角色 new primary(old standby)
select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
打开数据库
alter database open;
获取SCN号
SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) std_scn FROM V$DATABASE;
主库(主库故障恢复)
使用flashback方式将原主库恢复成物理备库
flashback闪回数据库
startup mount;
-- 上面获取到的SCN 号:SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) std_scn FROM V$DATABASE;
flashback database to scn 1388401;
select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
恢复为physical standby
alter database convert to physical standby;
shutdown immediate;
startup mount;
-- 开启日志apply
alter database recover managed standby database using current logfile disconnect from session;
至此,ADG恢复完成。
使用控制文件恢复ADG环境
新主库上创建standby control file
alter database create standby controlfile as '/tmp/new_standby.ctl';
故障主库恢复
# 传输standby control file到故障在主库
scp /tmp/new_standby.ctl oracle@primary:/ups/data/ora11g/ORCL/controlfile/new_standby.ctl
-
启动故障主库
startup mount; -- 追新增数据 alter database recover managed standby database using current logfile disconnect from session;
-
打开数据库并应用日志
alter database recover managed standby database cancel; alter database open; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
-
检查状态
select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
至此,恢复环境到DG配置。
Failover操作后,在原主库闪回恢复DG环境
主库(abort)
select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
-- 模拟故障关闭
shutdown abort
备库
alter database recover managed standby database cancel;
alter database recover managed standby database finish;
alter database commit to switchover to primary with session shutdown;
select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
alter database open;
恢复DG环境
获取failover操作的时间点(新主库)
-- 新主库上查询v$database
SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
原主库执行闪回操作
startup mount;
-- 闪回数据库
flashback database to scn 869568; -- 上面 v$database.STANDBY_BECAME_PRIMARY_SCN 的值
-- 查询数据库信息
select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
原主库转换为备库
注意:原Primary是以primary角色运行启动的,需要先成为Standby角色并应用后续的日志达到同步。
-- 转换为 physical standby role
alter database convert to physical standby;
-- 启动数据库
startup force;
-- 应用日志
alter database recover managed standby database using current logfile disconnect from session;
执行switchover切换成初始环境
详见 switchover实施方案
Failover操作后,在原备库闪回恢复DG环境
主库(abort)
select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
-- 模拟故障关闭
shutdown abort
备库
alter database recover managed standby database finish force;
alter database commit to switchover to primary with session shutdown;
select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
alter database open;
恢复DG环境
获取failover操作的时间点(新主库)
shutdown immediate;
startup mount;
-- 新主库上查询v$database
select STANDBY_BECAME_PRIMARY_SCN from v$database;
新主库执行闪回操作
flashback database to scn 901823; -- 上面获取到的SCN
新主库转换物理备库
alter database convert to physical standby;
新主库重新启动并开启日志应用
shutdown immediate;
startup;
alter database recover managed standby database using current logfile disconnect from session;
打开原主库
startup force;
检查确认DG状态
SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS
FROM V$MANAGED_STANDBY
-- WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0'
;
分类:
数据库(Oracle)
标签:
DataGurad
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)