如何修复具有单个错误记录(或损坏的索引)的表?

如何修复具有单个错误记录(或损坏的索引)的表?

我的表中有一行似乎已损坏。它有一个名为 ID 的标识字段,我可以选择 ID < 337 或 ID > 337,但不能选择 ID = 337。

我在 DB、表和 PK 索引(表上唯一的索引)上运行了 DBCC CHECKTABLE 和 DBCC CHECKDB,但没有发现任何东西。

我还尝试删除并重新创建索引,但执行过程只是挂起,几分钟后再也没有恢复。重建也失败了,或者说它只是挂起。

我创建了一个新表,其中包含除 337 之外的所有记录,因此我可以使其恢复到几乎正常的状态,但我想知道是否应该做些什么来识别和解决问题。

更新:我无法在表的不同字段上添加第二个索引,因为尝试时会超时。

更新2:我无法重命名表,并且所有这些操作都显示BlkBy -2,我无法识别。

谢谢!

答案1

您是否尝试过完整备份并恢复到不同的数据库?

答案2

问题在于一个孤立的分布式事务。以下是我解决它的方法:

SELECT request_owner_guid FROM sys.dm_tran_locks where request_session_id = -2

KILL '<guid from above select>'

相关内容