Oracle RMAN 增量备份与 Block Change Tracking
Oracle RMAN 增量备份与 Block Change Tracking
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
RMAN 增量备份 仅备份变化的数据块[1],配合 Block Change Tracking 大幅提升性能:
核心特性:
- 增量备份仅备份变化块
- Block Change Tracking 记录变化
- 多级增量备份(0/1/2)
- 增量更新备份(19c)
2. 增量备份级别
2.1 备份级别
| 级别 | 说明 |
|---|---|
| 0 | 全量备份(基础) |
| 1 cumulative | 累积增量(自上次 0 级) |
| 1 differential | 差异增量(自上次任意备份) |
2.2 备份策略
周日: Level 0(全量)
周一-周六: Level 1 differential
或
周日: Level 0
周三: Level 1 cumulative
其他: Level 1 differential
3. 创建增量备份
3.1 Level 0 全量备份
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
3.2 Level 1 增量备份
-- 差异增量(默认)
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;
-- 累积增量
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
3.3 表空间增量
RMAN> BACKUP INCREMENTAL LEVEL 1 TABLESPACE users, example;
3.4 数据文件增量
RMAN> BACKUP INCREMENTAL LEVEL 1 DATAFILE 4, 5;
4. Block Change Tracking
4.1 启用 BCT
-- 启用 Block Change Tracking
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/u01/oradata/orcl/bct.log';
-- OMF 自动命名
ALTER SYSTEM SET db_create_file_dest='+DATA' SCOPE=BOTH;
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
4.2 查看 BCT 状态
SELECT
filename,
status,
bytes
FROM v$block_change_tracking;
4.3 禁用 BCT
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
4.4 移动 BCT 文件
-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 2. 启动到 mount
STARTUP MOUNT;
-- 3. 移动文件
ALTER DATABASE RENAME FILE '/u01/oradata/orcl/bct.log' TO '/u02/bct.log';
-- 4. 打开数据库
ALTER DATABASE OPEN;
5. 增量备份性能
5.1 无 BCT
扫描所有数据块,对比 SCN
- 1TB 数据库需扫描所有块
- 耗时接近全量备份
5.2 有 BCT
仅扫描变化的块
- 仅读取 BCT 文件
- 增量备份速度提升 10-100 倍
5.3 性能对比
| 数据库大小 | 无 BCT | 有 BCT |
|---|---|---|
| 100GB | 30 分钟 | 5 分钟 |
| 1TB | 5 小时 | 30 分钟 |
| 10TB | 50 小时 | 3 小时 |
6. 增量更新备份(IUB)
6.1 概念
19c 引入,将增量备份应用到 Image Copy:
1. 初始: Image Copy
2. 增量: 应用到 Image Copy
3. 下次: Image Copy 已是最新
6.2 配置 IUB
RMAN> RUN {
RECOVER COPY OF DATABASE WITH TAG 'incr_update';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;
}
6.3 优势
- 快速恢复(无需应用增量)
- 节省存储
- 自动维护
7. 增量备份恢复
7.1 完全恢复
-- 1. 恢复 Level 0
RMAN> RESTORE DATABASE;
-- 2. 应用 Level 1 增量
RMAN> RECOVER DATABASE;
-- 3. 应用归档
RMAN> RECOVER DATABASE;
7.2 不完全恢复
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2026-07-21 14:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
7.3 块介质恢复
-- 仅恢复损坏块
RMAN> RECOVER DATAFILE 4 BLOCK 123;
RMAN> RECOVER CORRUPTION LIST;
8. 备份策略示例
8.1 标准策略
-- 周日 Level 0
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
-- 周一至周六 Level 1
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
8.2 保留策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
8.3 自动化
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/%F';
9. 监控增量备份
9.1 查看备份
SELECT
b.tag,
b.incremental_level,
b.backup_type,
b.completion_time,
b.handle
FROM v$backup_set b, v$backup_piece p
WHERE b.set_stamp = p.set_stamp
AND b.incremental_level IS NOT NULL
ORDER BY b.completion_time DESC;
9.2 BCT 效果
-- 查看增量备份读取的块数
SELECT
file#,
avg(datafile_blocks) AS total_blocks,
avg(blocks_read) AS blocks_read,
ROUND(avg(blocks_read) / avg(datafile_blocks) * 100, 2) AS read_pct
FROM v$backup_datafile
WHERE incremental_level > 0
GROUP BY file#;
10. 常见坑与排错
10.1 增量备份慢
修复:
-- 1. 启用 BCT
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/bct.log';
-- 2. 验证
SELECT status FROM v$block_change_tracking;
10.2 ORA-19716: BCT 文件无效
修复:
-- 1. 禁用 BCT
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
-- 2. 删除旧文件
! rm /u01/oradata/orcl/bct.log
-- 3. 重新启用
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/bct.log';
10.3 Level 0 缺失
现象:Level 1 失败。
修复:
-- 先创建 Level 0
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;
-- 然后 Level 1
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;
10.4 增量备份过大
原因:变化数据多。
修复:
-- 1. 检查 BCT 是否启用
SELECT status FROM v$block_change_tracking;
-- 2. 检查数据库活动
SELECT name, value FROM v$sysstat WHERE name LIKE '%changes%';
10.5 ORA-19625: 文件不存在
修复:
-- 检查数据文件
SELECT file_name, status FROM dba_data_files;
-- 跨平台恢复需要 RESTORE FROM PLATFORM
11. 最佳实践
- 生产启用 BCT:增量备份性能 10-100 倍
- 每周 Level 0:基础备份
- 每日 Level 1:增量备份
- 使用 IUB(19c+):快速恢复
- 合理保留策略:7-30 天
- 备份归档日志:完整恢复
- 监控 BCT 状态:v$block_change_tracking
- 定期验证备份:RESTORE DATABASE VALIDATE
- 备份到多目的地:避免单点
- 测试恢复:定期演练
12. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Incremental Backups” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-backup-concepts.html
[2] Oracle Database Administrator’s Guide 19c, “Block Change Tracking” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/