read only而非read only with apply表明adg未启用,根本原因是mrp进程未启动或中断;需确认备库处于mount状态、srl已创建、compatible≥11.1.0.0.0、主库启用force logging,并执行open read only with apply启动mrp。

备库 OPEN_MODE 显示 READ ONLY 而不是 READ ONLY WITH APPLY
这是 ADG 未真正启用的最直接信号。不是权限问题,也不是对象不可见,而是日志根本没在应用。
执行 SELECT OPEN_MODE, DATABASE_ROLE, PROTECTION_MODE FROM v$database; —— 正常 ADG 备库必须返回 READ ONLY WITH APPLY。若为 READ ONLY,说明 MRP 进程未启动或已中断。
- 备库必须先处于
MOUNT状态才能启动实时应用;如果已OPEN READ ONLY,需先ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;,再SHUTDOWN IMMEDIATE→STARTUP MOUNT -
compatible参数必须 ≥11.1.0.0.0:查SHOW PARAMETER compatible,低于该值会静默降级,且修改后需重启生效(SCOPE=SPFILE) - 确认 STANDBY REDO LOGS(SRL)已创建且数量/大小 ≥ 主库 ONLINE REDO LOGS;缺失 SRL 会导致
USING CURRENT LOGFILE命令静默失败
MRP0 进程状态不是 APPLYING_LOG
v$managed_standby 中 MRP0 是日志应用的实际执行者。它不出现、状态卡在 WAIT_FOR_LOG 或 WAIT_FOR_GAP,都意味着应用中断。
运行 SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM v$managed_standby WHERE PROCESS = 'MRP0';
- 无记录 → 手动启动:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; - 状态为
WAIT_FOR_GAP→ 查v$archive_gap,确认是否存在归档序列缺口;有则需从主库拷贝并REGISTER PHYSICAL LOGFILE - 状态为
WAIT_FOR_LOG→ 检查主库v$archive_dest_status的ERROR列,常见如ORA-16057(FAL 服务拒绝)、ORA-12514(TNS 服务名不匹配)
归档传输正常但 applied='NO' 日志持续堆积
即使 RFS 和 ARCH 进程显示正常、归档文件已落盘,v$archived_log.applied='NO' 仍大量存在,说明日志进了磁盘却没被 MRP 消费。
执行 SELECT thread#, COUNT(*) FROM v$archived_log WHERE applied='NO' GROUP BY thread#;
- 积压增长 +
MRP0状态停滞 → 优先检查 undo 表空间:若autoextensible=NO且已满,MRP 会因无法分配回滚段而挂起 - 检查
v$dataguard_stats中apply lag是否持续增大;若transport lag很小但apply lag很大,问题在备库本地(I/O、CPU、SRL 不足) - 备库 SRL 组数过少时,高峰期日志切换频繁,SRL 被占满后新日志无法写入,MRP 只能等待 —— 此时
MRP0状态仍是APPLYING_LOG,但实际进度停滞
Broker 启动成功但 show configuration 报 ORA-16525
DGMGRL 连接成功但执行 show configuration 直接报 ORA-16525: the data guard broker is not yet available,说明 Broker 进程(dmon)虽启动,但未能完成初始化。
根本原因几乎总是配置参数未真正生效:
- 确认
dg_broker_start在所有实例上均为TRUE且SCOPE包含SPFILE(RAC 环境用GV$PARAMETER查) - 检查
DG_BROKER_CONFIG_FILE1路径是否存在、目录已手动创建、属主为oracle、权限为644;ASM 路径还需确认 diskgroup 已挂载 - 监听器必须静态注册,且
GLOBAL_DBNAME必须等于备库的DB_UNIQUE_NAME;否则 Broker 启动时尝试连接备库失败,会静默退出 - 关键线索不在
alert.log,而在$ORACLE_HOME/rdbms/log/drc<db_unique_name>.trc</db_unique_name>—— 这里才有ORA-16501、ORA-16706的真实上下文
真正卡住 ADG 实时应用的,往往不是命令没敲对,而是底层依赖没满足:SRL 数量、undo 自动扩展、compatible 版本、Broker 静态注册服务名——这些点错一个,USING CURRENT LOGFILE 就像没执行一样。











