ORA-19625错误本质是控制文件记录与物理归档文件不一致,需先执行crosscheck archivelog all标记丢失文件为EXPIRED,再执行delete expired archivelog all从控制文件清除过期记录,二者必须在同一次RMAN会话中连续执行。

ORA-19625 不是权限或配置问题,而是控制文件里还记着某个归档日志,但物理文件早就没了——直接执行 crosscheck archivelog all 和 delete expired archivelog all 就能解决,90% 的场景一步到位。
ORA-19625 错误的本质是“元数据与物理文件不一致”
RMAN 在备份归档日志前,会从控制文件读取所有已生成但尚未备份的归档列表(archivelog all),然后逐个校验路径是否存在。一旦发现某条记录指向的文件实际不存在(比如被手工 rm、mv、或迁移后没同步路径),就抛出 ORA-19625: error identifying file /path/to/arch_123.dbf,紧跟着 ORA-27037: No such file or directory。
- 常见诱因:人为删除归档、RAC 节点归档未同步到共享目录、重建库后未清理旧控制文件里的归档记录、归档路径变更但未更新
log_archive_dest_n - 关键点:这个错误和 RMAN catalog 是否启用无关,只依赖控制文件内容;即使你用的是 19c 或 23c,行为完全一致
- 注意:报错里带的文件路径(如
/u01/arch/1_24_1105304063.0001)就是你要去验证的对象,别跳过它直接跑命令
crosscheck archivelog all 是必须的第一步
crosscheck archivelog all 不会删任何东西,只是让 RMAN 去磁盘上挨个确认每个归档文件是否真实存在,并把结果写回控制文件:状态变成 AVAILABLE(存在)或 EXPIRED(丢失)。
- 执行后你会看到类似输出:
validation failed for archived log archive log filename=/u01/arch/1_24_1105304063.0001 - 如果控制文件里有几百个归档,但只有几个丢了,
crosscheck会精准标记出哪些是EXPIRED,而不是全盘清空 - Oracle 8i/9i 用的是
change archivelog all crosscheck,10g 及以后统一为crosscheck archivelog all,版本差异别搞混 - 执行失败?检查 Oracle 用户对归档目录是否有读权限,
ls -l看报错路径是否存在、是否可访问
delete expired archivelog all 才真正清理元数据
crosscheck 只改状态,delete expired archivelog all 才把状态为 EXPIRED 的记录从控制文件中彻底删除。这一步不做,下次 backup archivelog all 还会再查一遍那个已不存在的文件,继续报 ORA-19625。
- 该命令不碰磁盘文件(因为文件本来就没啦),只操作控制文件,安全
- 执行后会提示类似:
deleted archived log archived log filename=/u01/arch/1_24_1105304063.0001 RECID=123 STAMP=123456789 - 如果你用的是恢复目录(recovery catalog),记得在执行完后
resync catalog,否则 catalog 和控制文件元数据会不一致 - 极少数情况(比如控制文件损坏),
delete expired报错,此时需先startup mount,用alter database backup controlfile to trace备份当前控制文件再重试
备份前务必确认归档路径有效性
报 ORA-19625 后,很多人修完就立刻跑 backup archivelog all,结果又挂——因为根本原因可能是归档路径本身不可写或空间不足,RMAN 在备份过程中仍会尝试访问新生成的归档位置。
- 检查当前归档目标:
show parameter log_archive_dest_1,确认路径真实存在且 Oracle 用户有写权限 - 验证归档是否正常生成:
archive log list输出里Automatic archival必须是Enabled,且Archive destination指向的目录df -h有足够空间 - 如果归档路径刚换过(比如从
/old/arch改成/new/arch),旧归档记录没清理干净,新旧路径混在一起,crosscheck会同时扫两个位置,容易漏判 - Windows 系统注意路径分隔符是反斜杠
\,报错里显示的F:\ORACLE19C\ARCHIVE\ARC0000000030_1105304063.0001要原样核对,别当成 Linux 路径处理
最易被忽略的一点:crosscheck 和 delete expired 必须在同一个 RMAN session 里连续执行,中间不要退出或重启实例;否则 crosscheck 标记的 EXPIRED 状态可能被其他归档操作覆盖,导致 delete 实际没删掉该条目。


















