一次SQLServer索引损坏问题的排查与修复

线上库执行一项数据变更操作时,一直提示"出现错误 8646。请记录该错误和时间,并与您的系统管理员联系。"

通过代码排查,最终确定是在执行某存储过程时触发了如下错误,并指明了位置是在某触发器的具体行:

  "内部错误。文件 e:\sql10_main_t\sql\ntdbms\storeng\dfs\startup\dstream.cpp 第 792 行中的字符串例程因 HRESULT 0x8007007a 的错误而失败。"

通过面向google开发,检索到有前辈遇到过类似问题,说明可能是索引损坏导致了此问题。相关链接[1][2]

为了验证,需要通过DBCC对疑似有问题的索引进行校验,脚本代码如下

declare @index_id int
set @index_id = (select index_id from  Sys.Indexes where name='[索引名]')
DBCC CHECKTABLE('[表名]',index_id=@index_id)

校验后,发现问题果然出在这个索引上,接下来就是重建该索引,脚本代码如下

ALTER INDEX [索引名] ON [表名] REBUILD

重建索引后,重新DBCC校验,没有异常,问题解决。

posted @ 2018-04-10 10:37  Vulper  阅读(741)  评论(0编辑  收藏  举报