我有一个生产 VLDB,我正在使用Paul Randal 的指导将DBCC CHECKDB
工作量分散到一周内。我正在记录表的结果DBCC CHECKTABLE WITH TABLERESULTS
并记录DBCC CHECKALLOC WITH TABLERESULTS
到表中,注意到DBCC CHECKTABLE WITH TABLERESULTS
在未损坏的表上每个表只返回一行。这是前几列。
Error Level State MessageText
2593 10 1 There are 57 rows in 1 pages for object "SmallTable".
但是当我DBCC CHECKTABLE WITH TABLERESULTS
在测试数据库中的损坏表上运行时,我用这种方法损坏了它,我得到以下信息:
Error Level State MessageText
8939 16 98 Table error: Object ID 565577053, index ID 1, partition ID 72057594041335808, alloc unit ID 72057594046971904 (type In-row data), page (1:312). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 133129 and -4.
8928 16 1 Object ID 565577053, index ID 1, partition ID 72057594041335808, alloc unit ID 72057594046971904 (type In-row data): Page (1:312) could not be processed. See other errors for details.
8980 16 1 Table error: Object ID 565577053, index ID 1, partition ID 72057594041335808, alloc unit ID 72057594046971904 (type In-row data). Index node page (0:0), slot 0 refers to child page (1:312) and previous child (0:0), but they were not encountered.
2593 10 1 There are 0 rows in 0 pages for object "tblWhoops".
8990 10 1 CHECKTABLE found 0 allocation errors and 3 consistency errors in table 'tblWhoops' (object ID 565577053).
我很好奇为什么错误 8990没有随未损坏的表一起返回?DBCC CHECALLOC WITH TABLERESULTS
并DBCC CHECKDB WITH TABLERESULTS
在没有任何分配或一致性错误要报告时返回此行。
DBCC CHECKCATALOG
奖金问题,为什么没有WITH TABLERESULT
争论?
当我想到它时,我不在开发人员的脑海中,但我的猜测是为了减少一些噪音。提供没有错误的表格摘要是多余的。由于 Check* 输出已经非常冗长,我的猜测是减少其中的一部分,因为没有错误。
事实上,查看这些消息时,它们的标记方式甚至让我相信它们只是想在发生错误时提供输出。
由于 Check* 命令专门用于调查和报告他们的发现(除了可能修复),您可以通过任何一种方式争论这一点。要真正知道,我们必须询问原始开发人员是否记得或考虑过它。
再次,没有线索。最好的猜测是没有人特别要求以该格式输出,或者在最初创建之后,没有时间返回并添加它。