Oracle 10g DataGuard是Oracle推出的数据库高可用解决方案,通过物理备库实时同步主库数据,当主库出现异常或者需要计划内维护时,就可以通过主备切换保证业务连续性。其中switchover和failover是两种核心的切换方式,两者的适用场景、操作逻辑和影响都有明显差异。

switchover和failover的核心区别
首先我们需要明确两种切换方式的本质差异,避免在实际场景中用错:
| 对比维度 | switchover | failover |
|---|---|---|
| 适用场景 | 计划内主库维护、硬件升级等可提前规划的切换 | 主库突发故障无法恢复,需要紧急切换备库为主库 |
| 数据丢失风险 | 无数据丢失,切换前会确保所有主库日志同步到备库 | 可能存在少量数据丢失,取决于故障前未同步的日志量 |
| 原主库状态 | 切换后变为新的备库,可重新加入DataGuard架构 | 切换后原主库通常会脱离DataGuard架构,需要重新搭建或者恢复 |
| 操作可逆性 | 可逆,切换完成后可再次执行switchover切回原主库 | 不可逆,切换后原主库无法直接切回主库角色 |
switchover切换完整操作步骤
switchover是计划内的平滑切换,操作前需要确认主备库状态正常,日志同步无延迟。
1. 主库侧操作
首先查看主库当前角色和切换状态:
-- 查看主库角色和切换状态 SELECT DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE; -- 如果SWITCHOVER_STATUS为TO STANDBY,说明可以执行切换 -- 执行主库切换为备库的操作 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; -- 关闭并重启主库到mount状态 SHUTDOWN IMMEDIATE; STARTUP MOUNT;
2. 备库侧操作
主库切换完成后,再操作备库切换为主库:
-- 查看备库切换状态 SELECT DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE; -- 如果SWITCHOVER_STATUS为TO PRIMARY,执行切换为主库的操作 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 打开新的主库 ALTER DATABASE OPEN;
3. 恢复新备库同步
原主库已经变为备库,需要启动日志应用进程:
-- 在新备库(原主库)上启动日志应用 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
failover切换完整操作步骤
failover是主库故障时的紧急切换,操作前需要尽可能恢复主库未同步的日志,减少数据丢失。
1. 备库侧检查与日志恢复
首先尝试获取主库未同步的归档日志和在线日志,应用到备库:
-- 查看备库当前日志应用情况 SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; -- 如果主库还能访问,手动拷贝未同步的日志到备库注册应用 -- 如果主库无法访问,直接执行failover操作 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; -- 执行failover切换,强制备库变为主库 ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
2. 打开新主库
切换完成后打开新主库,业务可以连接到新主库运行:
ALTER DATABASE OPEN;
切换注意事项
- 执行switchover前务必确认主备库日志同步无延迟,避免切换后出现数据不一致
- failover操作前如果主库可以短暂恢复,优先拷贝未同步的日志到备库,降低数据丢失风险
- failover完成后,原主库如果需要重新加入DataGuard架构,需要重新搭建物理备库或者使用备份恢复后重新配置
- 切换完成后需要检查
V$DATABASE视图中的数据库角色,确认切换结果符合预期 - 切换过程中如果出现报错,优先查看
V$DATAGUARD_STATUS视图的报错信息,定位问题原因
注意:所有切换操作前都需要做好数据库全量备份,避免操作失误导致无法恢复数据。生产环境操作建议先在测试环境验证流程,再执行正式切换。
Oracle_10gDataGuard物理主备切换switchoverfailover修改时间:2026-06-06 22:47:11