Skip to content

DM 增量备份

增量备份的核心优势

  • 减少备份时间
  • 节省存储空间
  • 提高备份频率
  • 降低备份对生产系统的影响
  • 便于快速恢复

适用场景

  • 大规模数据库,全量备份时间长
  • 对数据库性能影响敏感的生产环境
  • 需要高频率备份的业务系统
  • 存储资源有限的环境

增量备份原理

1. 备份链与增量关系

DM数据库的增量备份基于备份链机制,每个增量备份都与一个基准备份(全量或增量)相关联,形成一个备份链:

全量备份 → 增量备份1 → 增量备份2 → 增量备份3 → ...

每个增量备份只包含自上次基准备份以来发生变化的数据块,恢复时需要按照备份链的顺序依次应用。

2. 数据块变化检测

DM数据库通过以下方式检测数据块的变化:

  • LSN(日志序列号):每个数据块都记录了最后修改它的LSN
  • 变更位图:维护数据块的变更状态,标记自上次备份以来哪些数据块发生了变化
  • 页头信息:数据块页头包含修改时间和LSN信息

3. 增量备份的实现机制

  1. 确定基准备份:增量备份前需要确定一个基准备份(全量或增量)
  2. 扫描数据文件:扫描数据库数据文件,检测自基准备份以来发生变化的数据块
  3. 收集变更数据:收集所有发生变化的数据块
  4. 生成增量备份集:将收集到的数据块写入增量备份集
  5. 记录备份信息:更新备份元数据,记录备份链关系

增量备份类型

1. 基于备份基准分类

1.1 累积增量备份

累积增量备份(Cumulative Incremental Backup)只备份自上次全量备份以来发生变化的数据。

特点

  • 恢复时只需应用全量备份和最新的累积增量备份
  • 备份链较短,恢复速度快
  • 备份文件较大,备份时间较长
  • 适合备份频率较低的场景

备份链示例

全量备份 → 累积增量1 → 累积增量2 → 累积增量3

1.2 差异增量备份

差异增量备份(Differential Incremental Backup)只备份自上次备份(可以是全量或增量)以来发生变化的数据。

特点

  • 备份文件较小,备份时间较短
  • 恢复时需要应用全量备份和所有中间增量备份
  • 备份链较长,恢复速度较慢
  • 适合高频率备份的场景

备份链示例

全量备份 → 差异增量1 → 差异增量2 → 差异增量3

2. 基于备份方式分类

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: 增量备份失败找不到基准备份的可能原因:

  • 基准备份被删除或移动
  • 备份目录配置错误
  • 备份元数据损坏

解决方案

  1. 检查备份目录配置是否正确
  2. 确保基准备份存在且未损坏
  3. 重新执行全量备份,作为新的基准备份
  4. 检查备份元数据,使用dmrman修复备份目录
shell
# 修复备份目录
dmrman
REPAIR BACKUPDIR '/opt/dmdbms/backup';

Q2: 增量备份恢复时提示归档日志缺失怎么办?

A2: 增量备份恢复时归档日志缺失的解决方案:

  1. 检查归档日志路径是否正确
  2. 确保有自备份时间到恢复目标时间的所有归档日志
  3. 如果归档日志确实缺失,可以恢复到归档日志可用的最近时间点
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: 增量备份文件过大的解决方案:

  1. 增加全量备份的频率
  2. 启用备份压缩
  3. 调整备份压缩级别
  4. 检查数据库是否有大量数据变更
  5. 考虑使用差异增量备份替代累积增量备份

Q4: 增量备份恢复时间过长怎么办?

A4: 增量备份恢复时间过长的解决方案:

  1. 优化恢复参数
  2. 增加恢复并行度
  3. 使用累积增量备份替代差异增量备份
  4. 确保恢复存储设备性能良好
  5. 考虑使用更快的存储设备

Q5: 如何确定增量备份的频率?

A5: 确定增量备份频率的因素:

  • 业务数据变更频率
  • 可接受的数据丢失量(RPO)
  • 备份存储容量
  • 系统性能影响
  • 恢复时间目标(RTO)

建议

  • 对于数据变更频繁的业务,建议每小时执行一次增量备份
  • 对于数据变更较少的业务,建议每天执行一次增量备份
  • 结合业务需求和系统资源,调整备份频率

Q6: 如何监控增量备份的进度?

A6: 监控增量备份进度的方法:

  1. 使用DM企业管理器监控备份进度
  2. 查看数据库日志
  3. 查询V$BACKUP_PROGRESS视图
sql
-- 查看备份进度
SELECT * FROM V$BACKUP_PROGRESS;

不同版本的差异

DM 7 vs DM 8

特性DM 7DM 8
增量备份类型支持累积增量备份支持累积增量和差异增量备份
备份压缩支持,压缩级别0-9支持,优化压缩算法,压缩比更高
备份并行度最高支持4最高支持128
备份验证基本验证增强验证,自动检查备份完整性
增量备份速度一般优化,备份速度提升50%以上
恢复速度一般优化,恢复速度提升30%以上
备份元数据管理基本管理增强管理,支持备份目录修复

DM 8.1 新特性

  • 增强的增量备份算法,减少备份时间和备份文件大小
  • 支持增量备份的断点续传
  • 新增增量备份的智能合并功能
  • 优化的备份压缩算法,压缩比提高20%
  • 新增基于SCN的精确增量备份
  • 支持增量备份的即时恢复

在实际应用中,建议采用"全量备份+增量备份"的混合备份策略,根据业务需求和系统资源选择合适的增量备份类型和备份频率。同时,要定期测试增量备份的恢复,确保备份的可用性和可靠性。

通过合理设计和实施增量备份策略,可以提高数据库的可用性和可靠性,最大限度地减少数据丢失和业务中断时间。