您可以使用TABLERESULTS
带有CHECKDB
( DBCC CHECKDB WITH TABLERESULTS
) 的选项。这将为您提供一个记录集,其中包含Error
, Level
, State
,等列MessageText
(以及许多其他列)。
该Level
记录集的列(严重性级别)应该足以确定是否有任何错误。
MS 表示,级别 11 到 16 是“由用户生成的,并且可以由用户更正”。所以我想说 17 以上的任何东西都应该意味着:停止做任何备份(以避免用损坏的备份覆盖好的备份),如果可能的话让系统脱机,并立即通知操作员。
11 到 16 级可能也应该报告给操作员(通过常规电子邮件或其他方式),以便他在必要时进行检查。(虽然我不确定是否CHECKDB
会报告级别 11 到 16 的错误。但是,将代码记录错误/通知操作员可能不会受到伤害。)
注意:如果您与 结合TABLERESULTS
使用NO_INFOMSGS
,并且如果CHECKDB
没有发现任何错误,您将不会得到任何记录集,甚至没有一个没有行的记录集。
注意2:在某些情况下,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。如果找到,则可能也存在某种严重问题。