有一件事让我迷失了方向。根据MS docs完整的checkdb (没有选项),列值检查,那么运行data_purity的好处是什么?所谓“增益”,我指的是如何进行详细的检查,我现在没有考虑性能。
我是否正确地理解了,如果数据库是在SQL2005之前创建的,它将dbi_dbccFlags设置为0,而完整的checkdb将跳过列值检查,但是一旦这样的数据库至少有一个成功的data_purity检查,标志将被设置为2,并且在每个完整的校验数据库期间将进行列值检查?如果数据库是用SQL2005+创建的,默认情况下它会将dbi_dbccFlags设置为2,然后使用完全校验be (没有选项),而使用data_purity则是相同的检查吗?
此外,估计似乎表明,对于SQL2005+来说,这两种检查之间没有区别,至少如果涉及到TempDB中需要的空间:
DBCC的结果为'AdventureWorks2019‘。
估计数据库AdventureWorks2019 = 39189上的CHECKDB所需的TEMPDB空间( KB)。
DBCC的结果为'AdventureWorks2019‘。
估计数据库AdventureWorks2019 = 225996上的CHECKDB所需的TEMPDB空间( KB)。
DBCC的结果为'AdventureWorks2019‘。
估计数据库AdventureWorks2019 = 225996上的CHECKDB所需的TEMPDB空间( KB)。
发布于 2021-03-25 23:40:14
我是否正确地理解了,如果数据库是在SQL2005之前创建的,它将dbi_dbccFlags设置为0,而完整的checkdb将跳过列值检查,但是一旦这样的数据库至少有一个成功的data_purity检查,标志将被设置为2,并且在每个完整的校验数据库期间将进行列值检查?如果数据库是用SQL2005+创建的,默认情况下它会将dbi_dbccFlags设置为2,然后使用完全校验be (没有选项),而使用data_purity则是相同的检查吗?
是的,这就对了。您只需要在2005年前创建的数据库上启用运行CHECKDB的DATA_PURITY选项一次,如果结果是干净的,那么没有该选项的后续CHECKDB将自动包含检查。它是2005年标准CHECKDB流程的一部分,也是上面创建的数据库的一部分。
此外,估计似乎表明,对于SQL2005+来说,这两种检查之间没有区别,至少如果涉及到TempDB所需的空间
这是因为它是相同的检查过程--该选项在SQL2005+创建的数据库中不会产生任何效果,因为CHECKDB将检查作为标准。
https://dba.stackexchange.com/questions/287720
复制相似问题