归档传输中断时典型报错为ORA-16055、ORA-16714或ARCHIVE LOG LIST显示destination_status=ERROR,需查v$archive_dest确认status=ERROR且error非空;修复须先执行RESET清错误计数,再ENABLE启用,并手动补传积压日志。
归档无法传输的典型报错和定位方式
遇到 ora-16055、ora-16714 或 archive log list 显示 destination_status = error,基本可确认归档传输中断。最直接的验证方法是查 v$archive_dest 视图:select dest_id, status, error from v$archive_dest where target='standby';。status 为 error 且 error 列非空时,说明传输链路已断。
修改归档目的地状态:ENABLE / DEFER / RESET 的区别
不能只靠改路径来“修复”传输失败——必须先干预目的地状态。三个关键操作含义不同:
-
ALTER SYSTEM SET log_archive_dest_state_2=DEFER;:临时停用该归档目标,不产生错误日志,适合排查网络或备库问题期间使用 -
ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;:重新启用,但不会自动重传积压日志,需手动触发ALTER SYSTEM ARCHIVE LOG CURRENT; -
ALTER SYSTEM SET log_archive_dest_state_2=RESET;:清空该 destination 的错误计数器和内部状态缓存,常用于error字段卡在旧错误不更新时
归档路径修改后必须同步更新的参数
仅执行 ALTER SYSTEM SET log_archive_dest_1='LOCATION=/new/path' SCOPE=BOTH; 不够。以下三项必须匹配:
- 操作系统层面确保
/new/path目录存在、权限正确(oracle:oinstall可读写,chmod 755) -
log_archive_dest_1值中不能含空格或未转义的单引号;若路径含特殊字符,建议用双引号包裹整个字符串 - 若启用了 Data Guard Broker,
DGMGRL中的配置会覆盖初始化参数,此时必须用EDIT DATABASE ... SET PROPERTY同步更新,否则log_archive_dest_1修改无效
传输中断后如何安全补传积压归档
归档传输恢复后,主库不会自动补传中断期间产生的归档日志。必须人工介入:
- 在主库上运行
SELECT MIN(sequence#), MAX(sequence#) FROM v$archived_log WHERE applied='NO';确认缺失范围 - 用
RMAN手动拷贝:COPY ARCHIVELOG FROM SEQUENCE xxx UNTIL SEQUENCE yyy TO DESTINATION '/tmp/arc'; - 在备库上用
RECOVER DATABASE ARCHIVELOG FROM '/tmp/arc';应用 - 切勿直接把主库归档文件 cp 到备库归档目录——缺少控制文件注册,备库无法识别
最关键的遗漏点:很多人改完路径就以为万事大吉,却忘了检查 log_archive_dest_state_n 是否仍为 DEFER 或 ERROR,导致新路径生效了但传输通道实际被锁死。状态重置和日志补传,缺一不可。


















