Oracle ADG 切换方式详解:Switchover 与 Failover 操作指南
引言
在 Oracle Data Guard(DG)环境中,切换操作是保障数据库高可用性和业务连续性的关键环节。根据不同的应用场景,Oracle DG 提供了两种主要的切换方式:switchover(正常切换) 和 failover(故障转移)。本文将详细介绍这两种切换方式的定义、操作流程、状态校验及注意事项,帮助数据库管理员在实际环境中高效、安全地完成切换操作。
一、Switchover(正常切换)
Switchover 是一种计划内的、用户主动发起的切换操作。其特点是切换过程中不会丢失数据,且切换后 Data Guard 环境仍保持完整,主备关系可继续正常运行。Switchover 需先后对主库和备库进行操作。
(一)主库操作步骤
-
查看 switchover_status
执行以下语句确认主库是否可切换:SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;
若
SWITCHOVER_STATUS
为TO STANDBY
,表示可正常切换。
-
切换主库为物理备库
根据上一步状态执行切换命令:- 若
SWITCHOVER_STATUS
为TO STANDBY
,可省略WITH SESSION SHUTDOWN
:ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
- 否则需强制执行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
- 若
-
重启至 MOUNT 状态
- 11.2.0.4 及以上版本无需手动重启,切换命令自动处理。
- 低版本需手动执行:
SHUTDOWN ABORT; STARTUP MOUNT;
-
确认切换后状态
验证主库是否已成功转换为备库:SELECT DB_UNIQUE_NAME, DATABASE_ROLE, PROTECTION_MODE, SWITCHOVER_STATUS, OPEN_MODE FROM V$DATABASE;
(二)备库操作步骤
-
查看备库状态
确认备库可切换为主库:SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;
若
SWITCHOVER_STATUS
为TO PRIMARY
或SESSION ACTIVE
,表示可提升。 -
提升备库为主库
根据状态执行提升命令:- 若状态为
TO PRIMARY
,可省略WITH SESSION SHUTDOWN
:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
- 否则需强制执行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
- 若状态为
-
打开数据库并确认角色
ALTER DATABASE OPEN; SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
二、Failover(故障转移)
Failover 是在主库发生故障时强制将备库提升为主库的操作。切换后原有的 DG 环境可能被破坏,且可能存在数据丢失(取决于主库故障前的保护模式)。若原主库启用了闪回数据库(Flashback Database),可在修复后重新加入环境作为新备库。
备库操作步骤
-
检查归档日志间隙
查询是否存在未同步的日志:SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
-
手动注册缺失日志(如果存在间隙)
将从原主库拷贝的归档日志注册至备库:ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/archive_log_sequence.rdo';
-
确认日志已应用至最新
SELECT THREAD#, MAX(SEQUENCE#) OVER (PARTITION BY THREAD#) FROM V$ARCHIVED_LOG;
-
执行故障切换
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
三、状态校验与后续操作
无论执行哪种切换,完成后均需进行以下检查:
1. 确认数据库角色
SELECT DATABASE_ROLE FROM V$DATABASE;
2. 检查 DG 进程状态
SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;
3. 监控同步延迟
SELECT NAME, VALUE, UNIT, TIME_COMPUTED
FROM V$DATAGUARD_STATS
WHERE NAME IN ('transport lag', 'apply lag');
4. 注意事项
- Switchover 需主备库网络连通且状态同步。
- Failover 后需重新配置 DG 环境(若原主库可恢复,可通过闪回重建备库)。
- 在最大性能模式下,failover 可能导致数据丢失,需评估业务容忍度。
- 建议在生产环境中提前演练切换流程。
总结
Switchover 和 Failover 是 Oracle Data Guard 中两种关键的灾难恢复和高可用保障机制。前者适用于计划内维护,后者用于紧急故障响应。理解其原理、掌握操作步骤、并严格完成状态验证,是确保数据库业务连续性的基础。建议结合定期演练和监控工具,构建安全可靠的数据库容灾体系。