查v$archive_dest的error列本质是定位归档传输链路的“断点”状态,error表示某log_archive_dest_n目标最近一次尝试失败并记录具体错误,如ora-12541或ora-27041,不同于deferred和inactive。
查v$archive_dest的error列,本质是在查归档传输链路的“断点”
状态为 error 不代表归档功能整体瘫痪,而是某一个 log_archive_dest_n 目标在最近一次尝试中失败了,oracle 把错误信息记在 error 列里,同时把状态设为 error。它和 deferred、inactive 有明确区分:error 一定伴随可读的错误文本,比如 ora-12541: tns:no listener 或 ora-27041: unable to open file。
常见 ERROR 原因及对应验证动作
别直接改参数,先定位是哪一层断了:
- 网络层:用
tnsping测试LOG_ARCHIVE_DEST_2中 SERVICE 指向的 TNS 别名,确认监听进程注册了对应DB_UNIQUE_NAME的服务(备库上查lsnrctl status输出里有没有该 service) - 文件系统层:主库执行
SELECT DESTINATION, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID = 2,若ERROR含permission denied或no space left,说明归档路径不可写或磁盘满;注意备库端的 ASM diskgroup(如+DATADG1)是否真实存在且 ONLINE - 配置层:检查主库
LOG_ARCHIVE_DEST_2是否漏了VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)—— RAC 环境下缺这个,角色切换后归档会静默失败,状态变ERROR - 密码/认证层:DG Broker 场景下,
ERROR可能是ORA-01017: invalid username/password,此时需核对log_archive_dest_2中USER指定的账号密码是否与备库sys用户一致(Broker 默认用 sys 连接)
V$ARCHIVE_DEST_STATUS 和 V$ARCHIVE_DEST 的误差来源
两个视图都可能显示 ERROR,但含义不同:
-
V$ARCHIVE_DEST的STATUS是静态配置快照,ERROR列记录最后一次失败详情,哪怕当前网络已恢复也不会自动清空 -
V$ARCHIVE_DEST_STATUS的STATUS是实时探测结果,若这里也显示ERROR,说明问题仍在持续;若这里是VALID而前者仍是ERROR,大概率是缓存未刷新,可手动触发一次归档(ALTER SYSTEM ARCHIVE LOG CURRENT)促使其重试 - 特别注意:
V$ARCHIVE_DEST中DEST_ID = 1(本地归档)出现ERROR,往往是因为快速恢复区(FRA)满了,查V$RECOVERY_FILE_DEST的SPACE_LIMIT - SPACE_USED即可确认
修复后状态不更新?试试这三步
改完配置或清理完磁盘,状态卡在 ERROR 不变是高频现象:
- 在主库执行
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH,再立刻设回ENABLE,强制 Oracle 重新初始化该目标 - 如果用了 DG Broker,必须在
dgmgrl中执行EDIT DATABASE 'primary_db' SET PROPERTY LogArchiveDestState2='ENABLE',Broker 不认 SQL 层的ALTER SYSTEM - 最后补一刀:主库上执行
ALTER SYSTEM ARCHIVE LOG CURRENT,生成新归档并触发传输,此时再查V$ARCHIVE_DEST_STATUS的TRANSPORT_LAG和APPLY_LAG是否开始收敛
真正麻烦的不是 ERROR 文本本身,而是它背后可能掩盖着 ASM diskgroup 缺失、PDB 名称不匹配、或 RAC 实例未全部注册 service 这类“看起来正常、实际断连”的隐性问题。每次看到 ERROR,先别急着改参数,打开备库的 alert.log 往前翻 200 行,里面几乎总有一条带具体 ORA-xxxxx 编号的报错,那才是根因。











