观察结果
BACKUP
要在(Transact-SQL) 语句中启用备份校验和,请指定该WITH CHECKSUM
选项。要禁用备份校验和,请指定该WITH NO_CHECKSUM
选项。这是默认行为,压缩备份除外。
换句话说,启用压缩即可启用校验和。
然而,在我的维护计划中(不幸的是,它们是 GUI 计划,而不是 Ola 的酷计划),我可以看到:
- 主菜单中的“备份压缩(开启)”
- 在备份数据库任务的属性菜单中,“BackupCompressionOption”设置为“On”,“Checksum”设置为“False”。
- 在修改菜单中勾选“验证备份完整性”,选择“压缩备份”,并取消勾选“执行校验和”。
问题
这是否意味着即使我明确要求备份压缩,校验和仍被禁用?或者如果启用了压缩,校验和的复选框/属性是否是多余的?
我尝试过的方法
- 每次尝试“查看 T-SQL”都会导致 SSMS 崩溃。
- 尽管我已在每个数据库上启用了它(我搜索
sys.query_store_query_text
了like '%backup database%'
),但在查询存储中查找 T-SQL 失败。 msdb.dbo.backupset
0
在其所有列中都有has_backup_checksums
,但我不知道压缩是否会使该列变得无用。
我认为,当您结合使用 CHECKSUM 和 COMPRESSION 时会发生以下情况:
COMPRESSION 增加了另一层校验和处理,独立于备份命令的校验和。在我看来,文档在这方面含糊不清,应该澄清这些事情是如何联系在一起的。
我尝试了三种不同的备份命令:
我检查了备份头是否具有校验和(RESTORE HEADERONLY)。只有使用 CHECKSUM 选项的备份头的该列为 1。
我尝试了以下命令:
以上对于使用 CHECKSUM 进行的备份没有问题,但对于其他两个备份,则失败并显示以下错误消息:
以上向我表明,获取备份命令的校验和处理的唯一方法是指定 CHECKSUM 选项(或使用 sp_configure 将其默认)。
此外,我还破解了该文件,用十六进制编辑器更改了一些随机数据。对于所有三个备份命令,我都收到以下错误:
这向我表明,压缩的校验和处理在恢复时是在备份命令的校验和验证之前完成的。
最后,我尝试对非压缩备份进行同样的操作(使用十六进制编辑器进行破解),但 VERIFYONLY 出现了以下错误:
即不同的错误消息。在我看来,这是备份命令校验和验证失败时抛出的错误消息。与压缩代码验证的错误(如前所示)相反。
记录一下,当我修改文件时。我在所有测试的三个不同位置对其进行了修改。我将值更改为一个字节,保存文件,进行验证,然后将其改回原始值并验证备份现在已清理干净。在文件的三个不同位置。所有测试的错误消息都是一致的,因此我所做的所有 9 项更改不太可能影响备份文件中的某些元数据区域。
您可以使用RESTORE HEADERONLY验证每个选项组合的输出,以查看生成的备份的特征。该命令的结果包含列
HasBackupChecksums
。当值为 1 时,它应确认备份包含备份校验和。