ORA-16055是FAL机制失败的表象,需结合trace文件中的底层错误(如ORA-12154、ORA-01017、ORA-16191)或SRL缺失分场景处理,严禁仅调参或切日志。

ORA-16055 不是独立错误,而是FAL机制失败的表象;直接改参数或切日志治标不治本,必须结合错误根源分场景处理。
查清 FAL 失败的真实原因,别只看 ORA-16055
ORA-16055 总是伴随更底层的错误出现在 trace 文件里,光看 alert.log 会漏掉关键线索。必须打开对应 ARCn 进程的 trace 文件(路径在 alert log 里明确给出),重点找 ORA- 开头的其他错误码:
-
ORA-12154:说明FAL_SERVER或FAL_CLIENT配置的服务名在tnsnames.ora中不存在,或拼写/大小写不一致 -
ORA-01017或ORA-01031:备库监听端的用户名密码错误,或用户缺少SYSBACKUP权限(不是CONNECT就够) -
ORA-16191:主库归档进程根本没连上备库,常见于备库监听未启动、防火墙拦截端口、或LOG_ARCHIVE_DEST_2中的SYNC/ASYNC模式与实际网络质量不匹配 - 没有其他 ORA 错误,只有重复的
ORA-16055:大概率是备库 SRL 缺失或数量不足,尤其 Thread 1 的 SRL 组未创建或大小不匹配主库在线日志
修复 FAL 连接类错误(ORA-12154 / ORA-01017 / ORA-16191)
这类问题本质是主库无法通过 FAL 协议登录备库拉日志,和归档传输路径无关,必须在备库侧验证和修正:
- 在备库执行
tnsping <FAL_SERVER值>,确认服务名可解析且监听响应正常 - 用相同用户(如
sys / as sysbackup)手动连接:sqlplus /@<FAL_SERVER值>,验证密码和权限 - 检查备库
listener.ora是否启用了DEDICATED服务(SERVER=DEDICATED),FAL 不支持共享服务器模式 - 确保备库初始化参数中设置了
FAL_SERVER(指向自己)和FAL_CLIENT(指向主库),且两者值不能互换 - 修改后需重启备库监听:
lsnrctl stop && lsnrctl start,再重启主库ARC进程(执行ALTER SYSTEM ARCHIVE LOG CURRENT触发重连)
补全 Standby Redo Log(SRL)解决隐性阻塞
即使归档能传过去,MRP 进程仍报 ORA-16055,大概率是 SRL 不足导致日志接收卡住。Thread 1 的 SRL 必须显式创建,不能依赖自动创建:
- 先查主库在线日志组数和大小:
SELECT GROUP#, BYTES, BLOCKSIZE FROM V$LOG; - 在备库
MOUNT状态下,为 Thread 1 创建至少比主库多一组的 SRL,例如主库有 3 组 512MB 日志,则建 4 组:ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 512M; - SRL 文件必须放在低延迟、高 IOPS 的本地磁盘,禁止放在 NFS 或慢速 SAN 上;路径权限需为
oracle:oinstall可读写 - 创建后确认状态:
SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$STANDBY_LOG;,STATUS应为UNASSIGNED或ACTIVE,不能是INVALID
避免误操作:RESET / ENABLE / DEFER 的真实作用
看到 destination_status=ERROR 就执行 ENABLE 是常见误区。三个命令作用完全不同,顺序错了反而加重问题:
-
ALTER SYSTEM SET log_archive_dest_state_2=DEFER;:仅暂停归档发送,不清理错误状态,适合临时排查网络 -
ALTER SYSTEM SET log_archive_dest_state_2=RESET;:清空错误计数器和内部缓存,必须在DEFER后执行,否则无效 -
ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;:重新启用,但不会自动补传积压日志,需额外执行ALTER SYSTEM ARCHIVE LOG CURRENT手动触发 - 如果
v$archive_dest中error列非空,必须先RESET再ENABLE,中间不能跳步
真正棘手的是 SCN 偏差过大或网络微秒级时钟漂移引发的静默拒绝——这种情况下 trace 文件里可能没有明显错误,只能靠调大 FAL_RETRY_DELAY 和增加 SRL 数量来缓解。不要指望一次操作就根治,得盯住 v$managed_standby 里 MRP0 的 STATUS 和 v$archive_gap 的输出变化。


















