MSSQL 错误:基于一致性的 I/O 错误 - 是否由 MSSQL 或操作系统问题引起?

han*_*ast 3 sql-server sql-server-2005

这是我在 windows 错误日志中看到的:

SQL Server 检测到基于逻辑一致性的 I/O 错误:校验和不正确(预期:0x19fedd20;实际:0x19fed5e3)。它发生在读取文件 'D:\mssql\local_repository_pbdiffimport.mdf' 中偏移量 0x00000000dc8000 处的数据库 ID 6 中的页面 (1:1764) 期间。SQL Server 错误日志或系统事件日志中的其他消息可能会提供更多详细信息。这是威胁数据库完整性的严重错误情况,必须立即纠正。完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素引起;有关详细信息,请参阅 SQL Server 联机丛书。

我跑了

数据库检查表

这告诉我我应该用选项 REPAIR_ALLOW_DATA_LOSS 恢复,所以我最终跑了

DBCC CHECKDB (my_db_name, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS

但这导致大约 2'000 行丢失。我恢复了一个备份,但现在我担心这会再次发生,因为大约 2 周前我们已经在同一个数据库中出现了一致性问题,但后来它发生在一个索引中(重新创建的索引解决了这个问题)。

我们已经调查了磁盘 - RAID5 看起来不错,没有错误,而且磁盘检查实用程序也没有发现任何硬件问题。

这可能是由操作系统 (Windows Server 2003) 或 MSSQL (MSSQL Server 2005) 引起的吗?

cit*_*rad 5

一致性可能是由硬件或软件的任何因素引起的。查看 SQL 日志以调查可能导致问题的原因。

我的建议:

  • 确保数据库选项 Page_Verify 设置为 CHECKSUM。这会在所有写入发生之前进行验证,并且是 SQL Server 2005 上的默认设置。
  • 每日或每日多次备份(视需要而定)
  • 设置维护计划以每天检查数据库的一致性
  • 使用补丁(第三个软件)更新您的 Windows Server 和 Sql Server。
  • 阅读“有效数据库维护的重要提示”,因为它更详细地解释了我的大部分建议。

我强烈推荐这篇文章,因为它是为了帮助不知道如何管理数据库服务器的系统管理员而写的。