
ORA-16724 不是归档丢了就要重建备库,而是 Broker 检测到 gap 但不知道该从哪拿日志——大概率是配置没对齐,不是数据真丢了。
先确认是不是真有 gap,别被 Broker 状态带偏
Broker 显示 ORA-16724,不代表日志一定缺失,可能只是它“找不到”路径。必须绕过 Broker 直接查底层状态:
- 在 standby 上运行
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;—— 如果返回空行,说明没有物理 gap,问题出在 Broker 配置或传输链路 - 在 primary 上查
SELECT STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID = 2;—— 若 STATUS 是ERROR,看 ERROR 列具体值(比如ORA-12514就是 TNS 服务名没配对) - 检查 standby 端归档接收目录:
ls -lt /u01/arch/stby/,如果几分钟内没新文件,说明传输卡在中间环节,不是 gap 本身的问题
Broker 和 SPFILE 的 LOG_ARCHIVE_DEST_n 必须严格一致
Broker 不读 SPFILE,只认自己 .dat 配置文件里的值。你用 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=... 改了 SPFILE,Broker 还按旧配置校验,MRP 就收不到日志,V$ARCHIVE_GAP 开始非空,最终触发 ORA-16724。
- 查 Broker 实际用的值:
SELECT DEST_ID, PROPERTY_VALUE FROM V$DATAGUARD_CONFIG;,和SHOW PARAMETER log_archive_dest_2对比,不一致就肯定踩坑了 - 同步必须用 DGMGRL 反向写入:
EDIT DATABASE 'primary_db' SET PROPERTY LogArchiveDest_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';—— 这条命令会同时更新 .dat 和 SPFILE(如果 SPFILE 可用) - 备库端不要手动设
LOG_ARCHIVE_DEST_1接收主库 redo,Broker 接管后只认LOG_ARCHIVE_DEST_2;本地归档用LOG_ARCHIVE_DEST_1落盘即可
补日志前必须验证三件事,否则 reinstate 可能引发块损坏
看到 V$ARCHIVE_GAP 有输出,别急着 scp 日志再 register。跳过验证直接操作,容易触发 ORA-16666 或更严重的物理不一致:
- 确认 primary 和 standby 的
COMPATIBLE参数完全一致(如都是12.1.0.2),差一个 patchset 都可能导致 SQL Apply 拒绝某类归档 - 检查 standby 是否启用
STANDBY_FILE_MANAGEMENT=AUTO,否则新增表空间时归档无法自动创建对应数据文件,后续会连带报错 - 运行
SELECT THREAD#, SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG WHERE STANDBY_DEST = 'YES' ORDER BY SEQUENCE# DESC,确认最近接收的日志是否连续,避免补错序列号
Broker 卡在 RESOLVING 或 UNKNOWN 时的硬切操作
如果 show configuration 长时间停在 RESOLVING(超 10 分钟),Broker 内部协调已失焦,必须人工干预:
- 先强制 Broker 重读所有 dest 状态:
DGMGRL> EDIT CONFIGURATION SET PROPERTY LogXptMode='ASYNC';(哪怕没改,触发一次 reload) - 仍失败就在 standby 端停掉 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 手工 recover 一次:
RECOVER AUTOMATIC FROM '/u01/arch/stby' STANDBY DATABASE;—— 注意路径要和LOG_ARCHIVE_DEST_1一致,否则报ORA-00279
真正麻烦的是跨版本、跨存储(ASM ↔ 文件系统)、或级联链路中继节点未正确配置 FAL_SERVER 的场景——这些地方 Broker 不报错,但 gap 会静默堆积,等发现时往往已错过窗口期。


















