Oracle Data Guard中备库不会自动同步主库新增的Online Redo Log组,必须手动添加大小≥主库最大日志、数量≥主库组数+1且匹配THREAD的Standby Redo Log(SRL),否则切换或应用会失败。
主库加 ALTER DATABASE ADD LOGFILE 后备库不自动同步 SRL
oracle data guard 不会自动在备库创建 standby redo log(srl),哪怕主库刚加了新 online redo log 组。这是设计使然,不是 bug。备库必须手动添加 srl,否则切换或重做应用可能卡在“waiting for archive log”或报 ora-00313、ora-00312 错误。
实操建议:
- 主库执行
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/oradata/ORCL/redo04a.log') SIZE 200M;后,立刻查备库是否已有对应数量的 SRL —— 通常没有 - 备库上不能用
ALTER DATABASE ADD STANDBY LOGFILE直接照搬主库路径(尤其 RAC 或 ASM 环境路径不一致) - 优先用
V$LOGFILE和V$STANDBY_LOG对比组数:SRL 组数应 ≥ Online Redo Log 组数 + 1(官方推荐) - 若备库是物理 standby 且处于 MOUNT 状态,可直接添加;若已启用了实时应用(
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE),需先取消恢复再加
备库加 SRL 必须匹配主库 Online Redo Log 的 SIZE 和 THREAD
SRL 大小必须 ≥ 主库对应线程中最大 Online Redo Log 文件尺寸,否则日志传输时会报 ORA-16191(primary and standby database are not synchronized)或归档无法应用。
实操建议:
- 查主库最大日志尺寸:
SELECT MAX(BYTES) FROM V$LOG;,比如结果是209715200(200MB) - 备库添加时不能写更小值,例如
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '/u01/oradata/ORCL/srl4.log' SIZE 100M;是错的 - 单实例主库默认 THREAD 1;RAC 主库若开了多线程,备库必须为每个 THREAD 都配够 SRL,否则某线程日志无法传递
- 路径名无需和主库一致,但需确保 Oracle 进程有读写权限,且磁盘空间充足(SRL 占用和 Online Redo Log 相当)
备库已开启实时应用时,加 SRL 的安全操作顺序
直接在运行中的 MRP(Managed Recovery Process)下执行 ALTER DATABASE ADD STANDBY LOGFILE 会失败,报 ORA-01126:database must be mounted in exclusive mode and not open —— 但物理备库正常就是 MOUNT 状态,问题出在 MRP 正在跑。
实操建议:
- 先停恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 确认状态:
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP0';应返回空或NOT APPLYING - 再加 SRL:
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '/u01/oradata/ORCL/srl4.log' SIZE 200M; - 重启恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; - 加完别忘验证:
SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$STANDBY_LOG;看新组是否显示UNASSIGNED
常见误操作导致 SRL 无效的三个信号
看似加成功了,但后续主库切日志、备库追日志仍失败,大概率是 SRL 没真正生效。最典型的假成功现象:
- 加完后
V$STANDBY_LOG显示ACTIVE状态持续不退 —— 说明该组正被 MRP 使用中,但没完成归档应用,可能是大小不匹配或路径不可写 - 主库
ALTER SYSTEM SWITCH LOGFILE后,备库V$ARCHIVED_LOG中新生成的归档APPLIED = 'NO',且REGISTRAR是RFS而非MRP0—— 表明日志没进 SRL,还在等归档落盘 - 告警日志里反复出现
Standby redo logfile not found for thread或Could not find archived log—— 很可能漏加了某个 THREAD 的 SRL,尤其 RAC 环境容易只加了 THREAD 1
真正加对的标志只有一个:主库连续 SWITCH LOGFILE 三次,备库告警日志里能看到 Media Recovery Waiting for thread 后迅速接上 archived log for thread,且 V$MANAGED_STANDBY 中 MRP0 的 STATUS 始终是 APPLYING_LOG。










