DBAtlas · 数据库运维图谱

故障转移演练 / 计划内角色切换

一棵决策树:识别角色变更的类型(计划内主备切换、紧急故障转移,或不涉及生产的演练),并为每种场景给出正确的命令顺序和验证步骤。目标:计划内切换零数据丢失,紧急情况下损失最小,演练时完全不停机。

你想做什么?

选择角色变更的场景。是在主库健康时进行计划内切换(维护/迁移),还是主库确实已宕机需要紧急切换,或是在不触及生产的情况下进行演练/就绪验证?

  • 计划内主备切换(switchover)(主库健康)
  • 紧急故障转移(主库已宕机)
  • 演练 / 就绪测试(不触及生产)

计划内切换 — 先确认是否就绪?

计划内主备切换的目标是零数据丢失。为此,切换前必须确认副本已追上主库(延迟 ~0)且状态健康。使用下面的命令检查延迟;如果延迟接近零,继续执行切换步骤。

SELECT thread#, MAX(sequence#) FROM v$archived_log GROUP BY thread#;   -- DG: SELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag%';
  • 延迟接近零,可以切换
  • 延迟较高,先等待同步

计划内主备切换(无数据丢失的受控切换)

在主库和备库健康且同步时,以受控方式互换角色。顺序很重要:停止写入,确认剩余变更已到达备库,然后移交角色,并将应用重定向到新主库。

紧急切换 — 主库真的宕机了吗?

在强制故障转移之前,确认主库确实不可达,并评估脑裂风险。如果主库实际上仍存活(例如短暂的网络中断),强制切换会导致出现两个独立的可写副本(脑裂)。同时比较延迟,选择数据最新的备库。

-- try to reach the primary: tnsping primary_db; and on the standby: SELECT thread#, MAX(sequence#) FROM v$archived_log GROUP BY thread#;
  • 是的,主库已宕机 — 强制切换
  • 不确定 / 主库可能会恢复

紧急故障转移(主库已宕机,切换有数据丢失风险)

主库不可达,且无法等待其恢复。需要强制提升备库;在异步复制下,最后的部分事务可能会丢失。首要任务是恢复服务,然后确定丢失窗口,并安全地恢复旧主库。

演练 / 就绪测试(在不触及生产的情况下验证)

在不进行真实切换的情况下,证明你已为故障转移做好准备。在不影响生产的前提下,验证副本健康状况、延迟是否可接受以及应用能否被重定向。可选:在隔离的副本上演练一次真实的主备切换。

在 DBAtlas 中打开 →