增量备份变慢主因是未启用块跟踪(BCT),导致RMAN每次全扫描数据文件;启用BCT后RMAN直接读取变更块列表,大幅提升LEVEL 1增量备份效率。
为什么增量备份越来越慢?先确认是否启用了块跟踪
rman 增量备份变慢,大概率不是因为数据量增长本身,而是每次都要全扫描数据文件找变化块。oracle 从 10g 起支持块跟踪(block change tracking, bct),启用后 rman 能直接读取 change tracking file 获取变更块列表,跳过全文件扫描。但这个功能默认是关闭的,必须手动开启——很多环境长期没开,直到备份窗口告急才被发现。
检查是否启用:
SELECT status, filename, bytes FROM v$block_change_tracking;
返回 DISABLED 或空结果,说明没开;ENABLED 且有 filename 才算真正生效。
如何安全启用块跟踪文件(BCT)
BCT 文件本身很小(通常几 MB),但写入会带来轻微 I/O 开销,尤其在高并发 DML 场景下。它不参与归档、不备份到 RMAN,但必须放在可靠存储上(不能放在 ASM 的未镜像磁盘组或 NFS 挂载点)。
- 启用前确保
db_recovery_file_dest不是唯一选项——BCT 文件路径需显式指定,避免和 FRA 混用导致空间争抢 - 执行启用命令:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/ORCL/bct.dbf';
- 启用后立即生效,无需重启实例;但已运行的 RMAN 备份会话不会自动切换,需新启动的备份任务才使用 BCT
- 如果报错
ORA-19755: could not open change tracking file,通常是权限问题(Oracle 用户对目录无写权限)或路径所在文件系统满
RMAN 增量备份是否真的用了 BCT?看 trace 和视图
光看命令没用,得验证 RMAN 实际行为。BCT 只在 LEVEL 1 增量备份中起作用(LEVEL 0 是全量,不依赖 BCT)。
- 在 RMAN 中加
SET DEBUG ON并运行一次BACKUP INCREMENTAL LEVEL 1 DATABASE;,日志里搜using change tracking file—— 出现即表示命中 - 查
v$rman_backup_job_details,字段INPUT_BYTES_DISPLAY和OUTPUT_BYTES_DISPLAY差距大,说明跳过了大量未修改块;若二者接近,BCT 可能没生效或数据修改率极高 - BCT 文件本身不记录时间戳,所以无法回溯“某次备份用了哪些块”,只能通过
v$backup_datafile的USED_CHANGE_TRACKING列确认单次备份是否启用(YES/NO)
BCT 文件损坏或丢失怎么办?RMAN 会自动降级,但有隐患
BCT 文件损坏时,RMAN 不报错,而是静默退回到全扫描模式——备份仍能完成,但速度回归“原始状态”,容易被误认为“备份突然变慢”,排查时却忽略 BCT 状态。
- 损坏表现:查询
v$block_change_tracking显示ENABLED,但 RMAN 日志不再出现using change tracking file,且备份耗时明显上升 - 修复方式只有重建:
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;<br>ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/new/path/bct.dbf';
注意:禁用瞬间会触发一次 full scan 来重置内部位图,可能造成短暂 I/O 尖峰 - 不建议把 BCT 放在和数据文件同一磁盘组——万一磁盘故障,BCT 丢失 + 数据文件受损,RMAN 增量逻辑会彻底失效
BCT 是个“隐形加速器”,一旦配置错误或路径不稳定,它就默默退出,只留下变慢的备份和一头雾水的 DBA。











