SQL Server数据库索引修复

时间:2024-02-24 17:28:06

1.索引错误产生的现象

goods_in_out的 DBCC 结果。
消息 8935,级别 16,状态 1,第 1 行
表错误: 对象 ID 27147142,索引 ID 1,分区 ID 72057594040025088,分配单元 ID 72057594044350464 (类型为 In-row data)。页 (1:191461) 上的上一页链接 (1:191462) 与父代 (1:53785) 槽 245 所预期的此页的上一页 (1:191458) 不匹配。
消息 8977,级别 16,状态 1,第 1 行
表错误: 对象 ID 27147142,索引 ID 1,分区 ID 72057594040025088,分配单元 ID 72057594044350464 (类型为 In-row data)。没有遇到页 (1:191462) 的父节点。
对象 \'goods_in_out\' 的 5193 页中有 172446 行。
CHECKTABLE 在表 \'goods_in_out\' (对象 ID 27147142)中发现 0 个分配错误和 2 个一致性错误。
对于由 DBCC CHECKTABLE (zyhadm.dbo.goods_in_out)发现的错误,repair_rebuild 是最低的修复级别。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

表 table 中实际存在某条数据,但是当查询使用了错误的索引时,数据无法查到。

2.解决方法

表 table 的索引错误无法避免,而且产生时间不确定。所以需要定期维护索引。

1)第一种,可以通过重新生成索引进行修复,【右键索引】→【编写索引脚本为】→【DROP 和 CREATE 到】→【新建编辑器窗口】,执行SQL ;

2)第二种,通过 DBCC CHECKTABLE(\'table\')查看表的问题,如果出现一致性错误时,通过命令修复表

首先将数据库设置成单用户模式

执行 DBCC CHECKTABLE (\'table\',repair_rebuild)

然后将数据库设置为多用户模式。