Oracle 19c 不支持 BACKUP AS COPY INCREMENTAL LEVEL 1,因镜像拷贝无块变更元数据,增量逻辑仅适用于 backupset;“增量合并”实为 RECOVER COPY 将 LEVEL 1 backupset 变更块覆盖写入 base copy。
oracle 19c 不支持对 backup as copy 直接执行 level 1 增量备份,必须用 recover copy + backup incremental level 1 for recover of copy 组合实现“增量合并”效果。
为什么 BACKUP AS COPY INCREMENTAL LEVEL 1 会报 RMAN-06022
执行该命令会直接失败,错误信息为:RMAN-06022: invalid level specified for image copy: 1。根本原因在于:image copy 是操作系统级的完整物理拷贝(类似 cp),不携带块变更元数据;而 RMAN 的增量逻辑只作用于 backupset(含块索引、压缩/加密结构)。所谓“增量合并”,本质是把 LEVEL 1 backupset 中的变更块“打补丁”写入已有 image copy 文件,而非在 copy 上生成新增量。
RECOVER COPY OF DATABASE 真实作用不是恢复数据库
这个命令实际是“将匹配 tag 的最新 LEVEL 1 backupset 应用到同 tag 的 image copy 上”,纯物理块级更新,不依赖归档日志,也不需要先 RESTORE:
- 首次运行时,若无对应 tag 的
image copy,RMAN 自动创建一个LEVEL 0 image copy(即 base copy) - 后续每次运行,RMAN 查找最新可用的
LEVEL 1 backupset(按 tag 和时间戳匹配),提取变更块,逐个覆盖写入 base copy 对应数据文件 - 执行完成后,base copy 的 SCN 和数据状态等价于该
LEVEL 1备份所覆盖的时间点 - base copy 文件名由 RMAN 自动生成(如
/u01/backup/DBNAME/data_D-DBNAME_I-1234567890_FNO1.bak),路径和格式不可自定义
标准脚本写法与 tag 必须严格一致
必须用 RUN 块包裹,且顺序不能颠倒:RECOVER COPY 必须在 BACKUP INCREMENTAL ... FOR RECOVER OF COPY 之前:
RUN {
RECOVER COPY OF DATABASE WITH TAG 'incr_update';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;
}
关键细节:
-
WITH TAG 'incr_update'必须完全一致(大小写敏感),所有相关命令共用同一 tag - 首次运行:生成 base copy(
LEVEL 0 image copy)+ 第一个LEVEL 1 backupset - 第二次运行:先用第一个
LEVEL 1 backupset更新 base copy,再生成第二个LEVEL 1 backupset - 可追加归档日志备份(推荐):
BACKUP DEVICE TYPE DISK TAG 'incr_update' ARCHIVELOG ALL NOT BACKED UP DELETE ALL INPUT;
最容易被忽略的是:base copy 的更新是单向覆盖式写入,没有回滚机制;一旦 RECOVER COPY 执行完成,原 base copy 就已不可逆地前进了 SCN —— 所以务必确保 tag 命名唯一、环境隔离,避免跨策略误覆盖。


















