DB2的备份体系并不像表面上只有全量备份和增量备份两类。在 DB2 9.7 之后的版本中,BACKUP DATABASE 命令支持 FULL、INCREMENTAL、INCREMENTAL DELTA 三种备份级别。很多人会把 INCREMENTAL 当成通用的增量备份,把 INCREMENTAL DELTA 当成差异备份,但实际语义正好相反:INCREMENTAL 累积自上一次全量备份以来的所有修改页,行为更接近传统意义上的差异备份;INCREMENTAL DELTA 只记录自上一次任意备份以来的修改页,属于真正意义上的增量备份。理解这一层命名差异,是实现可靠备份策略的第一步。

一、先厘清DB2备份级别与TRACKMOD机制
DB2判断哪些数据页发生过修改,依赖跟踪修改功能 TRACKMOD。启用 TRACKMOD 后,数据库会维护已修改页的位图信息,每次备份时根据位图决定需要复制哪些页面。如果没有启用 TRACKMOD,增量备份命令会直接失败,或者系统会退化为全量备份,导致备份文件体积异常增大。因此在实施任何增量或差异备份之前,必须执行以下配置:
UPDATE DATABASE CONFIGURATION FOR sample USING TRACKMOD ON;
配置完成后,需要先做一次全量备份作为基线。全量备份可以使用如下命令,将备份文件输出到指定目录:
BACKUP DATABASE sample TO C:\DB2BACKUP\FULL;
这条命令会在 C:\DB2BACKUP\FULL 目录下生成一个时间戳命名的备份镜像。Windows 路径中的反斜杠必须保留,否则 DB2 会无法识别目录层级。全量备份完成后,后续的差异备份或增量备份才能基于这个基线计算变化页。
二、差异备份与增量备份的具体实现命令
差异备份在 DB2 中使用 INCREMENTAL 参数实现。它并不检查上一次备份是差异还是增量,而是始终追溯到最近一次 FULL 备份,将所有自那以后修改过的数据页打包写入备份镜像。例如在每天凌晨执行全量备份,白天每隔几小时执行一次差异备份,命令如下:
BACKUP DATABASE sample INCREMENTAL TO C:\DB2BACKUP\DIFF;
如果白天生成了多个差异备份,那么第二个差异备份会包含第一个差异备份之后产生的修改页,同时也会重新包含第一个差异备份已经备份过的修改页,除非这些页在第二次差异备份前没有再次改变。也就是说差异备份会重复读取并存储自全量以来所有变更页面,因此体积会随着与全量备份的时间间隔增加而逐渐变大。
增量备份在 DB2 中对应 INCREMENTAL DELTA 参数。它只备份自上次任意备份以来发生变化的页面,上次备份可以是 FULL、INCREMENTAL 或 INCREMENTAL DELTA 中的任意一种。比如每天凌晨全量,上午十点差异,之后每小时执行增量,命令如下:
BACKUP DATABASE sample INCREMENTAL DELTA TO C:\DB2BACKUP\DELTA;
这种备份的体积通常最小,执行速度也最快,但恢复时需要按备份时间顺序应用所有中间的 DELTA 镜像。如果某一个中间增量备份损坏或丢失,后续增量备份就无法完整恢复,这是增量备份最明显的短板。
三、恢复流程:差异备份与增量备份的关键差别
恢复差异备份时,只需要最近一次全量备份和最近一次差异备份。假设全量备份时间戳为 20240101020000,最近差异备份时间戳为 20240101140000,恢复命令如下:
RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\FULL TAKEN AT 20240101020000; RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\DIFF TAKEN AT 20240101140000;
执行后数据库会回到差异备份时刻的状态。如果还需要恢复到某个更精确的事务时间点,可以继续使用归档日志执行 ROLLFORWARD 操作。这个恢复过程不需要读取上午十点的第一个差异备份,因为第二个差异备份已经包含了第一个差异备份所覆盖的页变更。
恢复增量备份时,情况完全不同。假设全量之后产生三个 DELTA 镜像,那么必须按照时间戳先后顺序逐个恢复,任何一个都不能跳过。命令大致如下:
RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\FULL TAKEN AT 20240101020000; RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\DELTA TAKEN AT 20240101040000; RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\DELTA TAKEN AT 20240101060000; RESTORE DATABASE sample INCREMENTAL FROM C:\DB2BACKUP\DELTA TAKEN AT 20240101080000;
从恢复命令可以直观看出:差异备份恢复步骤少,但备份文件可能较大;增量备份日常开销小,但恢复步骤多、链条脆弱。生产环境中通常会结合两种方式,在可接受的备份窗口内尽量减少全量频率,同时控制恢复复杂度。
四、策略选择与避坑建议
选择差异备份还是增量备份,不能只看备份文件大小。如果数据库变更非常集中,例如每天只有一次批量写入,差异备份在一天内的多个时间点都会重复备份同一批修改页,此时使用增量 DELTA 可以显著减少空间占用。如果数据库业务持续产生随机写入,差异备份的体积会快速增长,增量备份则更有优势。
最重要的避坑点是备份链管理。差异备份虽然恢复简单,但任何一次差异备份都依赖原始全量备份,全量备份一旦被清理,所有差异备份立即失效。增量备份则要求保留完整的全量加所有中间 DELTA 文件。很多管理员为了节省磁盘空间删除了较早的 DELTA,等到恢复时才发现链条断裂,这是非常常见的运维事故。
另一个常见问题是 TRACKMOD 配置未生效。部分数据库在迁移或克隆后,TRACKMOD 仍处于 OFF 状态,导致增量命令执行缓慢或生成异常大的文件。建议定期通过 GET DATABASE CONFIGURATION FOR sample 检查 TRACKMOD 的值,并至少每季度做一次恢复演练,验证备份链的完整性和恢复时限是否满足业务要求。
总之,DB2 的 INCREMENTAL 更适合当作差异备份使用,恢复链短但备份体积会随间隔增长;INCREMENTAL DELTA 更适合频繁备份的场景,体积小、备份快,但恢复依赖完整链条。合理组合全量、差异和增量备份,并保留必要的归档日志,才能在数据安全和运维成本之间取得平衡。