跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何处理Data Guard中的主库添加Redo日志组_备库同步添加Standby Redo Log操作

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
。

相关文章