必须确认备用重做日志(srl)已创建且至少一组处于unassigned或active状态,大小不小于主库最大在线日志,路径可写且权限正确,mrp未占用待操作组,否则将导致应用延迟或ora错误。

查备用重做日志组是否存在且状态正常
如果 v$standby_log 视图为空,说明根本没配备用重做日志(SRL),MRP 进程无法实时应用重做数据,只能靠归档日志追赶,延迟必然高。必须先确认 SRL 组已创建且至少一个处于 UNASSIGNED 或 ACTIVE 状态。
执行以下查询:
SELECT group#, thread#, sequence#, bytes, status, archived FROM v$standby_log;
常见问题:
- 返回零行 → 未创建 SRL,需用
ALTER DATABASE ADD STANDBY LOGFILE补齐 - 所有
STATUS为UNUSED或INVALID→ 文件损坏或路径不可写 -
BYTES小于主库最大在线日志大小 → 可能导致 ORA-00313 或写满后卡住
比对 SRL 大小与主库在线日志是否匹配
备用重做日志大小不能小于主库任意一个在线重做日志组的 bytes 值,否则传输过程中可能因空间不足被阻塞,甚至触发 ORA-00313 或 ORA-00286。
在主库查最大日志大小:
SELECT MAX(bytes) FROM v$log;
在备库查 SRL 当前大小:
SELECT MAX(bytes) FROM v$standby_log;
若后者更小,必须重建 SRL 组 —— 不能直接 ALTER 修改大小,得先 DROP 再 ADD,且操作前确保 MRP 已停:
- 先停应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 再删旧组:
ALTER DATABASE DROP STANDBY LOGFILE GROUP 4; - 重建时指定足够大小:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/STBY/srl04.log') SIZE 512M;
验证 SRL 文件路径是否可写且权限正确
ORA-00286 或 ORA-27040 常源于文件系统层面:目录不存在、Oracle 用户无写权限、SELinux 或 mount 选项限制(如 noexec 或 nosuid)。
检查步骤:
- 用
v$logfile查 SRL 物理路径:SELECT group#, type, member FROM v$logfile WHERE type = 'STANDBY'; - 登录备库主机,用 Oracle 用户执行:
touch /path/to/srl01.log && rm -f /path/to/srl01.log - 确认父目录属主是
oracle:oinstall,权限至少为755 - 若使用 ASM,检查磁盘组是否
MOUNTED且剩余空间充足(SELECT name, total_mb, free_mb FROM v$asm_diskgroup;)
确认 MRP 是否正在使用某组 SRL 并避免误操作
ORA-00268 明确提示“文件正在使用”,本质是试图对 STATUS 为 ACTIVE 或 CURRENT 的 SRL 组执行 DROP 或 CLEAR。这类操作必须等该组转为 UNASSIGNED 后才能安全进行。
观察当前使用状态:
SELECT process, client_process, sequence#, status, thread# FROM v$managed_standby WHERE process = 'MRP0';
关键点:
-
status为APPLYING_LOG时,sequence#对应的 SRL 组正被读取,不可动 - 不要依赖
v$standby_log.status的瞬时值,它可能滞后;以v$managed_standby为准 - 强制切换 SRL 组可用
ALTER SYSTEM SWITCH STANDBY LOGFILE;,但仅限调试,生产环境慎用
真正容易被忽略的是:SRL 配置不是“设完就一劳永逸”。主库增删日志组、升级版本、甚至 OS 补丁都可能影响 SRL 兼容性,必须定期核对 v$standby_log 和 v$log 的 bytes、thread#、group# 三者映射关系。











