rman-06059错误源于控制文件记录了已丢失的归档日志路径,需先执行crosscheck archivelog all标记过期,再执行delete noprompt expired archivelog all清理幽灵记录,否则备份仍会失败。

RMAN-06059 不是备份脚本写错了,而是控制文件里还记着已丢失的归档日志路径 —— 物理文件早被 rm 或第三方工具删光了,Oracle 却还在找。
crosscheck archivelog all 后必须跟 delete expired archivelog all
只执行 crosscheck archivelog all 不会修复问题。它只是把找不到的归档标记为 EXPIRED,但这些“幽灵记录”仍留在控制文件中。下次跑 backup plus archivelog 时,RMAN 仍会尝试读取它们,接着报 RMAN-06059。
-
crosscheck是核对动作,不删任何东西,耗时取决于归档数量(建议在业务低峰期跑) - 必须紧接着执行
delete noprompt expired archivelog all——noprompt避免交互卡住脚本 - 该命令只清理控制文件里的过期元数据,不碰磁盘上仍存在的归档文件
- 验证是否清干净:
list expired archivelog all应返回空结果
备库上缺归档却查不到记录?先看 V$ARCHIVE_GAP,再手动 REGISTER
备库报 RMAN-06059 或恢复卡住,但 list archivelog all 为空、v$archived_log 也查不到对应序列号,说明控制文件根本没登记这些日志 —— 它们被跳过了,不是传不过来。
- 在备库查缺口:
SELECT * FROM V$ARCHIVE_GAP,注意它只反映控制文件当前感知到的断点 - 别直接信
HIGH_SEQUENCE#,去主库确认真实归档是否存在:SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD# = 1 AND SEQUENCE# BETWEEN 148 AND 150 AND DEST_ID = 1 - 用
scp或共享存储把文件原样拷到备库的log_archive_dest_1目录,保持文件名和权限(Oracle 用户需有r-x目录权限、r文件权限) - 在备库 SQL*Plus 中逐条执行:
ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archivelog/1_148_1123456789.001'—— 路径不能含符号链接,也不能拼逗号列表
ORA-27037 出现在 RMAN-06059 上面?这就是根因
RMAN 日志是线性输出,真正的问题永远在最早那条底层错误里。比如日志末尾出现:
ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory
这比上面的 RMAN-06059 和 ORA-19625 更关键 —— 它明确告诉你:路径写了,文件没了。
- 立刻检查
V$ARCHIVED_LOG对应SEQUENCE#的DELETED字段:SELECT NAME, DELETED FROM V$ARCHIVED_LOG WHERE SEQUENCE# = 40137 - 如果
DELETED = 'YES',说明 Oracle 自己删过,但控制文件未同步,此时必须走crosscheck + delete expired - 如果
DELETED = 'NO',但文件确实不存在,大概率是外部工具(如rm、NBU、AnyBackup)删的,同样适用上述清理流程
维护类命令(如 delete/crosscheck)必须配独立通道
执行 delete obsolete 或 crosscheck archivelog all 报 RMAN-06091,几乎全是通道没分配对。
-
ALLOCATE CHANNEL FOR MAINTENANCE必须显式声明,且与目标命令在同一个RUN块内 - 不能复用备份通道(如
CHANNEL ch00 TYPE DISK),维护通道类型要匹配介质:TYPE DISK或TYPE SBT_TAPE - 错误写法示例:
RUN { DELETE NOPROMPT OBSOLETE; }—— 缺少维护通道分配,必报错 - 正确写法:
RUN { ALLOCATE CHANNEL FOR MAINTENANCE TYPE DISK; DELETE NOPROMPT OBSOLETE; RELEASE CHANNEL; }
最易被忽略的一点:delete expired archivelog all 是不可逆操作。如果误删了真实归档又没冷备,可恢复时间点会永久退回到最近一次完整备份 —— 所以动手前,务必确认缺失归档是否真已备份或不再需要。











