我的表中有一行似乎已损坏。它有一个名为 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>'