我有一个PAGE_VERIFY
选项设置为NONE
. 当我将此设置为 时CHECKSUM
,只有从那时起更改的页面才会计算校验和并将其存储在页面上。
我正在寻找对至少所有表和索引数据进行校验和的最佳方法。
我最初的想法是删除并重新创建所有聚集索引。对于没有聚集索引的表,我会创建一个然后再次删除它。
这应该会导致对每个数据和索引页至少进行一次写入操作,但这有点笨手笨脚。有人有更好的主意吗?
在我看来,最全面的方法是使用 TDE 加密/解密数据库。这将确保每个页面都将在内存中更改并将刷新到磁盘。
我已经在最初在 SQL2000 中创建的“遗留”数据库上成功尝试了这个,在我发现如果你查看带有 dbcc 页面的标题时,几个页面上没有实际的校验和(0x...200)。
如果您要尝试此操作,我建议您在实时数据库的还原版本上对其进行测试,以防万一您发现了可能被捕获并停止加密过程的损坏。有一些标志可以处理它,但最好谨慎行事。
显然,您需要备份加密使用的证书,因此您可以在数据库加密期间应对任何可能发生的情况。
如果有人对在所有页面上编写校验和有更好的想法,我很想听听:-)