RMAN增量更新备份是通过RECOVER COPY将映像副本用LEVEL 1增量前滚至最新状态,仅保留一份可直接挂载的“近实时”副本;需归档模式、先建基础映像副本并打标签,每日执行“LEVEL 1增量备份+RECOVER COPY+DELETE INPUT”。
什么是RMAN增量更新备份(Incrementally Updated Backup)
它不是“每天全备+增量归档”的组合,而是用 recover copy of database 把前一天的映像副本(image copy)用当天的增量备份前滚到最新状态。最终你手头只有一份“几乎实时”的映像副本,不需要还原+恢复两步走。
关键点在于:映像副本本身可直接挂载启动(如果配置了控制文件自动备份且保留完整),比传统备份链快得多。
- 必须启用归档模式,且
ARCHIVELOG必须可用 - 不能用在 NOARCHIVELOG 模式下
- 每次前滚后,旧的增量备份可安全删除(只要新副本已成功更新)
如何创建初始映像副本并开启增量更新策略
第一次运行要手工建一份基础映像副本,之后才能开始“每天前滚”。别跳过这步,否则 RECOVER COPY 会报 RMAN-06023: no backup or copy of datafile found to restore。
实操建议:
- 用
BACKUP AS COPY DATABASE创建初始副本,路径建议统一放在+FRA/DBNAME/IMAGE_COPY这类易识别位置 - 立即执行一次
RECOVER COPY OF DATABASE WITH TAG 'LEVEL_0',确保副本能被后续增量识别 - 给副本打标签(如
WITH TAG 'LATEST_IMAGE'),后续所有RECOVER COPY都要指定相同 tag - 不要混用
BACKUP INCREMENTAL LEVEL 1和BACKUP INCREMENTAL LEVEL 0—— 增量更新只认LEVEL 1增量来前滚
每天自动前滚的 RMAN 脚本关键写法
核心是两步:先做增量备份,再用它去前滚映像副本。顺序错了或漏掉 DELETE INPUT,磁盘会快速撑爆。
典型脚本结构(放入 crontab 或 OEM job):
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG 'LATEST_IMAGE'
DATABASE;
RECOVER COPY OF DATABASE WITH TAG 'LATEST_IMAGE';
DELETE INPUT;
RELEASE CHANNEL c1;
}
注意点:
-
FOR RECOVER OF COPY WITH TAG ...是强制约束——RMAN 只生成“专供前滚用”的增量,不匹配 tag 的副本不会被更新 -
DELETE INPUT删的是刚生成的增量备份集(不是映像副本!),不加它,每天多出几百 MB 增量文件 - 如果某天增量备份失败,第二天的
RECOVER COPY仍会尝试用上次成功的增量前滚——但可能因 gap 报RMAN-06054: media recovery requesting unknown log
验证副本是否真的“最新”以及常见恢复误区
别只看 RMAN 输出 “Recovery succeeded”。真正有效的是:副本对应的数据文件 SCN 是否跟当前数据库一致。最简单验证方式是查 V$DATAFILE 和副本文件头:
- 运行
LIST COPY OF DATABASE,确认状态是AVAILABLE且COMPLETION TIME是今天 - 用
RMAN> VALIDATE COPY OF DATABASE检查物理一致性(耗时但必要) - 恢复测试时,千万别直接
RESTORE DATABASE—— 正确流程是:SWITCH DATABASE TO COPY+RECOVER DATABASE(只应用归档日志,不用备份集) - 如果控制文件没备份或损坏,
SWITCH会失败;务必保证CONFIGURE CONTROLFILE AUTOBACKUP ON并定期验证 auto backup 可读
最容易被忽略的是:映像副本默认不包含临时文件、密码文件、spfile(除非显式 BACKUP AS COPY CURRENT CONTROLFILE)。恢复前得手动补全这些非数据文件。










