4. 完整备份实战
完整备份是 SQL Server 备份体系的基石。它把数据库在某个时间点上的全部已用数据页、事务日志中足以保证恢复一致性的部分,以及数据库的元数据(文件布局、文件组、恢复模式等)一并写入备份设备。理解它的机制,才能判断“备份成功”是否等于“可恢复”。
一、完整备份的机制
执行 BACKUP DATABASE 时,SQL Server 并不是简单地把 .mdf 文件复制一份。它启动一个备份线程,按区(Extent,8 个连续 8KB 页)为单位扫描数据文件,只读取已分配且包含数据的页,跳过未分配空间,因此备份文件通常小于数据文件本身。同时,备份过程会记录备份开始时的日志序列号(LSN)和检查点信息,并在备份期间持续捕获日志,使备份内部保持事务一致性——即使备份过程中有事务提交,备份里也不会出现“半个事务”。
完整备份的恢复基准是“备份完成时刻”的数据库状态。它不依赖之前的任何备份,但恢复后只能还原到该备份完成点;若要恢复到更晚的时间点,必须叠加后续的差异备份和事务日志备份。因此完整备份的频率决定了恢复点目标(RPO)的下限。
二、备份文件结构
一个备份文件(.bak)内部由若干“备份集(Backup Set)”组成,每个备份集对应一次备份操作。每个备份集包含:备份头(记录数据库名、备份类型、LSN 范围、备份时间、SQL Server 版本、压缩与加密标志)、文件列表(数据文件与日志文件的逻辑名、物理路径、大小)、以及实际的数据页流。使用 RESTORE HEADERONLY 可查看备份集头部,RESTORE FILELISTONLY 可查看文件清单,RESTORE VERIFYONLY 可校验备份集完整性而不实际恢复。
RESTORE HEADERONLY FROM DISK = 'D:\Backup\SalesDB_Full.bak';
RESTORE FILELISTONLY FROM DISK = 'D:\Backup\SalesDB_Full.bak';
RESTORE VERIFYONLY FROM DISK = 'D:\Backup\SalesDB_Full.bak';
备份设备可以是磁盘文件、多个镜像文件(MIRROR TO)、磁带或 URL(Azure Blob)。多个备份集可以追加到同一文件,但追加会让文件持续增大,恢复时需用 FILE = n 指定备份集序号,管理上不如“一次备份一个文件”清晰。
三、压缩与加密选项
SQL Server 2008 起支持备份压缩(WITH COMPRESSION),2014 起支持备份加密(WITH ENCRYPTION)。压缩通过减少 I/O 和存储显著提升备份效率,但会增加 CPU 开销;加密则保护备份文件在落盘和传输中的机密性,需要数据库主密钥(DMK)和证书保护。
| 选项 | 作用 | 代价 | 典型场景 |
|---|---|---|---|
| COMPRESSION | 减小备份体积,降低 I/O | CPU 占用上升 | 大库、网络备份、存储紧张 |
| ENCRYPTION | 备份文件加密,防泄露 | 需 DMK+证书,CPU 略增 | 合规、异地传输、云存储 |
| CHECKSUM | 校验页完整性,发现损坏 | 轻微 CPU | 所有生产备份建议开启 |
| STATS = 10 | 每 10% 输出进度 | 无 | 长时备份可观测 |
压缩与加密可同时使用。加密备份必须保留对应的证书与私钥,否则无法恢复——这是灾备中最容易被忽略的单点。
四、使用 T-SQL 执行完整备份
下面示例对 SalesDB 执行一次带压缩、校验和进度输出的完整备份,并写入固定文件:
BACKUP DATABASE SalesDB
TO DISK = 'D:\Backup\SalesDB_Full_20250601.bak'
WITH
INIT, -- 覆盖同名备份集,不追加
COMPRESSION, -- 启用备份压缩
CHECKSUM, -- 写入校验和
STATS = 10, -- 每 10% 报告进度
NAME = 'SalesDB Full Backup',
DESCRIPTION = 'Weekly full backup for SalesDB';
GO
执行后应关注三件事:消息窗口是否出现 “BACKUP DATABASE successfully processed ... pages”,备份文件大小是否合理,以及用 RESTORE VERIFYONLY 验证是否通过。若开启加密,还需确认证书可用。
五、使用 SSMS 执行完整备份
在 SSMS 中右键数据库 → 任务 → 备份,打开备份对话框。关键设置:备份类型选“完整”;目标选择“磁盘”并指定路径;在“选项”页勾选“压缩备份”“备份校验和”,可设置“备份集过期时间”和“覆盖/追加”。点击“脚本”按钮可把图形操作反转为 T-SQL,便于纳入作业。SSMS 适合一次性操作和教学演示,生产环境更推荐用 T-SQL 脚本配合 SQL Server 代理作业定时执行。
六、关键参数与判断依据
执行完整备份时,几个参数直接影响可恢复性与运维成本:INIT 与 NOINIT 决定覆盖还是追加;COMPRESSION 影响体积与 CPU;CHECKSUM 让备份可检测页损坏;COPY_ONLY 用于不影响差异备份基准的临时备份;MIRROR TO 可同时写多份副本。判断一次完整备份是否合格,至少看三点:备份消息无错误、RESTORE VERIFYONLY 通过、备份文件大小与数据库已用空间量级相符。若启用了加密,还必须确认证书与私钥已备份,否则备份文件在灾难场景下等同于不可用。