oracle全库备份落地需盯住三件事:路径可控、归档就绪、清理闭环;须确认归档模式启用、归档路径可写、显式配置备份路径、执行crosscheck/report/delete三步清理,且19c升级后须重配控制文件自动备份和备份优化。

CONFIGURE RETENTION POLICY 配了不等于自动删旧备份,BACKUP DATABASE PLUS ARCHIVELOG 也不等于“一次执行就万事大吉”。真要落地全库备份,得盯住三件事:路径可控、归档就绪、清理闭环。
确认数据库处于归档模式且归档路径可写
RMAN 全库备份必须依赖归档日志链完整,否则 PLUS ARCHIVELOG 会卡在“当前日志已存档”这一步,甚至静默失败。
- 先查状态:
ARCHIVE LOG LIST—— 必须显示Database log mode: Archive Mode和Automatic archival: Enabled - 再看归档目标:
SHOW PARAMETER log_archive_dest_1,确保路径存在、Oracle 用户有读写权限(尤其 Windows 下要注意C:\app\oracle\archivelog\目录权限) - 如果归档路径是
USE_DB_RECOVERY_FILE_DEST,就得同步检查 FRA:SHOW PARAMETER db_recovery_file_dest+SELECT * FROM V$RECOVERY_FILE_DEST;,空间不足会导致ORA-19809
显式指定备份路径,别依赖默认 FRA
19c 默认把备份扔进 $ORACLE_BASE/fast_recovery_area,但新实例常未初始化该目录,或权限不对,导致 BACKUP 看似成功实则备份片为空或写入失败。
- 用
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%d_%T_%s_%p'显式设路径(%d=DB name,%T=date,%s=set number,%p=piece number) - Linux 下提前
mkdir -p /backup && chown oracle:oinstall /backup;Windows 下确认C:\backup存在且 Oracle service account 有写权限 - 别省略
ALLOCATE CHANNEL—— 即使只用一个通道,显式分配能避免因资源争抢导致的备份中断
配置 retention policy 后必须补全三步才能删旧备份
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS 只改控制文件策略项,不触发任何物理删除。不走完下面三步,DELETE OBSOLETE 就是空操作。
-
CROSSCHECK BACKUP:同步控制文件记录和磁盘真实文件。若备份片被手动删过或 NFS 挂载异常,控制文件还记着它,DELETE OBSOLETE就跳过它,也不报错 -
REPORT OBSOLETE:列出所有被策略判定为可删且物理存在的备份。务必先看输出,确认最老全备是否仍在恢复链中(比如 RECOVERY WINDOW 下中间归档被DELETE ARCHIVELOG清过,RMAN 会静默降级,REPORT OBSOLETE显示的过期备份比预期少) - 最后才
DELETE NOPROMPT OBSOLETE。加NOPROMPT避免交互,但前提是已人工核对过REPORT OBSOLETE结果
19c 升级后必须重配的两个关键项
从 11g/12c 升上来的 19c 实例,CONTROLFILE AUTOBACKUP 和 BACKUP OPTIMIZATION 不继承,不手动开,策略就形同虚设。
-
CONFIGURE CONTROLFILE AUTOBACKUP ON必须配,且要显式设格式:CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/ctl_%F'(%F是唯一文件名,含 DBID)——否则自动备份会 fallback 到 FRA,而新库 FRA 常未就绪 -
CONFIGURE BACKUP OPTIMIZATION ON才能跳过重复归档备份;但前提是V$BLOCK_CHANGE_TRACKING.STATUS = 'ENABLED'且变更追踪文件已重建(11g 的 BCT 文件 19c 不兼容,升级后需ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/bct.dbf')
真正麻烦的不是命令本身,而是备份路径权限、归档链完整性、控制文件自动备份路径这三个点——它们不出错时一切安静,一出错就是 ORA-19809 或恢复时缺归档,且错误信息极其隐晦。











