错误8908:表错误:数据库ID34,对象ID3,索引ID0。链的链接不匹配。(1:9342)->next = (1:1808),但(1:1808)->prev = (1:1351)。
(在数据库‘UlandSystem’(34)中。
解释
当 Microsoft® SQL Server 在与表关联的一个页链的页链接中检测到不一致时(例如当某页的 next 指针指向一页,而该页的 previous 指针却向回指向另一页时),会出现该错误。表数据具有一个双向链接页链,每个索引级别也具有一个这样的页链。
对策
通过检查错误信息中的 current page 确定损坏的表。执行不带修复子句的 DBCC CHECKDB 以确定损坏的程度。然后,执行带有适当修复子句的 DBCC CHECKDB 以修复损坏部分。如果该页与索引相关联,有时除去索引可能解决问题。在多数情况下,必须从已知的干净备份恢复数据库。
如果错误涉及索引页,请使用 REPAIR_REBUILD 子句。如果错误涉及数据页,可能需要使用 REPAIR_ALLOW_DATA_LOSS 子句。在不允许丢失数据的可能事件中,将需要从已知的干净备份进行还原。如果问题仍然存在,请与您的主要支持提供者联系。使 DBCC CHECKDB 的输出可查阅。
重要
如果执行带有修复子句之一的 DBCC CHECKDB 未更正索引问题,或者您不确定带有修复子句的 DBCC CHECKDB 对数据的作用,请与您的主要支持提供者联系。
除 SQL Server 错误日志外,还应检查操作系统错误日志文件,以确定是否是硬件错误造成损坏。
如果问题仍然存在,请与您的主要支持提供者联系。
注:
使用数据库的过程中,由于断电或其他原因,有可能导致数据库出现一些小错误,比如检索某些表特别慢,查询不到符合条件的数据等.
出现这些情况的原因,往往是因为数据库有些损坏,或索引不完整.
在ACCESS中,有个修复数据库的功能可以解决这个问题,在SQL企业管理器,没有这个功能,要用语句来完成,下面就介绍如何用 SQL 语句完成数据库的修复,需要注意的是,在进行下面的操作时,必须断开所有用户的连接:
USE MASTER
GO
sp_dboption '你的数据库名', 'single user', 'true'
Go
DBCC CHECKDB('你的数据库名', REPAIR_REBUILD)
Go
USE 你的数据库名
go
exec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_REBUILD)'
go
sp_dboption '你的数据库名', 'single user', 'false'
Go
附:
DBCC CHECKDB('数据库名称',REPAIR_ALLOW_DATA_LOSS)
REPAIR_ALLOW_DATA_LOSS:是比较高级的修复方式
REPAIR_FAST:是简单快速的修复方式
REPAIR_ALLOW_DATA_LOSS
此选项包括REPAIR_REBUILD 选项的所有修复功能而且还包括为纠正分配错误
结构性行或页错误而进行数据行或数据页的分配和解除分配以及删除被损坏的文本对
象这些修复易引起数据丢失所以可在事务中使用该DBCC 命令这样用户可以回
滚所发生的数据变化然后从备份中进行恢复
REPAIR_FAST
该选项只能实现较简单且耗时少的修复功能例如修复非簇索引中的额外键此选项
不会导致数据丢失
REPAIR_REBUILD
此选项包括所有REPAIR_FAST 选项的功能而且能够完成一些耗时的修复操作如
重建索引此选项不会导致数据丢失