尝试在数据库2中获取逻辑页(5:65424)失败


11

SqlException在调用存储过程时,我得到以下信息:

尝试在数据库2中获取逻辑页(5:65424)失败。它属于分配单元7349876362857938944,而不属于4899918190390149120。

发生System.Data.SqlClient.SqlException
Message =“试图在数据库2中获取逻辑页面(5:65424)失败。它属于分配单元7349876362857938944,而不是属于4899918190390149120。

Source =“。Net SqlClient数据提供程序”
ErrorCode = -2146232060
类= 21
LineNumber = 257
Number = 605
过程=“ ispDisplayCount”
Server =“ 10.10.1.1”
State = 3

此异常是什么意思?上述问题有解决方案吗?

尽管上面的错误中引用的数据库指示tempdb,但使用以下答案可以修复引用消息605的类似错误。

消息605,级别21,状态3,行1
尝试获取数据库7中的逻辑页(1:8687634)失败。它属于分配单元72057594364821504,而不是72057594052476928。

Answers:


11

如果错误消息指示的数据库ID为2,则受影响的数据库为tempdb。修复tempdb中此类损坏的一种方法是简单地重新启动SQL Server实例。对于非2的数据库ID,请遵循以下建议。

您可能需要从备份中还原,但是请尝试以下操作:

作为sysadmin角色的成员,执行DBCC PAGE (2, 5, 65424, 3);并查找Metadata: IndexId值。

  • 如果是0(堆)或1(聚集索引),则需要从备份中还原。
  • 如果不是 01,则可以重新构建非聚集索引。

运行DBCC命令,让我们知道您找到了什么。检查https://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/以获取有关该DBCC PAGE命令的详细信息



9

该错误表明您的数据库已损坏。好消息是,数据库ID 2表示这是tempdb数据库,因此解决此问题很容易-只需重新启动数据库实例即可。

重新启动实例后,应该弄清楚损坏发生的原因。首先chkdsk在问题文件所在的驱动器上运行。接下来,您需要查看存储本身,看看那里是否有任何问题。可能是物理磁盘问题,可能是HBA或RAID卡驱动程序等。


丹尼(Denny),您发现进行RAM健康检查是否也有好处?您是否看到RAM中的损坏页面也转换为磁盘上的损坏?
Ali Razeghi 2012年

1
如果RAM棒损坏,则可能导致页面被报告为脏页。比起内存,磁盘子系统出现问题的几率要高得多。如果磁盘实际上没有问题,那将是下一个要查找的地方。
mrdenny 2012年

2

我可以通过清除SQL缓存来解决此问题:

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO

显然,重新启动SQL服务会产生相同的影响。

(通过Made By SQL,在此处转载以帮助他人!)


1

就我而言,解决方案是截断并重新填充相关中的数据。

表中的数据很可能已损坏。


1

您会从很多人那里听到“ 数据库已损坏,需要还原 ”,甚至没有建议您花一些时间来执行以下操作;查看您的日志,找出问题首次出现的时间,该行之前的错误,检查页面所属的数据库/表

在我的情况下,此错误是由;

在数据库'XYZ'中的表629577281的索引ID 9中找不到索引条目。指示的索引已损坏或当前更新计划存在问题

一种解决方法是跟踪引用的索引并暂时将其删除。

后来我找到了这个Microsoft链接,该链接描述了我的确切问题并提供了解决方案链接

希望这对以后的人有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.