外观
DM 增量备份
增量备份的核心优势:
- 减少备份时间
- 节省存储空间
- 提高备份频率
- 降低备份对生产系统的影响
- 便于快速恢复
适用场景:
- 大规模数据库,全量备份时间长
- 对数据库性能影响敏感的生产环境
- 需要高频率备份的业务系统
- 存储资源有限的环境
增量备份原理
1. 备份链与增量关系
DM数据库的增量备份基于备份链机制,每个增量备份都与一个基准备份(全量或增量)相关联,形成一个备份链:
全量备份 → 增量备份1 → 增量备份2 → 增量备份3 → ...每个增量备份只包含自上次基准备份以来发生变化的数据块,恢复时需要按照备份链的顺序依次应用。
2. 数据块变化检测
DM数据库通过以下方式检测数据块的变化:
- LSN(日志序列号):每个数据块都记录了最后修改它的LSN
- 变更位图:维护数据块的变更状态,标记自上次备份以来哪些数据块发生了变化
- 页头信息:数据块页头包含修改时间和LSN信息
3. 增量备份的实现机制
- 确定基准备份:增量备份前需要确定一个基准备份(全量或增量)
- 扫描数据文件:扫描数据库数据文件,检测自基准备份以来发生变化的数据块
- 收集变更数据:收集所有发生变化的数据块
- 生成增量备份集:将收集到的数据块写入增量备份集
- 记录备份信息:更新备份元数据,记录备份链关系
增量备份类型
1. 基于备份基准分类
1.1 累积增量备份
累积增量备份(Cumulative Incremental Backup)只备份自上次全量备份以来发生变化的数据。
特点:
- 恢复时只需应用全量备份和最新的累积增量备份
- 备份链较短,恢复速度快
- 备份文件较大,备份时间较长
- 适合备份频率较低的场景
备份链示例:
全量备份 → 累积增量1 → 累积增量2 → 累积增量31.2 差异增量备份
差异增量备份(Differential Incremental Backup)只备份自上次备份(可以是全量或增量)以来发生变化的数据。
特点:
- 备份文件较小,备份时间较短
- 恢复时需要应用全量备份和所有中间增量备份
- 备份链较长,恢复速度较慢
- 适合高频率备份的场景
备份链示例:
全量备份 → 差异增量1 → 差异增量2 → 差异增量32. 基于备份方式分类
2.1 物理增量备份
物理增量备份是指备份数据库的物理数据文件,备份的是数据块级别的变化。
特点:
- 备份速度快
- 恢复速度快
- 备份文件大小与实际数据变化量相关
- 适合大规模数据库
2.2 逻辑增量备份
逻辑增量备份是指备份数据库的逻辑对象,如表、索引、存储过程等。
特点:
- 备份文件可读性强
- 可以跨版本恢复
- 备份速度较慢
- 恢复速度较慢
- 适合特定对象的备份
3. 基于备份范围分类
3.1 全库增量备份
全库增量备份是指备份整个数据库的增量变化。
适用场景:
- 需要完整恢复整个数据库的场景
- 数据库规模较小
- 对恢复速度要求高
3.2 表空间增量备份
表空间增量备份是指备份特定表空间的增量变化。
适用场景:
- 只需要恢复特定表空间的场景
- 数据库规模较大,表空间划分合理
- 不同表空间的重要性不同
3.3 数据文件增量备份
数据文件增量备份是指备份特定数据文件的增量变化。
适用场景:
- 只需要恢复特定数据文件的场景
- 数据文件损坏需要单独恢复
- 数据文件规模较大
增量备份配置
1. 归档日志配置
增量备份依赖于归档日志,因此需要先配置归档日志:
sql
-- 查看当前归档模式
SELECT ARCH_MODE FROM V$DATABASE;
-- 启用归档模式
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 配置归档日志路径
ALTER SYSTEM SET ARCH_DEST = '/opt/dmdbms/arch' SCOPE = SPFILE;
ALTER SYSTEM SET ARCH_INI = 1 SCOPE = SPFILE;2. 备份配置参数
配置DM数据库的备份参数,优化增量备份性能:
sql
-- 配置备份缓冲区大小
ALTER SYSTEM SET BACKUP_BUF_SIZE = 16 SCOPE = SPFILE;
-- 配置备份并行度
ALTER SYSTEM SET BACKUP_PARALLEL = 4 SCOPE = SPFILE;
-- 配置备份压缩级别(0-9,默认0不压缩)
ALTER SYSTEM SET BACKUP_COMPRESS_LEVEL = 5 SCOPE = SPFILE;
-- 配置增量备份的最小数据块数
ALTER SYSTEM SET INCREMENT_BACKUP_MIN_BLOCKS = 100 SCOPE = SPFILE;3. 备份设备配置
配置备份设备,确保有足够的存储空间:
sql
-- 添加备份设备
EXECUTE SP_ADD_BACKUP_DEVICE('DISK', 'BACKUP_DISK', '/opt/dmdbms/backup');
-- 查看备份设备
SELECT * FROM V$BACKUP_DEVICE;增量备份操作
1. 使用dmrman工具执行增量备份
1.1 执行累积增量备份
shell
# 执行全量备份(作为基准备份)
dmrman
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL TO BACKUPSET '/opt/dmdbms/backup/full_backup' COMPRESSED;
# 执行累积增量备份
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/cumulative_incr_backup_1' COMPRESSED;
# 执行第二次累积增量备份
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/cumulative_incr_backup_2' COMPRESSED;1.2 执行差异增量备份
shell
# 执行全量备份(作为基准备份)
dmrman
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL TO BACKUPSET '/opt/dmdbms/backup/full_backup' COMPRESSED;
# 执行差异增量备份
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT DIFFERENTIAL WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/diff_incr_backup_1' COMPRESSED;
# 执行第二次差异增量备份
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT DIFFERENTIAL WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/diff_incr_backup_2' COMPRESSED;2. 使用SQL命令执行增量备份
2.1 执行表空间增量备份
sql
-- 执行表空间增量备份
BACKUP TABLESPACE USERS INCREMENT WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/tbs_incr_backup' COMPRESSED;2.2 执行数据文件增量备份
sql
-- 执行数据文件增量备份
BACKUP DATAFILE '/opt/dmdbms/data/DAMENG/USERS01.DBF' INCREMENT WITH BACKUPDIR '/opt/dmdbms/backup' TO BACKUPSET '/opt/dmdbms/backup/df_incr_backup' COMPRESSED;3. 增量备份的自动化
3.1 使用DM作业系统
sql
-- 创建增量备份作业
EXECUTE SP_CREATE_JOB('INCREMENTAL_BACKUP_JOB', 1, 0, '', 0, 0, '', '增量备份作业');
-- 添加作业步骤
EXECUTE SP_JOB_CONFIG_START('INCREMENTAL_BACKUP_JOB');
EXECUTE SP_ADD_JOB_STEP('INCREMENTAL_BACKUP_JOB', 'BACKUP_STEP', 6, 'BACKUP DATABASE INCREMENT WITH BACKUPDIR ''/opt/dmdbms/backup'' TO BACKUPSET ''/opt/dmdbms/backup/incr_backup_''||TO_CHAR(SYSDATE, ''YYYYMMDDHH24MISS'') COMPRESSED;', 1, 2, 0, 0, NULL, 0);
-- 添加作业调度(每天凌晨2点执行)
EXECUTE SP_ADD_JOB_SCHEDULE('INCREMENTAL_BACKUP_JOB', 'BACKUP_SCHEDULE', 1, 2, 1, 1, 0, '00:02:00', NULL, '2023-01-01 00:00:00', NULL, '');
EXECUTE SP_JOB_CONFIG_COMMIT('INCREMENTAL_BACKUP_JOB');3.2 使用脚本自动化
shell
#!/bin/bash
# DM数据库增量备份脚本
# 配置参数
DM_HOME="/opt/dmdbms"
BACKUP_DIR="/opt/dmdbms/backup"
INSTANCE_INI="/opt/dmdbms/data/DAMENG/dm.ini"
DATE=$(date +%Y%m%d%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行增量备份
$DM_HOME/bin/dmrman << EOF
BACKUP DATABASE '$INSTANCE_INI' INCREMENT WITH BACKUPDIR '$BACKUP_DIR' TO BACKUPSET '$BACKUP_DIR/incr_backup_$DATE' COMPRESSED;
EXIT;
EOF
# 检查备份结果
if [ $? -eq 0 ]; then
echo "增量备份成功:$DATE"
# 删除7天前的增量备份
find $BACKUP_DIR -name "incr_backup_*" -type d -mtime +7 -exec rm -rf {} \;
else
echo "增量备份失败:$DATE" >&2
exit 1
fi增量备份的恢复
1. 增量备份恢复的前提条件
- 有完整的备份链,包括全量备份和所有中间增量备份
- 有自备份时间到恢复目标时间的所有归档日志
- 数据库处于关闭或挂载状态
2. 增量备份恢复的步骤
2.1 累积增量备份恢复
shell
# 执行全量恢复
dmrman
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup';
# 执行累积增量恢复
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/cumulative_incr_backup_2';
# 应用归档日志
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch';
# 更新数据库模式
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;2.2 差异增量备份恢复
shell
# 执行全量恢复
dmrman
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup';
# 执行第一次差异增量恢复
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/diff_incr_backup_1';
# 执行第二次差异增量恢复
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/diff_incr_backup_2';
# 应用归档日志
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch';
# 更新数据库模式
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;增量备份最佳实践
1. 备份策略设计
1.1 混合备份策略
建议采用"全量备份+增量备份"的混合备份策略:
- 每周执行一次全量备份
- 每天执行一次增量备份(累积或差异)
- 每小时或更频繁地执行日志备份
1.2 选择合适的增量备份类型
- 累积增量备份:适合备份频率较低(如每天一次)的场景
- 差异增量备份:适合备份频率较高(如每小时一次)的场景
1.3 备份保留策略
- 全量备份:保留30天或更长时间
- 增量备份:保留到下一次全量备份
- 归档日志:保留到下一次全量备份
2. 性能优化
2.1 优化备份参数
sql
-- 调整备份缓冲区大小
ALTER SYSTEM SET BACKUP_BUF_SIZE = 32 SCOPE = SPFILE;
-- 调整备份并行度
ALTER SYSTEM SET BACKUP_PARALLEL = 8 SCOPE = SPFILE;
-- 启用备份压缩
ALTER SYSTEM SET BACKUP_COMPRESS_LEVEL = 7 SCOPE = SPFILE;2.2 选择合适的备份时间
- 选择业务低峰期执行备份
- 避免在系统维护窗口执行备份
- 避免与其他高IO操作冲突
2.3 合理配置存储
- 使用独立的存储设备进行备份
- 确保备份存储有足够的空间
- 配置合适的RAID级别(如RAID 10)
3. 备份验证
3.1 检查备份完整性
shell
# 使用dmrman检查备份完整性
dmrman
CHECK BACKUPSET '/opt/dmdbms/backup/incr_backup_20230101020000';3.2 定期测试恢复
- 每月至少测试一次增量备份的恢复
- 测试不同场景下的恢复
- 记录恢复时间,优化恢复流程
4. 监控与告警
4.1 监控备份作业
sql
-- 查看备份作业状态
SELECT * FROM V$JOB WHERE NAME = 'INCREMENTAL_BACKUP_JOB';
SELECT * FROM V$JOB_HISTORY WHERE JOB_NAME = 'INCREMENTAL_BACKUP_JOB';4.2 监控备份空间
sql
-- 查看备份设备空间使用情况
SELECT DEVICE_NAME, TOTAL_SPACE, USED_SPACE, FREE_SPACE FROM V$BACKUP_DEVICE_STAT;4.3 配置备份告警
- 配置备份失败告警
- 配置备份空间不足告警
- 配置备份时间过长告警
常见问题(FAQ)
Q1: 增量备份失败,提示找不到基准备份怎么办?
A1: 增量备份失败找不到基准备份的可能原因:
- 基准备份被删除或移动
- 备份目录配置错误
- 备份元数据损坏
解决方案:
- 检查备份目录配置是否正确
- 确保基准备份存在且未损坏
- 重新执行全量备份,作为新的基准备份
- 检查备份元数据,使用dmrman修复备份目录
shell
# 修复备份目录
dmrman
REPAIR BACKUPDIR '/opt/dmdbms/backup';Q2: 增量备份恢复时提示归档日志缺失怎么办?
A2: 增量备份恢复时归档日志缺失的解决方案:
- 检查归档日志路径是否正确
- 确保有自备份时间到恢复目标时间的所有归档日志
- 如果归档日志确实缺失,可以恢复到归档日志可用的最近时间点
shell
# 恢复到指定时间点
dmrman
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch' UNTIL TIME '2023-01-01 12:00:00';Q3: 增量备份文件过大怎么办?
A3: 增量备份文件过大的解决方案:
- 增加全量备份的频率
- 启用备份压缩
- 调整备份压缩级别
- 检查数据库是否有大量数据变更
- 考虑使用差异增量备份替代累积增量备份
Q4: 增量备份恢复时间过长怎么办?
A4: 增量备份恢复时间过长的解决方案:
- 优化恢复参数
- 增加恢复并行度
- 使用累积增量备份替代差异增量备份
- 确保恢复存储设备性能良好
- 考虑使用更快的存储设备
Q5: 如何确定增量备份的频率?
A5: 确定增量备份频率的因素:
- 业务数据变更频率
- 可接受的数据丢失量(RPO)
- 备份存储容量
- 系统性能影响
- 恢复时间目标(RTO)
建议:
- 对于数据变更频繁的业务,建议每小时执行一次增量备份
- 对于数据变更较少的业务,建议每天执行一次增量备份
- 结合业务需求和系统资源,调整备份频率
Q6: 如何监控增量备份的进度?
A6: 监控增量备份进度的方法:
- 使用DM企业管理器监控备份进度
- 查看数据库日志
- 查询V$BACKUP_PROGRESS视图
sql
-- 查看备份进度
SELECT * FROM V$BACKUP_PROGRESS;不同版本的差异
DM 7 vs DM 8
| 特性 | DM 7 | DM 8 |
|---|---|---|
| 增量备份类型 | 支持累积增量备份 | 支持累积增量和差异增量备份 |
| 备份压缩 | 支持,压缩级别0-9 | 支持,优化压缩算法,压缩比更高 |
| 备份并行度 | 最高支持4 | 最高支持128 |
| 备份验证 | 基本验证 | 增强验证,自动检查备份完整性 |
| 增量备份速度 | 一般 | 优化,备份速度提升50%以上 |
| 恢复速度 | 一般 | 优化,恢复速度提升30%以上 |
| 备份元数据管理 | 基本管理 | 增强管理,支持备份目录修复 |
DM 8.1 新特性
- 增强的增量备份算法,减少备份时间和备份文件大小
- 支持增量备份的断点续传
- 新增增量备份的智能合并功能
- 优化的备份压缩算法,压缩比提高20%
- 新增基于SCN的精确增量备份
- 支持增量备份的即时恢复
在实际应用中,建议采用"全量备份+增量备份"的混合备份策略,根据业务需求和系统资源选择合适的增量备份类型和备份频率。同时,要定期测试增量备份的恢复,确保备份的可用性和可靠性。
通过合理设计和实施增量备份策略,可以提高数据库的可用性和可靠性,最大限度地减少数据丢失和业务中断时间。
