最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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" 是一次性命令,执行完即退出。常见失效原因包括:
- 执行路径不在独立 observer 主机上(远程 SSH 调用
dgmgrl不触发 Observer 实例) -
ORACLE_HOME或PATH未正确设置,导致找不到dgmon后台进程 - Observer 日志目录(默认
$ORACLE_HOME/rdbms/log/)无写权限,启动时失败但不报错 - Broker 配置中主备库网络不可达,Observer 启动后几秒内因心跳失败退出,日志里只有
ORA-16664: unable to receive results from database
如何验证 Observer 是否真正在运行
不能只看命令是否返回成功,要查三个地方:
- 执行
ps -ef | grep observer,确认有dgmon进程且父进程不是 shell(而是oracle用户的长期进程) - 检查日志:
tail -f $ORACLE_HOME/rdbms/log/drc*.log,正常应持续输出类似Observer is monitoring configuration和心跳时间戳 - 在
dgmgrl中连接 Broker 后运行SHOW FAST_START FAILOVER,输出中Observer Enabled必须为YES,且FSFO Status为SYNCHRONIZED(不是STARTED或空白)
FSFO_STATUS = NOT SYNCHRONIZED 时该先做什么
这个状态比 Observer 进程是否存在更关键 —— 它说明 Broker 已感知到主备数据不同步,Observer 即使在跑也不会触发切换。优先顺序是:
- 先在主库查
SELECT FSFO_STATUS FROM V$DATABASE,确认值为SYNCHRONIZED;若不是,说明 redo 传输或应用卡住,得先解决日志 GAP - 再查备库的
V$ARCHIVE_DEST_STATUS,重点看STATUS = VALID且ERROR列为空;若有ORA-16057或ORA-16714,需修复归档路径或角色配置 - 最后才重启 Observer:停掉旧进程(
kill -9找到的dgmon),清理日志文件,再用完整路径执行$ORACLE_HOME/bin/dgmgrl -silent "START OBSERVER"
Observer 的可靠性不取决于“有没有启动”,而取决于它能否持续读取 V$DATABASE.FSFO_STATUS 并与 Broker 通信。任何一环断开(权限、网络、日志路径、SCN 同步)都会让它变成“活着的摆设”。