必须先做level 0备份,因为它是唯一为所有已使用数据块打上初始基准scn的操作,为level 1提供变更起点;缺失level 0将导致rman无法识别增量链、恢复失败或报rman-06059等错误。
oracle rman 增量备份不是“选不选”的问题,而是“必须用 level 0 打基线,再用 level 1 差异或累积来延续”——跳过 level 0 直接跑 backup incremental level 1 会失败,且恢复链会断裂。
为什么必须先做 level 0 备份?
RMAN 增量备份依赖数据块的 SCN(System Change Number)快照和块更改跟踪(BCT)机制。level 0 是唯一能为所有已使用数据块打上“初始基准 SCN”的操作;没有它,level 1 就不知道“自哪次以来”发生了变化。
常见错误现象:RMAN-06059: expected archived log not found, loss of archived log compromises recoverability 或 ORA-19625: error identifying file ... ORA-27037: unable to obtain file status —— 往往是因缺失 level 0 导致后续增量无法定位变更起点。
- level 0 不等于“全库拷贝”,它仍是 RMAN 物理备份,支持压缩、加密、并行
- level 0 可以带
plus archivelog,但归档日志本身不参与增量逻辑,只保障时间点恢复能力 - 若控制文件中无 level 0 记录(如仅靠外部脚本 cp 数据文件),RMAN 恢复时将拒绝识别任何 level 1 备份
level 1 差异 vs 累积:怎么选、怎么写命令?
差异(differential)是 RMAN 默认行为;累积(cumulative)需显式指定 cumulative 关键字。二者恢复路径和存储开销差异显著,不能混用。
使用场景:
- 每日高频小变更(如 ETL 中间表刷写)→ 选
incremental level 1(差异):备份体积小,但恢复需遍历全部 level 1 链 - 周中需快速恢复(容忍更大备份体积)→ 选
incremental level 1 cumulative:恢复只需最近一个 level 1 + level 0,跳过中间所有 level 1
实操命令示例:
backup incremental level 1 database tag 'DAILY_DIFF'; -- 默认差异 backup incremental level 1 cumulative database tag 'WEEKLY_CUMU'; -- 显式累积
注意:tag 必须唯一且有意义,否则 list backup by tag 无法区分;同一 tag 被重复使用会导致旧备份被标记为 obsolete。
配置 channel 和 format 时容易忽略的路径细节
RMAN 不校验备份路径是否存在,configure channel device type disk format 中的路径若不可写或磁盘满,备份会静默失败或卡在 ALLOCATING CHANNEL 状态。
- 路径必须由
oracle用户(非 root)有读写权限,且父目录存在(RMAN 不自动创建多级目录) - 推荐格式变量组合:
/backup/rman/%d_%T_%u——%d(DB_NAME)防多实例冲突,%T(YYYYMMDD)便于人工归档,%u(唯一符)避免同秒内并发重名 - 若用 FRA(
db_recovery_file_dest),仍需显式configure default device type to disk,否则 RMAN 可能回退到控制文件默认位置(极难排查)
验证增量备份是否真正“增量”了
别只信 list backup 的大小数字。真实增量效果取决于三个隐性条件:
- 数据库必须处于
ARCHIVELOG模式(select log_mode from v$database返回ARCHIVELOG) - 启用块更改跟踪(BCT)可大幅提升 level 1 效率:
alter database enable block change tracking using file '/u01/bct.dbf';—— 否则 RMAN 会全扫描数据文件头找变更块 -
configure backup optimization on必须开启,否则即使文件未变,RMAN 仍会重复备份(尤其在频繁backup as copy场景下)
验证命令:
report need backup incremental 1; -- 列出哪些数据文件需要 level 1 备份 validate backupset <code>345</code>; -- 替换为实际 backupset key,检查物理可读性
最易被忽略的是 BCT 文件权限:若 /u01/bct.dbf 属主不是 oracle 或权限非 600,RMAN 会静默禁用该功能,导致 level 1 变成“伪增量”。











