You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ola脚本执行SQL Server完整性检查后,sp_Blitz提示部分库未执行CHECKDB

解决sp_Blitz误报部分数据库未执行CHECKDB的问题(Ola脚本环境)

我之前在处理SQL Server 2014环境时也碰到过一模一样的情况:用Ola的完整性检查脚本跑作业一切正常,Command Log里也有记录,但Brent Ozar的sp_Blitz却揪着部分数据库说没执行过CHECKDB。下面给你梳理几个最常见的原因和排查解决步骤:

1. sp_Blitz和Ola脚本的日志数据源不一样

sp_Blitz默认是从SQL Server系统自带的sys.dm_db_dbcc_history视图和msdb.dbo.suspect_pages表来抓取CHECKDB执行记录的,而Ola的脚本是把执行日志存在自己创建的CommandLog表(目前在master库,之后会迁到管理库)里,这俩数据源并不是实时同步的。

你可以先手动验证目标数据库的真实CHECKDB状态:

  • 运行这条命令:DBCC DBINFO('你的目标数据库名') WITH TABLERESULTS;
  • 在结果里找dbi_dbccLastKnownGood字段,这个是SQL Server内核记录的最后一次成功完成完整CHECKDB的时间。如果这个时间和Ola脚本CommandLog里的执行时间对不上,那问题就出在这儿了。

2. Ola脚本执行的不是完整的CHECKDB

Ola的DatabaseIntegrityCheck存储过程支持多种参数,如果你调用时指定了特定的检查命令,可能没执行完整的CHECKDB:

  • 打开作业的命令行,看看是不是用了@CheckCommands = 'CHECKTABLE'或者@CheckCommands = 'CHECKALLOC'这类参数——只有完整的DBCC CHECKDB才会更新dbi_dbccLastKnownGood字段,sp_Blitz才会识别到。
  • 去CommandLog表里看Command字段的具体内容,确认执行的是完整的DBCC CHECKDB命令,而不是针对单个对象的检查。

3. SQL Server元数据更新异常

SQL Server 2014偶尔会出现元数据更新延迟的情况,比如数据库经历过离线、还原、只读切换等操作后,dbi_dbccLastKnownGood字段没有及时同步更新。

解决办法很直接:

  • 针对被误报的数据库,手动执行一次DBCC CHECKDB('目标数据库名')(如果数据库大的话,建议在业务低峰期操作)。
  • 执行完成后再跑一遍sp_Blitz,应该就不会再提示未执行CHECKDB了,后续Ola脚本正常执行时也会正确更新这个元数据字段。

4. sp_Blitz版本太旧导致的bug

旧版本的sp_Blitz在处理某些特殊数据库(比如只读数据库、镜像数据库)的CHECKDB记录时可能存在逻辑bug,导致误报。

你可以检查一下当前使用的sp_Blitz版本,如果不是最新版,建议更新到最新版本(记得先在测试环境验证兼容性),之后再运行看看是否还会出现这个问题。

内容的提问来源于stack exchange,提问作者William Armstrong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:54:08