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

本文介绍了一种线上数据库中出现的错误8646问题及解决方法。通过DBCC检查定位到损坏索引,并通过重建索引来解决问题。

线上库执行一项数据变更操作时,一直提示"出现错误 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校验,没有异常,问题解决。

转载于:https://www.cnblogs.com/Vulpers/p/8777107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值