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