ora-19633是控制文件与恢复目录元数据不一致所致,常见于跨平台迁移后残留windows路径的“幽灵记录”,需用dbms_backup_restore.resetcfilsection(11)清空归档段再catalog真实归档。

crosscheck报ORA-19633:控制文件和恢复目录不同步
这不是文件真丢了,而是控制文件里某条归档记录(比如recid=58407)的元数据和恢复目录对不上。常见于跨平台迁移后残留的Windows路径(如D:\APP\ADMINISTRATOR\ARCH\RBCHECKIN\...),而实际归档已放在Linux路径下。
直接DELETE FORCE ARCHIVELOG会失败,因为RMAN在目录里找不到匹配项;CROSSCHECK ARCHIVELOG ALL又会卡在这条脏记录上报ORA-19633。
- 先确认问题归档是否物理存在:
SELECT NAME FROM V$ARCHIVED_LOG WHERE RECID = 58407 - 若路径明显错(如Windows盘符)、且
ls -l查不到对应文件,说明是“幽灵记录” - 执行
EXECUTE SYS.DBMS_BACKUP_RESTORE.RESETCFILSECTION(11)清空控制文件中归档日志段(type=11)——这是绕过RMAN、直操作控制文件的底层手段 - 再用
CATALOG START WITH '/oracle/arch/rbcheckin/'重新注册真实存在的归档
crosscheck报RMAN-06061:跳过归档日志影响可恢复性
这个警告本质是RMAN在备份过程中发现归档路径下某个.arc文件缺失,但控制文件仍标记为AVAILABLE,于是跳过它继续跑,同时发出警告。它不中断备份,但会让后续恢复链断裂。
- 典型诱因:手动用
rm或find -delete清过归档目录,没走RMAN流程 - 别只信
LIST ARCHIVELOG ALL——它只反映控制文件注册状态,不校验磁盘 - 必须立刻补做
CROSSCHECK ARCHIVELOG ALL,把缺失的标成EXPIRED - 紧接着执行
DELETE EXPIRED ARCHIVELOG ALL,否则下次备份还会报同一警告 - 如果归档被压缩成
.gz,RMAN默认不识别,得先gunzip解压再CATALOG
crosscheck后仍有Expired备份残留,DELETE返回0 objects deleted
这说明RMAN根本没“看见”那些物理丢失的备份文件——不是命令没用,是它压根没扫描到。
- RMAN静默跳过权限不足的目录(
ls -l确认Oracle用户对备份路径有r-x权限) - 路径含空格或特殊字符(如
/backup/DB Prod/)会导致解析失败,RMAN不报错也不处理 -
control_file_record_keep_time太小(默认7天),旧备份元数据已被覆盖,CROSSCHECK无从比对 - 正确做法是分步扫:
CROSSCHECK BACKUP OF DATABASE DEVICE TYPE DISK FORMAT '/path1/%U',再换/path2/%U,逐个击破 - 务必搭配
DELETE EXPIRED BACKUP连用,且可能需要执行两轮:第一次更新部分状态,第二次才能清理干净
物理文件还在却被标成EXPIRED
别急着删,这往往不是误判,而是RMAN校验逻辑更严——它不只看文件是否存在,还校验备份片头里的set_stamp和set_count是否与控制文件记录一致。
- 常见于:备份片被cp或rsync复制过、挂载点临时不可写导致写入不完整、或用了第三方工具改过文件属性
-
ls -l能看到文件 ≠ RMAN认为它有效 - 先
CATALOG START WITH '/path/to/backup/'强制让RMAN重新读取片头信息 - 再
CROSSCHECK BACKUP,此时状态通常会从EXPIRED变回AVAILABLE - 如果仍不行,检查
V$BACKUP_PIECE中对应STATUS是否为DELETED——那是元数据损坏,需重建控制文件或从备份恢复
CROSSCHECK本身不碰物理文件,只刷新控制文件里的状态标记;而DELETE EXPIRED才是把元数据从控制文件里真正抹掉的动作。两者必须成对出现,缺一不可。











