症状:

使用时 DBCC 检查数据库REPAIR_ALLOW_DATA_LOSS 修复 修复损坏的 .MDF 数据库的参数,如下所示:

DBCC CHECKDB(xxxx,'REPAIR_ALLOW_DATA_LOSS')

您会看到以下错误消息:

“xxxx”的 DBCC 结果。
CHECKDB 在数据库“xxxx”中发现 0 个分配错误和 0 个一致性错误。
消息824,级别24,状态2,行8
SQL Server 检测到基于逻辑一致性的 I/O 错误:不正确的校验和(预期:0xea8a9a2f;实际:0x37adbff8). 它发生在读取数据库 ID 1 中的页面 (28:39) 时,文件“xxxx.mdf”中的偏移量为 0x00000000038000。 中的其他消息 SQL Server 错误日志或系统事件日志可能会提供更多详细信息。 这是威胁数据库完整性的严重错误情况,必须立即更正。 完成完整的数据库一致性检查 (DBCC CHECKDB)。 此错误可能由多种因素引起; 有关详细信息,请参阅 SQL Server 在线图书。

其中“xxxx.mdf”是正在修复的损坏 MDF 文件的名称。 虽然 CHECKDB 说

CHECKDB 在数据库“xxxx”中发现 0 个分配错误和 0 个一致性错误。

这仍然是一个一致性错误(讯息824)。

报错信息截图:

基于逻辑一致性的 I/O 错误:不正确的校验和

如果损坏严重,则会出现连续的错误消息(讯息824), 如下:

消息824,级别24,状态6,行2 SQL Server 检测到基于逻辑一致性的 I/O 错误:校验和不正确(预期:0x3d17dfef;实际:0xd81748ef)。 它发生在读取文件“xxxx.mdf”中数据库 ID 1 中偏移量 0 处的页面 (39:0000000000000000) 期间。 中的其他消息 SQL Server 错误日志或系统事件日志可能会提供更多详细信息。 这是威胁数据库完整性的严重错误情况,必须立即更正。 完成完整的数据库一致性检查 (DBCC CHECKDB)。 此错误可能由多种因素引起; 有关详细信息,请参阅 SQL Server 在线图书。

消息824,级别24,状态6,行4 SQL Server 检测到基于逻辑一致性的 I/O 错误:校验和不正确(预期:0x3d17dfef;实际:0xd81748ef)。 它发生在读取文件“xxxx.mdf”中数据库 ID 1 中偏移量 0 处的页面 (39:0000000000000000) 期间。 中的其他消息 SQL Server 错误日志或系统事件日志可能会提供更多详细信息。 这是威胁数据库完整性的严重错误情况,必须立即更正。 完成完整的数据库一致性检查 (DBCC CHECKDB)。 此错误可能由多种因素引起; 有关详细信息,请参阅 SQL Server 在线图书。

其中“xxxx.mdf”是正在修复的损坏 MDF 文件的名称。

报错信息截图:

如果损坏更严重,您可能会看到 讯息7909 如下 讯息824:

“xxxx”的 DBCC 结果。
CHECKDB 在数据库“xxxx”中发现 0 个分配错误和 0 个一致性错误。
消息824,级别24,状态2,行8
SQL Server 检测到基于逻辑一致性的 I/O 错误:校验和不正确(预期:0xcfcd2118;实际:0x6fc599d6)。 它发生在读取文件“xxxx.mdf”中数据库 ID 1 中偏移量 1x39 处的页面 (0:00000000002000) 期间。 中的其他消息 SQL Server 错误日志或系统事件日志可能会提供更多详细信息。 这是威胁数据库完整性的严重错误情况,必须立即更正。 完成完整的数据库一致性检查 (DBCC CHECKDB)。 此错误可能由多种因素引起; 有关详细信息,请参阅 SQL Server 在线图书。
消息7909,级别20,状态1,行8
紧急模式修复失败。您必须从备份中恢复。

其中“xxxx”是数据库名称,“xxxx.mdf”是数据库物理文件名。

备注 讯息7909 是一个严重的错误,可能在许多情况下发生 SQL Server 认为数据库无法恢复。

报错信息截图:

准确的解释:

MDF文件中的数据存储为8KB 网页. 每个页面都有一个可选的校验和字段。

如果DBCC CHECKDB命令发现头页、PFS页和部分数据页中的校验和值无效且无法纠正问题,则会报此错误(讯息824). 如果损坏严重,可能会出现连续错误(讯息824) 或后跟另一个错误 (讯息7909).

您可以使用我们的产品 DataNumen SQL Recovery 从损坏的 MDF 文件中恢复数据并解决此错误。

示例文件:

示例损坏的 MDF 文件将导致错误(单个消息 824 错误):

SQL Server 版本 损坏的 MDF 文件 MDF文件修复 DataNumen SQL Recovery
SQL Server 2014 错误1_3.mdf 错误1_3_固定.mdf

示例损坏的 MDF 文件将导致错误(连续 Msg 824 错误):

SQL Server 版本 损坏的 MDF 文件 MDF文件修复 DataNumen SQL Recovery
SQL Server 2014 错误1_1.mdf 错误 1_1_固定.mdf

示例损坏的 MDF 文件将导致错误(消息 824 错误后跟消息 7909 错误):

SQL Server 版本 损坏的 MDF 文件 MDF文件修复 DataNumen SQL Recovery
SQL Server 2014 错误1_2.mdf 错误1_2_固定.mdf

 

参考文献:

1. https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/mssqlserver-824-database-engine-error?view=sql-server-ver15