Standby Redo Log大小不得小于主库online redo log单组字节数,否则MRP启动报ORA-00354;组数须为(online redo log组数+1)×THREAD#数量,RAC环境必须为每个THREAD显式添加,漏配会导致RFS挂起、transport_lag持续上涨却STATUS仍显示VALID。

Standby Redo Log大小和组数怎么定
大小不能小于主库online redo log单组字节数,否则MRP进程启动时报ORA-00354;组数不是随便加几组就行,必须满足:(online redo log组数 + 1) × THREAD#数量。单实例THREAD#恒为1,RAC环境下先查SELECT THREAD#, INSTANCE FROM GV$INSTANCE确认线程数,再逐个线程配——漏掉任意一个THREAD,对应实例产生的归档就卡在RFS进程,V$DATAGUARD_STATS.transport_lag会持续上涨但V$ARCHIVE_DEST_STATUS.STATUS仍显示VALID,极难排查。
RAC环境必须按THREAD单独添加SRL
在RAC主库上执行ALTER DATABASE ADD STANDBY LOGFILE时,不带THREAD子句默认只绑定THREAD 1;备库若只建了THREAD 1的SRL,而主库实例2(THREAD 2)提交事务,RFS收到日志却无对应SRL可写,直接挂起传输。实操必须显式指定线程号:
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 200M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 200M;
注意:每条语句后要查V$STANDBY_LOG确认THREAD#列值正确,且STATUS为UNASSIGNED而非INVALID。
路径和文件名容易被忽略的细节
如果主备目录结构不一致(比如主库/u01/oradata/ORCL/,备库/u02/oradata/STBY/),用OMF管理时没问题;但手工指定路径,必须确保每个SRL路径在备库真实可写,且用户oracle有读写权限。常见错误是复制主库SQL到备库执行,路径没改,结果ALTER DATABASE看似成功,实际日志文件根本没生成,MRP一启动就报ORA-00313找不到成员。
- 建之前先
mkdir -p /u02/oradata/STBY/并chown oracle:oinstall - 建完立刻
ls -l确认文件存在且属主正确 - 别依赖
DB_CREATE_FILE_DEST自动推导——SRL不走这个参数
配置完必须验证是否生效
加完SRL不代表MRP就能实时应用。必须检查三个状态点:
— 主库侧:SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID = 2,ERROR列为空才表示传输通道畅通;
— 备库侧:SELECT PROCESS, STATUS, CLIENT_PROCESS, SEQUENCE# FROM V$MANAGED_STANDBY,看到MRP0进程且STATUS = APPLYING_LOG才算进入实时应用;
— 最关键一点:SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED = 'YES'和SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID = 1对比,差值应长期为0或1,超过3说明应用滞后已成常态。
真正卡住的地方往往不是命令输错,而是THREAD绑定遗漏、路径权限不对、或主库FORCE LOGGING没提前开——补开之后的老归档日志不含强制记录,MRP回放时会静默跳过部分变更,表面“实时”实则数据不一致。


















