sql server全量加增量备份恢复演练需确保备份链完整、日志截断合理、还原顺序严格正确:先全备(with format/checksum/verifyonly),再差备(依赖最近全备或更早差备),最后按序还原(全量→增量→日志,均norecovery除最后一个日志用recovery),并验证权限、路径、模式及dbcc checkdb。

SQL Server 的全量加增量备份恢复演练,核心在于确保备份链完整、日志截断合理、还原顺序严格正确。只要步骤清晰、验证到位,整个流程并不复杂,但细节容易出错。
一、全量备份:恢复起点必须可靠
全量备份是所有后续增量备份的基础,必须在数据库处于可读写状态且无长事务阻塞时执行。建议使用 WITH FORMAT 覆盖旧备份集,并加上描述和校验:
- BACKUP DATABASE [YourDB] TO DISK = 'D:\Backup\Full_20240520.bak' WITH FORMAT, INIT, CHECKSUM, DESCRIPTION = 'Weekly full backup';
- 备份后立即运行 RESTORE VERIFYONLY FROM DISK = 'D:\Backup\Full_20240520.bak'; 验证文件可读性
- 记录备份完成时间(SELECT backup_finish_date FROM msdb.dbo.backupset WHERE database_name = 'YourDB' ORDER BY backup_finish_date DESC),这是后续增量备份的时间锚点
二、增量备份:只捕获自上次全量/增量以来的变化
增量备份依赖于数据库的恢复模式(必须为 FULL 或 BULK_LOGGED),且不会截断事务日志——这点和日志备份不同。它仅基于上一次 全量或增量备份(取更早者)以来的数据页变化:
- BACKUP DATABASE [YourDB] TO DISK = 'D:\Backup\Diff_20240521.bak' WITH DIFFERENTIAL, CHECKSUM;
- 一个典型周期:周日全备 → 周一至周六每天一次差异备份(非日志备份)
- 注意:不能跨全备链使用差异备份。例如,周二的差异备份只能用于还原在周一全备基础上构建的数据库,不能用于周三新做的全备
三、恢复演练:按“全量→增量→日志”严格顺序还原
若仅用全量+增量(无日志备份),恢复目标是最近一次增量备份完成时的状态;若还需恢复到故障前秒级,必须加入事务日志备份。标准还原流程如下:
- 先还原全量备份,使用 WITH NORECOVERY 保持数据库在还原状态:
RESTORE DATABASE [YourDB] FROM DISK = 'D:\Backup\Full_20240520.bak' WITH NORECOVERY, REPLACE; - 再还原最新的一次差异备份(同样 NORECOVERY):
RESTORE DATABASE [YourDB] FROM DISK = 'D:\Backup\Diff_20240521.bak' WITH NORECOVERY; - 如有日志备份,按时间顺序逐个还原(最后一个可用日志用 WITH RECOVERY 完成):
RESTORE LOG [YourDB] FROM DISK = 'D:\Backup\Log_20240521_1430.trn' WITH NORECOVERY;
RESTORE LOG [YourDB] FROM DISK = 'D:\Backup\Log_20240521_1500.trn' WITH RECOVERY; - 还原完成后,务必运行 DBCC CHECKDB([YourDB]) 确认数据一致性
四、关键检查项:避免“备份了却不能恢复”
很多团队备份正常,但演练失败,常因以下疏漏:
- 未确认备份设备路径在恢复服务器上真实存在且 SQL Server 服务账户有读取权限
- 差异备份依赖的全备已被删除或覆盖(msdb.dbo.backupset 中查 chain_start_date 是否匹配)
- 误将 DIFFERENTIAL 备份当成 LOG 备份去还原
- 未在还原前设置数据库为 SINGLE_USER 模式(尤其替换生产库时),导致还原被用户连接阻塞
- 未在测试环境验证还原后的应用连接、作业、登录映射是否正常










