Eu tenho um VLDB de produção que estou usando a orientação de Paul Randal para distribuir a DBCC CHECKDB
carga de trabalho por uma semana. Estou registrando os resultados de DBCC CHECKTABLE WITH TABLERESULTS
e DBCC CHECKALLOC WITH TABLERESULTS
para uma tabela e notei que DBCC CHECKTABLE WITH TABLERESULTS
estava retornando apenas uma única linha por tabela em tabelas não corrompidas. Aqui estão as primeiras colunas.
Error Level State MessageText
2593 10 1 There are 57 rows in 1 pages for object "SmallTable".
Mas quando executo DBCC CHECKTABLE WITH TABLERESULTS
em uma tabela corrompida em um banco de dados de teste, que corrompi com este método , recebo o seguinte:
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).
Estou curioso para saber por que o erro 8990 não retornou com a tabela não corrompida? DBCC CHECALLOC WITH TABLERESULTS
e DBCC CHECKDB WITH TABLERESULTS
retorne esta linha quando não houver erros de alocação ou consistência para relatar.
Pergunta bônus, por que não DBCC CHECKCATALOG
tem uma WITH TABLERESULT
discussão?
Eu não estava na mente dos desenvolvedores quando estava sendo pensado, mas meu palpite é reduzir algum ruído. Seria redundante dar um resumo da tabela que não tivesse erros. Como a saída Check* já é bastante detalhada, meu palpite é reduzir um pouco disso, pois não há erros.
Na verdade, olhando para as mensagens, eles são rotulados de uma maneira que me faz acreditar que eles só queriam dar a saída quando ocorreu um erro.
Como os comandos Check* são especificamente para investigar e relatar suas descobertas (além de potencialmente corrigir), você pode argumentar a favor disso de qualquer maneira. Para realmente saber, teríamos que perguntar aos desenvolvedores originais se eles se lembram ou pensaram sobre isso.
Novamente, nenhuma pista. O melhor palpite seria que ninguém pediu especificamente a saída nesse formato ou após a criação inicial, nenhum tempo foi alocado para voltar e adicioná-lo.