累积增量备份始终基于最近一次LEVEL 0备份,而差异增量备份基于上一次同级或更高级别备份;前者恢复只需最新累积备份+归档日志,后者需回溯多份备份链。
什么是累积增量备份,和差异增量备份有什么区别
oracle 的 rman 增量备份分两种:累积(cumulative)和差异(differential)。关键区别在于“基准”——累积备份总是基于最近一次的**级别 0 备份**,而差异备份基于**上一次同级或更高级别的备份**。
比如你每周日做一次 LEVEL 0,周一到周六每天做 LEVEL 1:
- 用
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE,周二的备份包含自周日以来所有变化;周三的也包含自周日以来所有变化(覆盖并替代周二的) - 用
BACKUP INCREMENTAL LEVEL 1(默认差异),周二备份含周日→周一的变化,周三备份只含周二→周三的变化
所以累积备份体积更大、备份时间稍长,但恢复时**只需最新一份累积备份 + 归档日志**,不用回溯多份差异备份链,恢复步骤更少、更可控。
如何配置 RMAN 自动使用累积增量备份策略
不是靠单次命令,而是靠 CONFIGURE 设置全局策略,后续 BACKUP INCREMENTAL LEVEL 1 默认按累积执行:
RMAN> CONFIGURE BACKUP OPTIMIZATION ON; RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; RMAN> CONFIGURE LEVEL 1 CUMULATIVE BACKUP;
注意:CONFIGURE LEVEL 1 CUMULATIVE BACKUP 是 12cR2+ 才支持的语法;12cR1 及之前版本不支持该配置项,必须在每次备份时显式加 CUMULATIVE 关键字。
常见错误:RMAN-03002: failure of configure command —— 出现在低版本 Oracle,说明当前版本不识别该配置,需改用显式写法。
增量恢复时,RMAN 是否自动选择累积备份
是的,只要备份集存在且满足恢复需求,RECOVER DATABASE 或 RECOVER TABLESPACE 会自动挑选可用的、最接近恢复点的累积 LEVEL 1 备份,再应用归档日志补全到指定 SCN/时间点。
但有三个前提条件必须满足:
-
LEVEL 0备份未被DELETE OBSOLETE清理掉(否则累积备份失去基准,RMAN 拒绝使用) - 所有涉及的备份集(
LEVEL 0+ 最新累积LEVEL 1)状态为AVAILABLE(可通过LIST BACKUP OF DATABASE确认) - 归档日志连续、未损坏,且至少保留到累积备份结束时间之后
典型失败现象:ORA-19625: error identifying file … ORA-27037: unable to obtain file status,往往是因为某份归档缺失,或 LEVEL 0 备份被误删。
实际恢复操作:从累积备份启动数据库到指定时间点
假设你有一份周日的 LEVEL 0,一份周三的累积 LEVEL 1,现在要恢复到周四上午 10:00:
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE UNTIL TIME "TO_DATE('2024-04-18 10:00:00','YYYY-MM-DD HH24:MI:SS')";
RMAN> ALTER DATABASE OPEN RESETLOGS;
这里不需要指定备份集名,RESTORE DATABASE 会自动拉取最新的有效 LEVEL 0 和匹配的累积 LEVEL 1;RECOVER 阶段自动定位所需归档范围。
容易忽略的一点:如果数据库启用了 FAST START MTTR TARGET 或大量未提交事务,恢复过程中可能卡在“applying log”阶段很久——这不是备份问题,而是日志重放本身耗时,需结合 V$RECOVERY_PROGRESS 观察真实进度,而非仅看 RMAN 输出。


















