rfs状态为idle本身正常,仅表示当前无归档写入;真正需干预的是当idle伴随rfs进程缺失、归档序号滞后、监听未注册、权限不足或主库归档目标状态异常等情况。

RFS状态为IDLE不等于传输中断
看到 RFS 进程在 v$managed_standby 中状态是 IDLE,第一反应别急着重启监听或改 log_archive_dest_n。这个状态本身是正常的——它只表示“当前没有归档日志正在写入”,不代表主库没发、备库没收。RFS 是按需唤醒的:主库每传一个归档,它才起来接收并落盘,写完就回 IDLE。
- 主库已发完所有归档(
v$archive_dest_status中ARCHIVED_THREAD#和APPLIED_THREAD#一致),RFS 就长期IDLE - 主库归档生成慢(比如低负载系统每15分钟切一次),RFS 自然大部分时间空闲
- 用了
LGWR SYNC传输,RFS 只负责接收 standby redo log,不处理归档文件,所以根本不常显式出现
真正该盯的是RFS有没有收到最新归档
IDLE 没问题,但得确认它最近一次接收的归档序号是否跟主库对得上。光看状态容易误判:
- 查
v$managed_standby中RFS行的SEQUENCE#字段:如果它停在 14714,而主库v$archived_log最新是 14720,说明中间缺了 6 个归档 → 不是 RFS 问题,是传输层卡了 - 查
v$archived_log在备库上的记录:SELECT MAX(SEQUENCE#) FROM v$archived_log WHERE DEST_ID = 2(DEST_ID 要先从v$archive_dest确认);若结果远小于主库当前归档号,问题在传输配置或网络 - 查
alter.log里有没有RFS: Failed to open或ORA-27040—— 那才是 RFS 启动失败,和IDLE无关
哪些情况下的IDLE才真要干预
当 IDLE 伴随其他异常信号时,说明 RFS 根本没被触发,得动手查底层:
- 主库
v$archive_dest_status中对应备库的STATUS是ERROR或DEFERRED,说明归档根本没出发 - 备库
ps -ef | grep rfs找不到任何rfs进程(不是状态IDLE,是进程不存在) - 主库刚做完 switchover,但备库控制文件里还残留旧
db_unique_name,导致log_archive_config解析失败,ARC 进程压根不往这个 destination 发 - 备库监听没注册服务名,或
tnsnames.ora里 SERVICE_NAME 写成 SID,RFS 连不上就起不来
最常被忽略的一点:RFS 进程属主必须是 oracle 用户,且整个归档路径链(比如 /u01/arch)每一级目录都得有 x 权限给该用户——namei -l /u01/arch 才能暴露父目录权限缺失这种硬拦截。











