Skip to content

DB2 在线备份

在线备份概述

DB2 在线备份是一种在数据库保持运行状态下执行的备份方式,允许用户在不中断数据库服务的情况下创建数据库备份。在线备份是生产环境中常用的备份方式,能够最大限度地减少数据库 downtime,保证业务连续性。

在线备份原理

在线备份工作机制

  1. 备份初始化:DB2 备份管理器初始化备份过程,创建备份控制文件
  2. 日志记录点确定:确定备份开始的日志记录点(LSN - Log Sequence Number)
  3. 数据页复制:将数据库数据页复制到备份文件中
  4. 日志持续归档:在备份过程中持续归档事务日志
  5. 备份完成标记:在备份完成时记录结束日志点
  6. 备份验证:验证备份文件的完整性

在线备份与离线备份的区别

特性在线备份离线备份
数据库状态运行中关闭或静止
用户访问允许不允许
备份时间较长较短
日志需求必须启用归档日志可使用循环日志
恢复类型可进行时间点恢复只能恢复到备份点
系统资源消耗较高较低

在线备份架构与组件

在线备份管理器

DB2 在线备份管理器负责协调整个在线备份过程,包括备份初始化、数据页复制、日志归档和备份验证。

缓冲池管理器

缓冲池管理器负责管理数据库缓冲池,确保在备份过程中数据页的一致性。

日志管理器

日志管理器负责管理事务日志,确保在备份过程中所有修改都被正确记录和归档。

表空间管理器

表空间管理器负责管理数据库表空间,确保在备份过程中表空间的一致性。

锁管理器

锁管理器负责管理数据库锁,确保在备份过程中数据的一致性,同时允许用户正常访问数据库。

在线备份配置

归档日志配置

sql
-- 启用归档日志模式
UPDATE DATABASE CONFIGURATION FOR sample USING logarchmeth1 DISK:/db2/archlog/

-- 设置日志缓冲区大小
UPDATE DATABASE CONFIGURATION FOR sample USING logbufsz 16384

-- 设置日志文件大小和数量
UPDATE DATABASE CONFIGURATION FOR sample USING logfilsiz 1024
UPDATE DATABASE CONFIGURATION FOR sample USING logprimary 10
UPDATE DATABASE CONFIGURATION FOR sample USING logsecond 20

在线备份参数优化

sql
-- 设置备份并行度
UPDATE DATABASE CONFIGURATION FOR sample USING num_db_backups 4

-- 设置备份缓冲区大小
UPDATE DATABASE CONFIGURATION FOR sample USING backup_bufcnt 10

-- 设置备份缓冲区大小
UPDATE DATABASE CONFIGURATION FOR sample USING backup_bufsz 65536

备份设备配置

bash
# 配置备份设备
cat > /db2/config/backup-devices.cfg << EOF
DEVICE disk01 TYPE DISK PATH /db2/backup
DEVICE tape01 TYPE TAPE PATH /dev/tape0
EOF

在线备份操作步骤

在线备份准备工作

  1. 确认数据库处于归档日志模式
  2. 验证归档日志路径可写
  3. 检查数据库状态正常
  4. 确认有足够的磁盘空间用于备份
  5. 通知相关业务部门
sql
-- 检查数据库日志模式
db2 get db cfg for sample | grep -i "logarchmeth"

-- 验证归档日志路径
db2 connect to sample
db2 archive log for database sample

-- 检查数据库状态
db2pd -db sample -health

执行完整在线备份

sql
-- 执行完整在线备份
db2 BACKUP DATABASE sample ONLINE TO /db2/backup WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4 COMPRESS

-- 执行完整在线备份并包含日志
db2 BACKUP DATABASE sample ONLINE TO /db2/backup INCLUDE LOGS WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

-- 执行完整在线备份到多个设备
db2 BACKUP DATABASE sample ONLINE TO /db2/backup1, /db2/backup2 WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

执行表空间在线备份

sql
-- 执行表空间在线备份
db2 BACKUP DATABASE sample TABLESPACE (USERSPACE1, SYSTOOLSPACE) ONLINE TO /db2/backup WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

-- 执行表空间在线备份并包含日志
db2 BACKUP DATABASE sample TABLESPACE (USERSPACE1) ONLINE TO /db2/backup INCLUDE LOGS WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

执行增量在线备份

sql
-- 执行增量在线备份
db2 BACKUP DATABASE sample ONLINE INCREMENTAL TO /db2/backup WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

-- 执行增量在线备份并包含日志
db2 BACKUP DATABASE sample ONLINE INCREMENTAL TO /db2/backup INCLUDE LOGS WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

执行差异在线备份

sql
-- 执行差异在线备份
db2 BACKUP DATABASE sample ONLINE DELTA TO /db2/backup WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

-- 执行差异在线备份并包含日志
db2 BACKUP DATABASE sample ONLINE DELTA TO /db2/backup INCLUDE LOGS WITH 4 BUFFERS BUFFER 65536 PARALLELISM 4

在线备份策略设计

基于业务需求的备份策略

