外观
DB2 备份恢复命令
备份恢复命令概述
DB2提供了丰富的备份和恢复命令,用于保护数据库数据安全和实现灾难恢复。这些命令支持多种备份类型(全量、增量、差异、在线等)和恢复方式,能够满足不同场景下的备份恢复需求。
备份命令详解
1. 全量备份
全量备份是指备份整个数据库的所有数据,是最基础的备份类型。
离线全量备份
bash
# 基本语法
db2 backup database `<database_name>` to `<backup_path>`
# 示例:备份数据库sample到本地目录
db2 backup database sample to /db2backup
# 示例:备份到多个设备,提高备份速度
db2 backup database sample to /db2backup1,/db2backup2
# 示例:使用压缩备份
db2 backup database sample to /db2backup compress
# 示例:指定备份映像名称
db2 backup database sample to /db2backup filename sample_full_$(date +%Y%m%d_%H%M%S).001在线全量备份
在线备份允许在数据库运行时进行备份,不影响数据库的正常使用。
bash
# 基本语法
db2 backup database `<database_name>` online to `<backup_path>`
# 示例:在线备份数据库sample
db2 backup database sample online to /db2backup
# 示例:在线备份并包含日志
db2 backup database sample online to /db2backup include logs
# 示例:在线备份并指定并行度
db2 backup database sample online to /db2backup parallelism 4
# 示例:在线备份并使用压缩
db2 backup database sample online to /db2backup compress include logs2. 增量备份
增量备份只备份自上次全量备份或增量备份以来发生变化的数据,能够减少备份时间和存储空间。
bash
# 基本语法
db2 backup database `<database_name>` incremental to `<backup_path>`
# 示例:离线增量备份
db2 backup database sample incremental to /db2backup
# 示例:在线增量备份
db2 backup database sample online incremental to /db2backup include logs
# 示例:在线增量备份并指定并行度
db2 backup database sample online incremental to /db2backup parallelism 2 include logs3. 差异备份
差异备份只备份自上次全量备份以来发生变化的数据,与增量备份相比,恢复时只需要全量备份和最后一次差异备份。
bash
# 基本语法
db2 backup database `<database_name>` delta to `<backup_path>`
# 示例:离线差异备份
db2 backup database sample delta to /db2backup
# 示例:在线差异备份
db2 backup database sample online delta to /db2backup include logs4. 表空间备份
表空间备份允许只备份特定的表空间,适用于大型数据库或只需要备份部分数据的场景。
离线表空间备份
bash
# 基本语法
db2 backup database `<database_name>` tablespace (`<tablespace_name1>`,`<tablespace_name2>`) to `<backup_path>`
# 示例:备份用户表空间USERSPACE1
db2 backup database sample tablespace (USERSPACE1) to /db2backup
# 示例:备份多个表空间
db2 backup database sample tablespace (USERSPACE1, SYSTOOLSPACE) to /db2backup在线表空间备份
bash
# 基本语法
db2 backup database `<database_name>` tablespace (`<tablespace_name>`) online to `<backup_path>`
# 示例:在线备份表空间USERSPACE1
db2 backup database sample tablespace (USERSPACE1) online to /db2backup
# 示例:在线备份表空间并包含日志
db2 backup database sample tablespace (USERSPACE1) online to /db2backup include logs5. 日志备份
日志备份是指备份数据库的事务日志,用于前滚恢复到特定时间点。
bash
# 基本语法
db2 archive log for database `<database_name>`
# 示例:手动归档日志
db2 archive log for database sample
# 示例:使用日志归档命令并指定日志目标
db2 archive log for database sample to /db2archlog恢复命令详解
1. 数据库恢复
数据库恢复是指将数据库从备份映像中恢复到指定状态。
离线恢复
bash
# 基本语法
db2 restore database `<database_name>` from `<backup_path>` taken at `<timestamp>`
# 示例:恢复全量备份
db2 restore database sample from /db2backup taken at 20231015143045
# 示例:恢复到新的数据库名称
db2 restore database sample from /db2backup taken at 20231015143045 into sample_new
# 示例:恢复到不同路径
db2 restore database sample from /db2backup taken at 20231015143045 newlogpath /db2newlog
# 示例:使用重定向恢复
db2 restore database sample from /db2backup taken at 20231015143045 redirect
# 然后修改容器路径
# 最后完成恢复
db2 restore database sample continue在线恢复
在线恢复允许在数据库运行时恢复表空间或日志。
bash
# 基本语法
db2 restore database `<database_name>` tablespace (`<tablespace_name>`) online from `<backup_path>` taken at `<timestamp>`
# 示例:在线恢复表空间
db2 restore database sample tablespace (USERSPACE1) online from /db2backup taken at 202310151430452. 前滚恢复
前滚恢复是指将数据库恢复到备份后的某个时间点或日志序列,能够恢复备份后的数据变化。
bash
# 基本语法
db2 rollforward database `<database_name>` to `<point_in_time>` using local time
# 示例:前滚到指定时间点
db2 rollforward database sample to 2023-10-15-14.30.45.000000 using local time
# 示例:前滚到最后一个日志
db2 rollforward database sample to end of logs
# 示例:前滚表空间
db2 rollforward database sample to end of logs tablespace (USERSPACE1)
# 示例:前滚并停止数据库
db2 rollforward database sample to end of logs and stop
# 示例:前滚到指定日志序列
db2 rollforward database sample to logseq 123456 and stop3. 恢复到特定时间点
恢复到特定时间点是指将数据库恢复到备份后的某个具体时间,需要结合全量备份和前滚恢复。
bash
# 步骤1:恢复全量备份
db2 restore database sample from /db2backup taken at 20231015143045
# 步骤2:前滚到指定时间点
db2 rollforward database sample to 2023-10-15-15.30.00.000000 using local time and stop备份恢复辅助命令
1. 备份验证
备份验证用于检查备份映像的完整性和可用性。
bash
# 基本语法
db2ckbkp `<backup_image_path>`
# 示例:验证备份映像
db2ckbkp /db2backup/SAMPLE.0.db2inst1.DBPART000.20231015143045.001
# 示例:详细验证
db2ckbkp -v /db2backup/SAMPLE.0.db2inst1.DBPART000.20231015143045.001
# 示例:验证并显示备份内容
db2ckbkp -h /db2backup/SAMPLE.0.db2inst1.DBPART000.20231015143045.0012. 备份列表查看
查看数据库的备份历史记录。
bash
# 基本语法
db2 list history backup all for `<database_name>`
# 示例:查看数据库sample的所有备份历史
db2 list history backup all for sample
# 示例:查看特定类型的备份历史
db2 list history backup online all for sample
# 示例:查看最近的备份历史
db2 list history backup all for sample | head -203. 恢复状态查询
查询数据库的恢复状态。
bash
# 基本语法
db2 get snapshot for database on `<database_name>`
# 示例:查看数据库恢复状态
db2 get snapshot for database on sample | grep -i "rollforward pending"
# 示例:使用db2pd查看恢复状态
db2pd -d sample -recovery4. 取消恢复
取消正在进行的恢复操作。
bash
# 基本语法
db2 restore database `<database_name>` abort
# 示例:取消数据库恢复
db2 restore database sample abort常用选项和参数
备份命令常用选项
| 选项 | 描述 |
|---|---|
| online | 在线备份,数据库保持可用 |
| incremental | 增量备份,只备份变化的数据 |
| delta | 差异备份,只备份自上次全量备份以来变化的数据 |
| compress | 压缩备份映像,减少存储空间 |
| include logs | 包含事务日志,用于前滚恢复 |
parallelism <n> | 使用n个并行进程进行备份 |
filename <name> | 指定备份映像文件名 |
to <path> | 指定备份目标路径 |
taken at <timestamp> | 指定备份时间戳 |
恢复命令常用选项
| 选项 | 描述 |
|---|---|
from <path> | 指定备份映像来源路径 |
taken at <timestamp> | 指定要恢复的备份时间戳 |
into <database_name> | 恢复到新的数据库名称 |
| redirect | 重定向恢复,允许修改容器路径 |
newlogpath <path> | 指定新的日志路径 |
newtbspacepath <path> | 指定新的表空间路径 |
| continue | 继续重定向恢复 |
| abort | 取消恢复操作 |
前滚命令常用选项
| 选项 | 描述 |
|---|---|
to <point_in_time> | 前滚到指定时间点 |
| to end of logs | 前滚到最后一个日志 |
to logseq <n> | 前滚到指定日志序列 |
| using local time | 使用本地时间格式 |
| and stop | 前滚后停止数据库 |
tablespace <tablespace_name> | 只前滚指定表空间 |
备份恢复策略示例
1. 日常备份策略
| 备份类型 | 频率 | 保留期限 |
|---|---|---|
| 全量备份 | 每周日 | 4周 |
| 增量备份 | 周一至周六 | 2周 |
| 日志备份 | 每小时 | 1个月 |
2. 备份恢复示例流程
场景:数据库崩溃,需要恢复到最新状态
bash
# 步骤1:查看最近的全量备份
db2 list history backup all for sample | head -30
# 步骤2:恢复最近的全量备份
db2 restore database sample from /db2backup taken at 20231015143045
# 步骤3:前滚到最后一个日志
db2 rollforward database sample to end of logs and stop
# 步骤4:验证数据库状态
db2 connect to sample
db2 list tablespaces show detail场景:误删除表数据,需要恢复到删除前的时间点
bash
# 步骤1:确定删除时间点(假设为2023-10-15 15:30:00)
# 步骤2:恢复最近的全量备份
db2 restore database sample from /db2backup taken at 20231015143045
# 步骤3:前滚到删除前的时间点
db2 rollforward database sample to 2023-10-15-15.29.59.000000 using local time and stop
# 步骤4:验证数据是否恢复
db2 connect to sample
db2 select count(*) from deleted_table版本差异
DB2 10.5及之前版本
- 支持基本的备份恢复命令
- 压缩备份选项有限
- 并行度设置范围较小
- 不支持部分表恢复
DB2 11.1版本
- 增强了压缩备份功能
- 支持更高的并行度
- 改进了备份恢复性能
- 支持表级恢复
DB2 11.5版本
- 引入了快照备份功能
- 支持增量备份的增量合并
- 增强了备份加密功能
- 支持云存储备份恢复
- 改进了备份恢复的易用性
生产实践
1. 自动化备份脚本示例
bash
#!/bin/bash
# DB2自动备份脚本
DB_NAME="sample"
BACKUP_PATH="/db2backup"
LOG_PATH="/db2backup/logs"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="${LOG_PATH}/backup_${DB_NAME}_${DATE}.log"
# 创建日志目录
mkdir -p ${LOG_PATH}
# 记录开始时间
echo "===== DB2 Backup Started at $(date) =====
## 常见问题(FAQ)
### Q1: 如何选择合适的备份类型?
A1: 选择备份类型需要考虑以下因素:
- **备份窗口**:全量备份所需时间较长,增量和差异备份时间较短
- **恢复时间目标(RTO)**:全量备份恢复时间短,增量和差异备份恢复时间长
- **存储成本**:全量备份存储空间需求大,增量和差异备份存储空间需求小
- **业务需求**:根据业务对可用性和数据完整性的要求选择
建议结合使用不同类型的备份,如每周执行一次全量备份,每天执行一次增量或差异备份。
### Q2: 备份命令执行失败怎么办?
A2: 备份命令执行失败时,应:
1. 查看命令输出的错误信息
2. 检查db2diag.log获取详细错误日志
3. 根据错误信息分析原因(如权限问题、存储空间不足、I/O错误等)
4. 采取相应的解决措施(如释放存储空间、修复I/O问题、调整备份参数等)
5. 重新执行备份命令
### Q3: 如何验证备份是否成功?
A3: 可以通过以下方式验证备份是否成功:
- 检查备份命令的返回码是否为0
- 检查备份目录中是否生成了备份文件
- 使用db2ckbkp命令验证备份文件的完整性:`db2ckbkp backup_file`
- 定期执行恢复测试,验证备份可以正常恢复
### Q4: 如何优化备份性能?
A4: 可以通过以下方式优化备份性能:
- 使用并行备份:通过增加PARALLELISM参数值提高备份并行度
- 使用压缩备份:通过添加COMPRESS参数减少备份数据量
- 优化存储I/O:使用高性能存储设备,如SSD
- 选择合适的备份窗口:在系统负载较低时执行备份
- 调整备份缓冲区大小:通过DB2 registry变量DB2_BACKUP_BUFFER设置合适的缓冲区大小
### Q5: 如何确保备份数据的安全性?
A5: 确保备份数据安全性的措施包括:
- 使用加密备份:通过添加ENCRYPT参数加密备份数据
- 存储备份到安全位置:将备份存储到安全的存储设备,限制访问权限
- 定期测试备份恢复:确保备份可以正常恢复
- 实施备份保留策略:定期清理过期备份,同时确保保留足够的备份历史
- 考虑异地备份:将备份复制到异地存储,防止本地灾难导致备份丢失
### Q6: 恢复命令执行失败怎么办?
A6: 恢复命令执行失败时,应:
1. 查看命令输出的错误信息
2. 检查db2diag.log获取详细错误日志
3. 根据错误信息分析原因(如备份损坏、日志缺失、权限问题等)
4. 采取相应的解决措施(如使用备用备份、修复权限、补充缺失的日志等)
5. 重新执行恢复命令
### Q7: 如何缩短恢复时间?
A7: 可以通过以下方式缩短恢复时间:
- 使用并行恢复:通过增加PARALLELISM参数值提高恢复并行度
- 使用压缩备份:减少备份数据量,提高恢复速度
- 优化存储I/O:使用高性能存储设备
- 合理规划备份策略:减少需要恢复的备份数量
- 考虑使用快照恢复:DB2 11.5+支持快照恢复,可以显著缩短恢复时间
### Q8: 如何恢复到特定时间点?
A8: 恢复到特定时间点需要使用不完全恢复,步骤如下:
1. 恢复最近的全量备份
2. 前滚到特定时间点,使用UNTIL TIME参数
3. 数据库将处于滚后暂挂状态,需要执行ROLLFORWARD DATABASE ... COMPLETE结束恢复
示例命令:
```bash
db2 restore database sample from /db2backup taken at 20231015143045
db2 rollforward database sample to 2023-10-15-16.30.00.000000 using local time and stop
db2 rollforward database sample completeQ9: 如何恢复单个表?
A9: DB2 11.1+支持表级恢复,步骤如下:
- 确保数据库处于归档日志模式
- 执行表级恢复命令,指定要恢复的表
- 验证恢复结果
示例命令:
bash
db2 restore database sample tables (schema.table1, schema.table2) from /db2backup taken at 20231015143045
db2 rollforward database sample to end of logs tables (schema.table1, schema.table2) and stopQ10: 如何从云存储恢复数据库?
A10: DB2 11.5+支持从云存储恢复数据库,步骤如下:
- 配置云存储访问凭证
- 使用RESTORE命令从云存储恢复,指定云存储URL
- 前滚数据库到最新状态
示例命令:
bash
db2 restore database sample from "S3::us-east-1::my-bucket::/db2backup" taken at 20231015143045
db2 rollforward database sample to end of logs and stop