外观
Oracle 增量备份
增量备份类型
差异增量备份
- 概念:备份自上次同级或低级增量备份以来发生变化的数据块
- 特点:备份文件大小随时间增长,恢复时需要最近的完整备份和所有差异备份
- 适用场景:适用于备份频率较高的环境
- 恢复时间:相对较长,需要应用多个备份文件
累积增量备份
- 概念:备份自上次低级增量备份以来发生变化的数据块
- 特点:备份文件大小相对稳定,恢复时只需要最近的完整备份和最近的累积备份
- 适用场景:适用于备份频率较低的环境
- 恢复时间:相对较短,只需要应用两个备份文件
增量备份级别
- 0级增量备份:相当于完整备份,备份所有数据块
- 1级增量备份:备份自上次0级或1级备份以来发生变化的数据块
- 1级差异增量:备份自上次同级或低级增量备份以来的变化
- 1级累积增量:备份自上次低级增量备份以来的变化
增量备份优势
减少备份时间
- 只备份变化的数据块,显著减少备份时间
- 适合大型数据库的频繁备份
- 可以在业务高峰期之外执行备份
节省存储空间
- 增量备份文件大小远小于完整备份
- 可以更频繁地执行备份,同时保持存储空间合理
- 适合存储空间有限的环境
提高恢复速度
- 对于累积增量备份,恢复时只需要最近的完整备份和最近的累积备份
- 可以更快地恢复到特定时间点
- 减少恢复过程中的I/O操作
灵活的备份策略
- 可以根据业务需求制定不同的备份策略
- 支持多级增量备份,满足不同的恢复点目标
- 可以结合归档日志备份,实现更细粒度的恢复
增量备份配置
启用块更改跟踪
sql
-- 启用块更改跟踪
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/path/to/block_change_tracking.log';
-- 检查块更改跟踪状态
SELECT STATUS, FILENAME FROM V$BLOCK_CHANGE_TRACKING;
-- 禁用块更改跟踪
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;配置RMAN通道
sql
-- 配置默认通道
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%U' MAXPIECESIZE 2G;
-- 配置并行通道
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- 配置备份保留策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 配置控制文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;配置备份优化
sql
-- 启用备份优化
CONFIGURE BACKUP OPTIMIZATION ON;
-- 禁用备份优化
CONFIGURE BACKUP OPTIMIZATION OFF;增量备份执行
0级增量备份
sql
-- 执行0级增量备份
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
-- 执行0级增量备份并压缩
BACKUP INCREMENTAL LEVEL 0 COMPRESSED DATABASE PLUS ARCHIVELOG;
-- 执行0级增量备份到特定位置
BACKUP INCREMENTAL LEVEL 0 DATABASE FORMAT '/backup/level0_%U' PLUS ARCHIVELOG FORMAT '/backup/arch_%U';1级差异增量备份
sql
-- 执行1级差异增量备份
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
-- 执行1级差异增量备份并压缩
BACKUP INCREMENTAL LEVEL 1 COMPRESSED DATABASE PLUS ARCHIVELOG;
-- 执行1级差异增量备份到特定位置
BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '/backup/level1_diff_%U' PLUS ARCHIVELOG FORMAT '/backup/arch_%U';1级累积增量备份
sql
-- 执行1级累积增量备份
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG;
-- 执行1级累积增量备份并压缩
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE COMPRESSED DATABASE PLUS ARCHIVELOG;
-- 执行1级累积增量备份到特定位置
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE FORMAT '/backup/level1_cum_%U' PLUS ARCHIVELOG FORMAT '/backup/arch_%U';增量备份脚本
bash
#!/bin/bash
# 设置环境变量
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
ORACLE_SID=ORCL
export ORACLE_HOME ORACLE_SID
# 备份目录
BACKUP_DIR=/backup
# 执行0级增量备份(每周日执行)
if [ $(date +%u) -eq 7 ]; then
$ORACLE_HOME/bin/rman target / << EOF
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 0 COMPRESSED DATABASE PLUS ARCHIVELOG;
DELETE OBSOLETE;
}
EOF
else
# 执行1级累积增量备份(其他日期执行)
$ORACLE_HOME/bin/rman target / << EOF
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE COMPRESSED DATABASE PLUS ARCHIVELOG;
DELETE OBSOLETE;
}
EOF
fi增量备份恢复
基于增量备份的完整恢复
sql
-- 启动数据库到挂载状态
STARTUP MOUNT;
-- 恢复控制文件(如果需要)
RESTORE CONTROLFILE FROM '/backup/controlfile_backup';
-- 恢复数据库
RESTORE DATABASE;
-- 应用归档日志
RECOVER DATABASE;
-- 打开数据库
ALTER DATABASE OPEN;基于增量备份的时间点恢复
sql
-- 启动数据库到挂载状态
STARTUP MOUNT;
-- 恢复控制文件(如果需要)
RESTORE CONTROLFILE FROM '/backup/controlfile_backup';
-- 恢复数据库到指定时间点
RESTORE DATABASE UNTIL TIME '2023-12-31 23:59:59';
-- 应用归档日志到指定时间点
RECOVER DATABASE UNTIL TIME '2023-12-31 23:59:59';
-- 打开数据库,使用重置日志
ALTER DATABASE OPEN RESETLOGS;增量备份恢复到新服务器
sql
-- 在新服务器上启动数据库到nomount状态
STARTUP NOMOUNT;
-- 恢复控制文件
RESTORE CONTROLFILE FROM '/backup/controlfile_backup';
-- 挂载数据库
ALTER DATABASE MOUNT;
-- 恢复数据库
RESTORE DATABASE;
-- 应用归档日志
RECOVER DATABASE;
-- 打开数据库,使用重置日志
ALTER DATABASE OPEN RESETLOGS;增量备份性能优化
启用块更改跟踪
- 作用:显著提高增量备份速度,减少备份过程中的I/O操作
- 配置:在生产环境中建议启用块更改跟踪
- 注意:块更改跟踪文件会占用一定的存储空间,但通常远小于备份节省的空间
并行备份
sql
-- 配置并行通道
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- 执行并行增量备份
BACKUP INCREMENTAL LEVEL 1 DATABASE PARALLELISM 4;压缩备份
sql
-- 执行压缩增量备份
BACKUP INCREMENTAL LEVEL 1 COMPRESSED DATABASE;
-- 配置默认压缩算法
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM'; -- 19c及以上版本优化存储I/O
- 使用高性能存储设备
- 配置多个备份目录,分散I/O负载
- 考虑使用ASM存储,提高I/O性能
- 避免在备份期间执行其他I/O密集型操作
合理的备份策略
- 根据数据库大小和业务需求,制定合理的备份策略
- 对于大型数据库,建议使用0级备份+累积增量备份的策略
- 对于小型数据库,可以考虑更频繁的差异增量备份
- 结合归档日志备份,实现更细粒度的恢复
增量备份监控
备份状态监控
sql
-- 查看备份作业状态
SELECT * FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%';
-- 查看备份历史
SELECT * FROM V$BACKUP_SET ORDER BY COMPLETION_TIME DESC;
-- 查看备份文件信息
SELECT * FROM V$BACKUP_PIECE ORDER BY COMPLETION_TIME DESC;备份性能监控
sql
-- 查看备份性能统计
SELECT * FROM V$RMAN_BACKUP_JOB_DETAILS ORDER BY START_TIME DESC;
-- 查看块更改跟踪状态
SELECT STATUS, FILENAME FROM V$BLOCK_CHANGE_TRACKING;
-- 查看备份文件大小和数量
SELECT BACKUP_TYPE, COUNT(*) AS BACKUP_COUNT, SUM(BYTES)/1024/1024/1024 AS SIZE_GB
FROM V$BACKUP_SET
GROUP BY BACKUP_TYPE;备份验证
sql
-- 验证备份文件完整性
VALIDATE BACKUPSET backup_set_id;
-- 验证数据库恢复可行性
RESTORE DATABASE VALIDATE;
-- 验证归档日志备份
VALIDATE ARCHIVELOG ALL;最佳实践
制定合理的备份策略
- 小型数据库:每周执行一次0级备份,每天执行一次1级差异备份
- 中型数据库:每周执行一次0级备份,每天执行一次1级累积备份
- 大型数据库:每月执行一次0级备份,每周执行一次1级累积备份,每天执行一次1级差异备份
启用块更改跟踪
- 在所有生产环境中启用块更改跟踪
- 定期检查块更改跟踪文件状态
- 确保块更改跟踪文件有足够的存储空间
定期测试恢复
- 定期测试基于增量备份的恢复过程
- 验证恢复时间是否符合业务需求
- 确保备份文件的完整性和可用性
合理配置备份保留策略
- 根据业务需求和存储空间,配置合理的备份保留策略
- 定期清理过期备份,释放存储空间
- 考虑将备份复制到异地存储,提高灾难恢复能力
结合归档日志备份
- 定期备份归档日志,确保可以恢复到任意时间点
- 配置归档日志自动删除策略,避免归档日志占用过多空间
- 确保归档日志备份的完整性,避免恢复时缺少归档日志
版本差异
Oracle 10g
- 支持基本的增量备份功能
- 支持0级和1级增量备份
- 支持差异增量和累积增量
- 引入了块更改跟踪功能
Oracle 11g
- 增强了增量备份功能
- 引入了快速增量备份,提高备份速度
- 增强了块更改跟踪功能
- 支持备份压缩,进一步减少备份大小
Oracle 12c及以上
- 增强了多租户架构的增量备份支持
- 引入了更灵活的备份策略
- 增强了备份压缩算法
- 支持增量备份的并行处理
- 引入了备份优化功能
常见问题(FAQ)
Q1: 增量备份比完整备份慢,如何解决?
A1: 增量备份比完整备份慢可能是由以下原因导致的:
- 未启用块更改跟踪:启用块更改跟踪可以显著提高增量备份速度
- 存储I/O性能不足:优化存储I/O,使用高性能存储设备
- 并行度设置不合理:增加备份并行度
- 数据库负载过高:在数据库负载较低时执行备份
- 块更改跟踪文件问题:检查块更改跟踪文件状态,必要时重建
Q2: 增量备份恢复失败,提示缺少归档日志,如何解决?
A2: 增量备份恢复失败提示缺少归档日志可能是由以下原因导致的:
- 归档日志备份不完整:确保所有归档日志都已备份
- 归档日志已被删除:配置合理的归档日志保留策略
- 归档日志损坏:定期验证归档日志完整性
- 恢复时间点选择不当:选择有完整归档日志的时间点
- 解决方案:从最近的完整备份开始恢复,结合可用的归档日志
Q3: 启用块更改跟踪后,增量备份速度没有明显提升,如何解决?
A3: 启用块更改跟踪后增量备份速度没有明显提升可能是由以下原因导致的:
- 块更改跟踪文件位置不当:将块更改跟踪文件放在高性能存储上
- 块更改跟踪文件大小不合理:块更改跟踪文件会自动增长,无需手动调整
- 数据库更改率过高:对于更改率非常高的数据库,块更改跟踪的效果可能有限
- 备份并行度不足:增加备份并行度
- 存储I/O瓶颈:优化存储I/O性能
Q4: 累积增量备份和差异增量备份如何选择?
A4: 累积增量备份和差异增量备份的选择取决于以下因素:
- 备份频率:备份频率高时,适合使用差异增量备份
- 恢复时间要求:对恢复时间要求高时,适合使用累积增量备份
- 存储空间:存储空间有限时,适合使用差异增量备份
- 数据库大小:大型数据库适合使用累积增量备份
- 建议:对于大多数生产环境,建议使用0级备份+累积增量备份的策略,平衡备份时间和恢复时间
Q5: 如何估算增量备份的大小?
A5: 估算增量备份大小可以参考以下方法:
- 历史数据:分析过去的增量备份大小和数据库更改率
- 块更改跟踪:查询V$BLOCK_CHANGE_TRACKING视图,了解块更改情况
- 数据库统计:使用DBMS_STATS包收集数据库统计信息
- 监控工具:使用Oracle Enterprise Manager监控备份大小趋势
- 经验公式:增量备份大小 ≈ 数据库大小 × 每日更改率 × 备份间隔天数
Q6: 增量备份可以用于数据迁移吗?
A6: 是的,增量备份可以用于数据迁移,特别是大型数据库的迁移:
- 初始同步:在源数据库执行0级增量备份,恢复到目标数据库
- 增量同步:在源数据库执行1级增量备份,恢复到目标数据库,减少数据差异
- 最终同步:在源数据库执行最后的增量备份,恢复到目标数据库,完成迁移
- 优势:相比完整备份,增量备份可以显著减少数据传输量和迁移时间
- 注意:迁移过程中需要确保源数据库的归档日志完整,以便在目标数据库中应用
Q7: 如何验证增量备份的完整性?
A7: 验证增量备份的完整性可以通过以下方法:
- RMAN验证:使用VALIDATE命令验证备份文件完整性
- 恢复测试:定期在测试环境中执行基于增量备份的恢复测试
- 备份集检查:使用CROSSCHECK命令检查备份集状态
- 日志分析:分析备份日志,确认备份过程没有错误
- 监控工具:使用Oracle Enterprise Manager监控备份状态
Q8: 增量备份与Data Guard结合使用时需要注意什么?
A8: 增量备份与Data Guard结合使用时需要注意以下几点:
- 备库备份:可以在备库上执行增量备份,减少主库负载
- 备份一致性:确保备库处于一致状态,避免备份损坏
- 归档日志同步:确保主库和备库的归档日志同步正常
- 备份策略协调:主库和备库的备份策略需要协调,避免备份冲突
- 恢复测试:定期测试基于备库增量备份的恢复过程
- 注意:在备库上执行备份时,需要确保备库有足够的资源和存储空间
