一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Oracle Data Guard Observer断开后如何恢复

时间:2026-08-21 09:42:48 编辑:袖梨 来源:一聚教程网

Observer不会自动重连,必须手动重启并确认Broker状态同步;它是一次性命令,不驻留后台,失效常见于非独立主机执行、环境变量错误、日志目录无写权限或主备网络不可达,验证需查dgmon进程、drc*.log日志及SHOW FAST_START FAILOVER输出。

Observer 断开后不会自动重连,必须手动重启并确认 Broker 状态同步 —— 这是绝大多数人误以为“启过一次就一直运行”的根源。

为什么 dgmgrl START OBSERVER 失效或静默退出

Observer 进程本身不守护、不后台驻留,dgmgrl -silent "START OBSERVER" 是一次性命令,执行完即退出。常见失效原因包括:

  1. 执行路径不在独立 observer 主机上(远程 SSH 调用 dgmgrl 不触发 Observer 实例)
  2. ORACLE_HOMEPATH 未正确设置,导致找不到 dgmon 后台进程
  3. Observer 日志目录(默认 $ORACLE_HOME/rdbms/log/)无写权限,启动时失败但不报错
  4. Broker 配置中主备库网络不可达,Observer 启动后几秒内因心跳失败退出,日志里只有 ORA-16664: unable to receive results from database

如何验证 Observer 是否真正在运行

不能只看命令是否返回成功,要查三个地方:

  1. 执行 ps -ef | grep observer,确认有 dgmon 进程且父进程不是 shell(而是 oracle 用户的长期进程)
  2. 检查日志:tail -f $ORACLE_HOME/rdbms/log/drc*.log,正常应持续输出类似 Observer is monitoring configuration 和心跳时间戳
  3. dgmgrl 中连接 Broker 后运行 SHOW FAST_START FAILOVER,输出中 Observer Enabled 必须为 YES,且 FSFO StatusSYNCHRONIZED(不是 STARTED 或空白)

FSFO_STATUS = NOT SYNCHRONIZED 时该先做什么

这个状态比 Observer 进程是否存在更关键 —— 它说明 Broker 已感知到主备数据不同步,Observer 即使在跑也不会触发切换。优先顺序是:

  1. 先在主库查 SELECT FSFO_STATUS FROM V$DATABASE,确认值为 SYNCHRONIZED;若不是,说明 redo 传输或应用卡住,得先解决日志 GAP
  2. 再查备库的 V$ARCHIVE_DEST_STATUS,重点看 STATUS = VALIDERROR 列为空;若有 ORA-16057ORA-16714,需修复归档路径或角色配置
  3. 最后才重启 Observer:停掉旧进程(kill -9 找到的 dgmon),清理日志文件,再用完整路径执行 $ORACLE_HOME/bin/dgmgrl -silent "START OBSERVER"

Observer 的可靠性不取决于“有没有启动”,而取决于它能否持续读取 V$DATABASE.FSFO_STATUS 并与 Broker 通信。任何一环断开(权限、网络、日志路径、SCN 同步)都会让它变成“活着的摆设”。

热门栏目