核心业务系统

  • 完整在线备份:每天一次(凌晨2:00)
  • 增量在线备份:每4小时一次
  • 差异在线备份:每小时一次
  • 日志备份:每15分钟一次

一般业务系统

  • 完整在线备份:每周一次(周日凌晨2:00)
  • 增量在线备份:每天一次(凌晨2:00)
  • 日志备份:每30分钟一次

非核心业务系统

  • 完整在线备份:每月一次(月初凌晨2:00)
  • 增量在线备份:每周一次(周日凌晨2:00)
  • 日志备份:每小时一次

在线备份保留策略

  1. 完整备份保留:保留最近30天的完整备份
  2. 增量备份保留:保留最近7天的增量备份
  3. 差异备份保留:保留最近3天的差异备份
  4. 日志备份保留:保留最近30天的日志备份
  5. 归档备份:将超过保留期的备份归档到磁带或云存储

在线备份优化

性能优化

并行备份优化

sql
-- 设置备份并行度
UPDATE DATABASE CONFIGURATION FOR sample USING num_db_backups 4

-- 使用并行备份命令
db2 BACKUP DATABASE sample ONLINE TO /db2/backup PARALLELISM 4

缓冲区优化

sql
-- 设置备份缓冲区数量
UPDATE DATABASE CONFIGURATION FOR sample USING backup_bufcnt 10

-- 设置备份缓冲区大小
UPDATE DATABASE CONFIGURATION FOR sample USING backup_bufsz 65536

存储优化

  1. 使用高速存储设备存放备份文件
  2. 分散备份文件到多个存储设备
  3. 使用存储阵列的RAID技术提高I/O性能
  4. 确保备份设备与数据库服务器之间的网络带宽充足

空间优化

压缩备份

sql
-- 使用压缩备份
db2 BACKUP DATABASE sample ONLINE TO /db2/backup COMPRESS

-- 使用高级压缩算法
db2 BACKUP DATABASE sample ONLINE TO /db2/backup COMPRESS USE BLOCK COMPRESSION LEVEL 5

增量备份策略

sql
-- 执行增量备份
db2 BACKUP DATABASE sample ONLINE INCREMENTAL TO /db2/backup

-- 执行差异备份
db2 BACKUP DATABASE sample ONLINE DELTA TO /db2/backup

时间优化

  1. 选择合适的备份时间:在业务低峰期执行备份
  2. 优化日志文件大小:根据业务需求调整日志文件大小和数量
  3. 启用日志缓存:减少日志I/O操作
  4. 使用增量备份:减少备份数据量

在线备份监控

备份进度监控

sql
-- 监控备份进度
db2pd -db sample -backup

-- 监控备份期间的I/O性能
db2pd -db sample -tablespaces -io

-- 监控备份期间的日志活动
db2pd -db sample -logs

备份性能监控

sql
-- 监控备份期间的CPU使用
top -p $(pgrep -f db2sysc)

-- 监控备份期间的内存使用
db2pd -db sample -memory

-- 监控备份期间的磁盘I/O
iostat -x 1

备份状态验证

sql
-- 验证备份完整性
db2ckbkp /db2/backup/sample.0.db2inst1.DBPART000.20240112143000.001

-- 查看备份历史记录
db2 list history backup all for sample

-- 查看备份详细信息
db2 list history backup all for sample show detail

在线备份故障排除

常见备份错误及解决方法

  1. SQL2413N:数据库未处于归档日志模式

    • 启用归档日志模式
    • 重新执行在线备份
  2. SQL2419N:备份设备不可用或空间不足

    • 检查备份设备的可用性
    • 检查备份设备的剩余空间
    • 清理旧的备份文件
  3. SQL2426N:备份过程中发生I/O错误

    • 检查存储设备的健康状态
    • 检查存储设备的连接
    • 检查文件系统权限
  4. SQL2436N:备份过程中数据库状态发生变化

    • 检查数据库状态
    • 确保数据库在备份过程中保持稳定
    • 考虑使用表空间级备份
  5. SQL2440N:备份过程中日志归档失败

    • 检查归档日志路径的可用性
    • 检查归档日志路径的剩余空间
    • 检查日志归档配置

在线备份恢复

在线备份恢复流程

  1. 恢复完整备份:恢复最近的完整在线备份
  2. 恢复增量备份:恢复最近的增量在线备份
  3. 恢复差异备份:恢复最近的差异在线备份
  4. 前滚日志:应用所有事务日志到目标时间点
  5. 完成恢复:执行崩溃恢复,确保数据一致性

完整恢复示例

sql
-- 1. 恢复完整在线备份
db2 RESTORE DATABASE sample FROM /db2/backup TAKEN AT 20240112143000

-- 2. 恢复增量在线备份
db2 RESTORE DATABASE sample INCREMENTAL FROM /db2/backup TAKEN AT 20240112153000

-- 3. 恢复差异在线备份
db2 RESTORE DATABASE sample DELTA FROM /db2/backup TAKEN AT 20240112163000

