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

Par*_*ram 12 sql-server-2008 sql-server corruption

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

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

System.Data.SqlClient.SqlException发生
Message="Attempt to fetch logical page (5:65424) in database 2 failed. 它属于分配单元 7349876362857938944 不属于 4899918190390149120。

Source=".​​Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=21
LineNumber=257
Number=605
Procedure="ispDisplayCount"
Server="10.10.1.1"
State=3

这个异常是什么意思?以上问题有解决办法吗?

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

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

Mat*_*t M 12

如果错误消息指示的数据库 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命令的详细信息


Rem*_*anu 10

您的数据库已损坏。是时候从一个好的备份中恢复了。如果您没有备份,是时候了解测试恢复计划的重要性了。还需要对硬件的可靠性进行调查,注意系统日志中的警告和错误。


mrd*_*nny 9

该错误表明您的数据库已损坏。好消息是数据库 ID 2 表明这是 tempdb 数据库,因此修复它很容易 - 只需重新启动数据库实例。

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