DB2作为企业级关系型数据库,其日志机制、备份归档策略和恢复能力是保障数据安全的核心模块,不同的配置适配不同的业务场景,下面我们逐一解析相关知识点。

DB2支持的日志模式
DB2默认提供两种日志模式,分别是循环日志模式和归档日志模式,两种模式的特性差异较大,需要根据业务对数据恢复的要求选择。
循环日志模式
循环日志是DB2的默认日志模式,日志文件会循环使用,当日志文件写满后会覆盖之前的日志内容,不需要手动管理日志文件。
- 优点:配置简单,不需要额外管理归档日志,适合对数据恢复要求不高的测试环境或非核心业务
- 缺点:只支持崩溃恢复和版本恢复,无法做时间点恢复,一旦数据库出现故障,只能恢复到最近一次全量备份的时间点,备份之后的数据会丢失
归档日志模式
归档日志模式下,日志文件写满后不会被覆盖,而是会被复制到指定的归档目录中保存,数据库会持续生成新的日志文件。
- 优点:支持全量恢复、增量恢复和时间点恢复,能够最大程度保证数据不丢失,适合核心生产业务
- 缺点:需要手动配置归档目录,定期清理过期的归档日志,避免占用过多磁盘空间
DB2备份与归档配置
日志模式切换与归档配置
如果需要使用归档日志模式,需要先修改数据库配置,下面是切换到归档模式并配置归档目录的操作示例,假设数据库名为SAMPLE:
-- 连接到目标数据库 CONNECT TO SAMPLE; -- 关闭数据库,修改配置需要数据库处于未连接状态 CONNECT RESET; -- 修改日志模式为归档日志,指定归档目录为/home/db2inst1/archivelog UPDATE DB CFG FOR SAMPLE USING LOGARCHMETH1 'DISK:/home/db2inst1/archivelog'; -- 重新连接数据库,激活归档模式 CONNECT TO SAMPLE; -- 做一次全量离线备份,激活归档模式后必须做一次全量备份才能正常使用 BACKUP DB SAMPLE TO '/home/db2inst1/backup' WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;
备份类型与操作
DB2支持三种备份类型,分别是全量备份、增量备份和 delta 增量备份,不同备份类型的适用场景不同:
| 备份类型 | 说明 | 适用场景 |
|---|---|---|
| 全量备份 | 备份数据库的所有数据页,备份文件最大,恢复时只需要全量备份文件即可 | 定期全量备份,作为恢复的基础 |
| 增量备份 | 备份自上次全量备份之后修改过的数据页,备份文件比全量小 | 两次全量备份之间的增量备份,减少备份时间和存储空间 |
| delta增量备份 | 备份自上次任意类型备份之后修改过的数据页,备份文件最小 | 频繁备份场景,进一步减少备份开销 |
下面是增量备份的操作示例:
-- 做增量备份,指定备份路径 BACKUP DB SAMPLE INCREMENTAL TO '/home/db2inst1/backup' WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;
DB2恢复流程解析
DB2的恢复流程根据备份类型和日志情况有所不同,下面介绍三种常见的恢复场景。
全量恢复
如果只需要恢复到最近一次全量备份的时间点,直接使用全量备份文件恢复即可,操作示例如下:
-- 恢复全量备份,指定备份文件路径 RESTORE DB SAMPLE FROM '/home/db2inst1/backup' TAKEN AT 20240512103000 WITHOUT PROMPTING; -- 恢复完成后需要回滚未提交的事务,使数据库处于一致状态 ROLLFORWARD DB SAMPLE TO END OF LOGS AND STOP;
时间点恢复
如果开启了归档日志模式,可以恢复到指定的时间点,减少数据丢失,操作示例如下:
-- 先恢复最新的全量备份 RESTORE DB SAMPLE FROM '/home/db2inst1/backup' TAKEN AT 20240512103000 WITHOUT PROMPTING; -- 前滚到指定时间点,比如恢复到2024年5月12日11点30分 ROLLFORWARD DB SAMPLE TO 2024-05-12-11.30.00 USING LOCAL TIME AND STOP;
增量恢复
如果有增量备份,恢复时需要先恢复全量备份,再按顺序恢复增量备份,最后前滚日志,操作示例如下:
-- 恢复全量备份 RESTORE DB SAMPLE FROM '/home/db2inst1/backup' TAKEN AT 20240512103000 WITHOUT PROMPTING; -- 恢复增量备份,按顺序执行 RESTORE DB SAMPLE INCREMENTAL FROM '/home/db2inst1/backup' TAKEN AT 20240512113000 WITHOUT PROMPTING; -- 前滚到最新日志,完成恢复 ROLLFORWARD DB SAMPLE TO END OF LOGS AND STOP;
注意事项
在实际使用中需要注意以下几点:
- 归档日志目录需要保证有足够的磁盘空间,建议定期清理过期的归档日志,避免磁盘满导致数据库故障
- 恢复操作前建议先备份当前数据库状态,避免恢复失败导致数据无法找回
- 如果数据库开启了归档模式,一定要保证归档日志的完整,缺失归档日志会导致时间点恢复失败
- 测试环境的恢复操作建议先在备份环境验证,确认流程无误后再在生产环境执行