SQL Server 差异备份
差异备份只记录自最近一次全量备份以来发生变化的页,因此体积小、速度快,适合在日常窗口里频繁执行。恢复时需要的链条是『最近一次全量 → 最近一次差异 → 其后的日志备份』。它的基准永远是最近一次全量,而不是上一次差异,这一点和许多人对『增量链』的直觉相反。
基本信息
| 适用平台 | SQL Server(含 Express 之外的主流版本,Express 无差异备份) |
|---|---|
| 基准 | 最近一次全量备份 |
| 恢复链 | 全量 → 最近一次差异 → 之后的所有日志(按需) |
| 全量重置 | 新的全量生成后,之前的差异备份全部作废 |
典型使用场景
- 每日差异加每周全量的常规节奏,压缩备份窗口
- 全量耗时太长的大库:用差异把日常备份成本压下来
- 短 RPO 要求:差异加日志备份把恢复点控制在分钟级
- 发布前后加做一次差异,回退时快速拿到变更后的状态
- 恢复准备时间优化:只需应用一份差异,不必回放多个增量
差异备份与恢复
差异备份与恢复
-- 差异备份,覆盖同名文件并压缩、校验
BACKUP DATABASE [AppDB]
TO DISK = N'D:\backup\AppDB-diff.bak'
WITH DIFFERENTIAL, INIT, COMPRESSION, CHECKSUM, STATS = 5;
-- 查看差异备份的基准信息
RESTORE HEADERONLY FROM DISK = N'D:\backup\AppDB-diff.bak';
-- 恢复顺序:先全量(NORECOVERY),再差异,再日志
RESTORE DATABASE [AppDB_restore] FROM DISK = N'D:\backup\AppDB-full.bak'
WITH NORECOVERY, REPLACE;
RESTORE DATABASE [AppDB_restore] FROM DISK = N'D:\backup\AppDB-diff.bak'
WITH NORECOVERY;备份类型对照
| 类型 | 基准 | 恢复链长度 |
|---|---|---|
| 全量 | 无 | 最短,单份即可 |
| 差异 | 最近一次全量 | 全量 + 最近差异 |
| 日志 | 上一次日志备份 | 全量 + 差异 + 连续日志,可实现时间点恢复 |
| 仅复制备份 | 不影响既有链条 | 用于外部工具或归档,避免打断日志链 |
差异体积随距上次全量的时间增长:全量周期与 RPO/RTO 不对齐时,差异会逐日变大、恢复时间也随之拉长。常见节奏是每日差异、每周全量。
执行新的全量会重置差异基准,导致此前所有差异备份失去价值;如需保留旧链条,考虑使用仅复制备份(COPY_ONLY),或在生成新全量前把旧链条完整归档。