DBA.SE 上有很多关于DBCC CHECKDB
错误返回时如何解决问题的问题。我的具体问题是关于实际收到DBCC CHECKDB
返回错误的通知。大多数 DBA 都知道您可以自动执行该命令并且应该经常运行它。
我偶然发现了Cindy Gross的这篇文章,其中有一些非常好的注释。在其中,她提到了 SQL Server 代理的使用,如果它在执行命令时发现错误,它将导致该步骤(或作业取决于配置)失败。她在此处指向 Paul Randal 关于该主题的博文。CHECKDB
现在我很好奇是否有人知道维护计划中的检查数据库完整性任务会做同样的事情?MSDN 没有提到它会,而且我也没有真正遇到过腐败问题的环境;所以不能说它确实如此。正如 Cindy 建议的那样,这与简单地设置一个 SQL 代理作业相比,该作业具有多个对每个数据库运行特定命令的步骤。
想法?显然,证据就在布丁中,因此提供的不仅仅是猜测会有所帮助......
维护计划中提供的检查数据库完整性任务对所选数据库发出 DBCC CHECKDB WITH NO_INFOMSGS。您可以通过单击任务设置中的 view-SQL 来查看其命令。如果您怀疑生成的 SQL 命令,可以使用 SQL profiler 查看其 SQL 命令。如果发现损坏,具有此维护任务的代理作业将生成错误并失败(使用正确的作业步骤设置)。
需要指出的一点是,运行 DBCC CHECKDB 等同于执行 DBCC CHECKALLOC、DBCC CHECKTABLE、DBCC CHECKCATALOG 和其他验证。如果您正在运行 DBCC CHECKDB,则不必单独运行它们。单独运行它们通常是为了执行特定的完整性检查,或者由于执行整个 DBCC CHECKDB 的时间有限,需要将完整性检查分散到较小的任务中。可以在 MSDN 上找到更多信息。
我设置了一个 SQL Server 2008 R2 实例并拥有以下数据库:
我设置了一个包含其中的维护计划
Check Database Integrity Task
。运行计划后它确实失败了:
在查看日志后,它表明它将在遇到因发现损坏而失败的数据库后继续检查其他数据库:
为了获得有关 DBCC CHECKDB 错误的通知,我每晚都使用 Powershell 解析错误日志,当 SQL 错误日志中出现错误时,它会通过电子邮件发送给我们,特别是如果有 DBCC 错误
这是我们监控 700 多个数据库的最简单方法