Вы можете использовать опцию TABLERESULTS
с CHECKDB
(DBCC CHECKDB WITH TABLERESULTS
).
Это даст вам набор записей с такими столбцами, как Error
, Level
, State
, MessageText
(среди многих других).
Столбец Level
(уровень серьезности) этого набора записей должен быть достаточным, чтобы определить, есть ли какая-либо ошибка.
MS говорит, что уровни с 11 по 16 «генерируются пользователем и могут корректироваться пользователем». Поэтому я бы сказал, что все, что выше 17, должно означать: прекратить делать какие-либо резервные копии (чтобы избежать перезаписи хороших резервных копий на поврежденные), по возможности отключить систему и немедленно уведомить оператора.
И уровни с 11 по 16, вероятно, следует сообщать оператору также (через обычную электронную почту или что-то еще), чтобы он мог проверить это при необходимости. (Я не уверен, что CHECKDB
когда-либо сообщит об ошибке с уровнями с 11 по 16. Хотя наличие кода для регистрации ошибки / уведомления оператора, вероятно, не повредит.)
ПРИМЕЧАНИЕ : если вы объедините TABLERESULTS
с NO_INFOMSGS
, и если CHECKDB
не обнаружит ошибок, вы не получите любой набор записей в результате, даже один без строк.
NOTE2 : при определенных условиях CHECKDB
просто не удастся с кодом ошибки. До сих пор я видел только одну ошибку, которая вызывает это, и это выглядит так:
Msg 211, Level 23, State 51, Line 3
Possible schema corruption. Run DBCC CHECKCATALOG.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Я не очень часто использую ADO.NET, но думаю, что ADO.NET среагирует, выдав исключение.
Кроме того, поскольку это ошибка с серьезностью> = 20, это приведет к закрытию клиентского соединения.
Подводя итог всему этому: я бы запустил DBCC CHECKDB WITH TABLERESULTS
. Если команда не выполняется, возникает проблема (возможно, серьезная). Если нет, переходите к циклу просмотра набора результатов и ищите любые уровни серьезности> = 17. Если вы найдете один из них, вероятно, есть и какая-то серьезная проблема.