MSSQLSERVER_832

适用范围:SQL Server

详细信息

Attribute
产品名称 SQL Server
事件 ID 832
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 B_CONSTPAGECHANGED
消息正文 应为常量的页面已更改(预期校验和:<预期值>、实际校验和:<实际值>、数据库 <dbid>、文件“filename>”<、page <pageno>)。 此错误通常指示存在内存故障或其他硬件损坏或操作系统损坏。

说明

外部因素导致数据库页在用于更改数据库页的普通 SQL Server 引擎代码之外进行修改。 条件可能是:

  • 在 SQL Server 进程中运行的线程,该线程在数据库页上写入错误。 这通常称为“涂鸦器”
  • 硬件或操作系统问题是,支持数据库页面的内存遭到错误地修改或损坏

当 SQL Server 检测到此行为错误 832 时。

用户操作

若要找出错误原因,请考虑以下选项:

  • 应运行任何正常的硬件或系统检查,确定是否存在内存、CPU 或其他与硬件相关的问题。 确保所有系统驱动程序、操作系统更新和硬件更新均已应用到系统。 考虑运行任何硬件制造商诊断,包括与内存相关的测试。
  • 评估 SQL Server 中可能加载哪些“外部”DLL,该问题可能导致此问题,包括扩展存储过程、COM 对象或其他 DLL,这些 DLL 可能错误地修改为数据库页保留的 SQL Server 内存。

每当看到此错误时,都应立即考虑针对错误消息中 dbid> 引用<的数据库运行DBCC CHECKDB

详细信息

此错误是由通常称为 LazyWriter 的后台任务检测到的。 (此任务的“命令”被视为 LAZY WRITER)。 因此,此错误不会返回到客户端应用程序。 此错误将以 EventID=832 的形式写入 Windows 应用程序事件日志。

仅检查缓存中当前未修改(或“更新”)的页面。 此消息使用“固定”一词的原因是,自从磁盘读取页面以来从未对该页面进行更改。 此外,此页面是在“干净”模式下从磁盘读取的,因为它在页面上具有校验和值,但从未遇到校验和失败(消息 824)。 但是,可能会在此错误发生后的某个时间点修改此页面,然后以不正确的修改写入磁盘。 如果发生此错误,则在修改写入磁盘之前,将基于所有修改来计算新的校验和。 因此,磁盘上的页面可能已损坏,但随后从磁盘读取可能不会触发校验和失败。 请务必在此错误引用的所有数据库上运行 DBCC CHECKDB

即使 DBCC CHECKDB 在写入磁盘后,也可能不会报告此状态下的页面错误。 这是因为不正确的修改可能位于既不包含任何数据,也不包含任何重要的页面或行结构信息的页面位置,或者可能是对 CHECKDB 无法检测到的数据所做的修改。

有关消息 832 的更多详细信息,另请参阅白皮书 SQL Server I/O 基础知识,第 2 章