代码改变世界

SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误

2014-01-06 22:20  潇湘隐者  阅读(11949)  评论(0编辑  收藏  举报

   今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误:

        消息1222,级别16,状态18,第1 行

        已超过了锁请求超时时段。

        消息8630,级别16,状态1,第1 行

        内部查询处理器错误: 查询处理器在执行过程中遇到意外错误。

我执行了一下这个SQL语句,也是报如上错误,感觉有点奇怪,还是第一次遇到这种错误。我初步怀疑是SQL中某个表出现一致性错误或分配错误等原因造成。于是先用DBCC CHECKTABLE 依次检查每个表。DBCC CHECKTABLE用来检查组成表或索引视图的所有页和结构的完整性。结果还真的发现其中一个表有2个一致性错误。如下所示:

pbFabricWIP的 DBCC 结果。

消息 8951,级别 16,状态 1,第 1 行

表错误: 表 'pbFabricWIP' (ID 1254295528)。数据行在索引 'Current_Index' (ID 24)中没有匹配的索引行。与以下数据行匹配的索引行的键可能丢失或无效:

消息 8955,级别 16,状态 1,第 1 行

数据行(1:31937:26)由(HEAP RID = (1:31937:26))标识,索引值为 'Current_Department = 'FI' and Current_Operation = '待装单' and HEAP RID = (1:31937:26)'。

消息 8952,级别 16,状态 1,第 1 行

表错误: 表 'pbFabricWIP' (ID 1254295528)。索引 'Current_Index' (ID 24)中的索引行与任何数据行都不匹配。可能是以下行的多余或无效的键:

消息 8956,级别 16,状态 1,第 1 行

索引行(1:10613:16)的值为(Current_Department = 'FI' and Current_Operation = '待组板' and HEAP RID = (1:31937:26)),指向由(HEAP RID = (1:31937:26))标识的数据行。

对象 'pbFabricWIP' 的 7391 页中有 324059 行。

CHECKTABLE 在表 'pbFabricWIP' (对象 ID 1254295528)中发现 0 个分配错误和 2 个一致性错误。

对于由 DBCC CHECKTABLE (SystemDB.dbo.pbFabricWIP)发现的错误,repair_rebuild 是最低的修复级别。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

 

于是接下来需要修复这个表的索引的一致性错误。使用DBCC DBREINDEX执行后,问题解决。

DBCC DBREINDEX('pbFabricWIP')

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。