MSSQLSERVER_605

适用于:SQL Server

详细信息

属性
产品名称 SQL Server
事件 ID 605
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 WRONGPAGE
消息正文 尝试在数据库 %d 中提取逻辑页 %S_PGID 失败。 该逻辑页属于分配单元 %I64d,而非 %I64d。

说明

此错误通常表示指定数据库中的页或分配已损坏。 SQL Server 通过遵循页面链接或使用索引分配映射(IAM)读取属于表的页面时检测到损坏。 分配给表的所有页必须属于与该表相关联的分配单元之一。 如果页眉中包含的分配单元 ID 不匹配与表相关联的分配单元 ID,将引发此异常。 错误消息中列出的第一个分配单元 ID 是页眉中显示的 ID,而第二个分配单元值则是与表相关联的 ID。

数据损坏错误

严重级别为 21 表示可能存在数据损坏。 可能的原因包括损坏的页链、损坏的 IAM 或该对象的 sys.objects 目录视图中存在无效条目。 这些错误通常由硬件或磁盘设备驱动程序故障而引起。

暂时性错误

严重级别为 12 表示可能存在暂时性错误,即在缓存中出现错误,但不表示对磁盘上的数据造成破坏。 暂时性的 605 错误可由以下条件引发:

  • 操作系统过早地通知 SQL Server I/O 操作已完成;即使不存在实际数据损坏,也会显示错误消息。

  • 运行带有优化器提示 NOLOCK 的查询,或将事务隔离级别设置为 READ UNCOMMITTED。 当使用 NOLOCK 或 READ UNCOMMITTED 事务隔离级别的查询尝试读取被其他用户移走或更改的数据时,将发生 605 错误。 若要验证是否为暂时性的 605 错误,请稍后重新运行该查询。

通常,如果在数据访问期间发生该错误,但后续的 DBCC CHECKDB 操作在没有出错的情况下完成,则 605 错误可能是暂时的。

用户操作

如果 605 错误不是暂时性的,则说明问题很严重,必须运行以下任务来纠正该问题:

  1. 运行以下查询,确定与消息中指定的分配单元相关联的表。 用错误消息中说明的分配单元替换 allocation_unit_id

    USE [database_name];  
    
    GO  
    
    SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,  
    
    au.type_desc AS allocation_type, au.data_pages, partition_number  
    
    FROM sys.allocation_units AS au  
    
    JOIN sys.partitions AS p ON au.container_id = p.partition_id  
    
    JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id  
    
    WHERE au.allocation_unit_id = '<allocation_unit_id>' OR au.allocation_unit_id = '<allocation_unit_id>'  
    
    ORDER BY au.allocation_unit_id;  
    
    GO  
    
  2. 对与错误消息中说明的第二个分配单元 ID 相关联的表,执行不带 REPAIR 子句的 DBCC CHECKTABLE。

  3. 尽快执行不带 REPAIR 子句的 DBCC CHECKDB,以确定整个数据库中的总体损坏程度。

  4. 检查错误日志以查找经常随 605 错误一起发生的其他错误,并检查 Windows 事件日志以查找任何与系统或硬件有关的问题。 修复日志中包含的所有与硬件相关的问题。

如果问题与硬件无关,请执行以下任务之一:

  1. 从已知的干净备份中还原数据库。 可以利用页面还原备份功能来还原损坏的页。

  2. 运行带有 REPAIR 子句的 DBCC CHECKDB(这是步骤 3 中所执行 DBCC CHECKDB 操作推荐的做法),以修复损坏。 如果运行具有 REPAIR 子句的 DBCC CHECKDB 无法解决存在的问题,请与主要支持提供商联系。 提供 DBCC CHECKDB 的输出以供查看。

    注意

    如果您不确定运行带有 REPAIR 子句的 DBCC CHECKDB 会对数据造成何种影响,请在运行该语句前与您的主要支持提供商联系。

另请参阅

DBCC CHECKTABLE (Transact-SQL)