-- 4. 前滚日志到最新时间点
db2 ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE

-- 5. 验证恢复结果
db2 connect to sample
db2 SELECT COUNT(*) FROM customers

时间点恢复示例

sql
-- 1. 恢复完整在线备份
db2 RESTORE DATABASE sample FROM /db2/backup TAKEN AT 20240112143000

-- 2. 前滚日志到指定时间点
db2 ROLLFORWARD DATABASE sample TO 2024-01-12-15.30.00.000000 USING LOCAL TIME AND COMPLETE

-- 3. 验证恢复结果
db2 connect to sample
db2 SELECT MAX(last_updated) FROM orders

版本差异

DB2 10.5 及之前版本

  • 在线备份功能相对简单
  • 并行备份选项有限
  • 压缩备份效率较低
  • 增量备份功能不够完善

DB2 11.1 版本

  • 增强了并行备份功能
  • 改进了压缩备份算法
  • 优化了增量备份效率
  • 增加了在线备份验证功能

DB2 11.5 版本

  • 引入了瞬时在线备份功能
  • 增强了在线备份监控
  • 改进了在线备份恢复速度
  • 增加了云存储支持
  • 优化了在线备份的资源使用

生产环境最佳实践

  1. 启用归档日志模式:在线备份必须启用归档日志模式
  2. 定期测试备份恢复:确保备份文件的可用性和可恢复性
  3. 监控备份过程:实时监控在线备份的进度和性能
  4. 优化备份策略:根据业务需求调整备份频率和保留策略
  5. 使用并行备份:提高在线备份的速度和效率
  6. 压缩备份文件:减少备份文件的存储空间
  7. 分散备份设备:将备份文件分散到多个存储设备,提高可用性
  8. 备份验证:每次备份后验证备份文件的完整性
  9. 文档化备份流程:详细记录在线备份的配置和操作流程
  10. 培训相关人员:确保DBA团队熟悉在线备份的操作和故障排除

常见问题(FAQ)

Q1: 在线备份会影响数据库性能吗?

A1: 在线备份会对数据库性能产生一定影响,主要体现在:

  • 增加CPU和内存消耗
  • 增加I/O操作
  • 可能导致锁等待

可以通过以下方式减少影响:

  • 在业务低峰期执行备份
  • 优化备份并行度和缓冲区设置
  • 使用压缩备份减少I/O
  • 考虑使用表空间级备份

Q2: 在线备份需要多长时间?

A2: 在线备份的时间取决于多个因素:

  • 数据库大小
  • 备份并行度设置
  • 存储设备性能
  • 数据库活动水平
  • 压缩设置

可以通过以下方式缩短备份时间:

  • 增加备份并行度
  • 使用更快的存储设备
  • 启用备份压缩
  • 优化数据库性能

Q3: 如何选择合适的在线备份类型?

A3: 选择在线备份类型应考虑以下因素:

  • 业务需求:数据重要性、恢复时间要求
  • 存储资源:可用存储空间大小
  • 备份时间:允许的备份窗口
  • 恢复需求:是否需要时间点恢复

Q4: 在线备份失败后如何处理?

A4: 在线备份失败后,可以采取以下措施:

  • 检查错误日志,确定失败原因
  • 解决失败原因(如空间不足、设备不可用等)
  • 重新执行在线备份
  • 考虑使用离线备份作为替代方案

Q5: 如何验证在线备份的完整性?

A5: 可以使用以下方法验证在线备份的完整性:

sql
-- 使用 db2ckbkp 工具验证备份完整性
db2ckbkp /db2/backup/sample.0.db2inst1.DBPART000.20240112143000.001

-- 执行测试恢复
db2 RESTORE DATABASE sample FROM /db2/backup TAKEN AT 20240112143000 INTO sample_test

Q6: 在线备份可以恢复到不同的数据库吗?

A6: 可以将在线备份恢复到不同的数据库:

sql
db2 RESTORE DATABASE sample FROM /db2/backup TAKEN AT 20240112143000 INTO sample_new

Q7: 如何监控在线备份的进度?

A7: 可以使用以下命令监控在线备份的进度:

sql
db2pd -db sample -backup
db2 list utilities show detail

Q8: 在线备份可以备份到云存储吗?

A8: 是的,DB2 11.5 及以上版本支持将在线备份直接备份到云存储:

sql
db2 BACKUP DATABASE sample ONLINE TO "S3://mybucket/backup" OPTIONS '(ENDPOINT "s3.amazonaws.com", ACCESS_KEY_ID "mykey", SECRET_ACCESS_KEY "mysecret")'

总结

DB2 在线备份是生产环境中常用的备份方式,能够在不中断数据库服务的情况下创建数据库备份,保证业务连续性。通过合理配置在线备份参数、优化备份策略、监控备份过程,可以提高在线备份的效率和可靠性。在线备份结合事务日志归档,还可以实现时间点恢复,进一步提高数据保护水平。在生产环境中,建议定期测试在线备份的恢复过程,确保备份文件的可用性和可恢复性,为数据库安全提供坚实保障。