rman不会自动删除obsolete备份集,仅标记不清理;obsolete指按保留策略无恢复价值但仍存在的可用备份,expired指crosscheck后文件丢失的元数据记录。
rman 不会自动删除过期(obsolete)备份集,只标记、不清理 —— 这是绝大多数 dba 误判的根源。
obsolete 和 expired 的本质区别
这两个状态常被混为一谈,但含义完全不同:
-
obsolete:RMAN 根据保留策略(如RECOVERY WINDOW OF 7 DAYS或REDUNDANCY 1)判断该备份“已无恢复价值”,但它在磁盘上仍存在、可读,状态仍是AVAILABLE -
expired:RMAN 执行crosscheck backup后,在操作系统路径下找不到对应文件,才将元数据标记为EXPIRED;这说明文件已被手动删掉或迁移走 - 关键点:
DELETE OBSOLETE删除的是AVAILABLE状态的备份;DELETE EXPIRED删除的是已丢失、只剩元数据的记录
为什么 report obsolete 有时返回 “no obsolete backups found”
常见于配置了 REDUNDANCY 但实际备份片未被覆盖或归档日志链不完整时:
- 冗余策略只看“同类型备份的份数”,比如
REDUNDANCY 1要求每个数据文件最多保留 1 份全备;但如果某次全备包含多个备份片(piece),而其中只有部分片被后续备份覆盖,RMAN 可能暂不判定整套为 obsolete - 归档日志缺失会导致 RMAN 无法确认能否恢复到窗口起点,从而保守地不标记为 obsolete
- 控制文件中未同步最新备份信息(例如用
BACKUP AS COPY但未SWITCH DATABASE TO COPY)也会干扰判断
delete obsolete 不生效的典型场景
执行 DELETE NOPROMPT OBSOLETE 后磁盘空间没释放?大概率踩了这些坑:
- 没先运行
CROSSCHECK BACKUP:RMAN 元数据里还存着旧路径,但文件早已被 OSrm -f掉了 —— 此时它仍是AVAILABLE(因为 crosscheck 没做),DELETE OBSOLETE完全不触发 - 备份目标是快速恢复区(FRA)但 FRA 已满:数据库会自动清理
EXPIRED或已备份到磁带的OBSOLETE文件,但前提是 RMAN 资料库和 FRA 中的物理文件状态一致;若手工删过 FRA 文件而没 crosscheck,自动清理逻辑就失效 - 使用了介质管理器(MML):RMAN 把备份写到磁带后,不会主动从磁带删文件;
DELETE OBSOLETE只影响磁盘上的副本,且需 MML 配合才能真正释放磁带空间
可靠清理流程必须包含三步
少任何一步,都可能留下“看不见却占空间”的备份碎片:
- 运行
CROSSCHECK BACKUP:强制刷新 RMAN 资料库,把物理不存在的标为EXPIRED,存在的维持AVAILABLE - 运行
REPORT OBSOLETE:确认哪些AVAILABLE备份符合当前保留策略,准备清理 - 运行
DELETE NOPROMPT OBSOLETE:真正删文件 + 清元数据;若要连带清归档日志,加DELETE NOPROMPT OBSOLETE ARCHIVELOG
注意:DELETE OBSOLETE 不会动 EXPIRED 记录,那得靠 DELETE EXPIRED BACKUP 单独处理。这两类操作不能互相替代,也别指望一次命令全搞定。











