当您使用Microsoft SQL Server附加或访问损坏的MDF数据库文件时,您将看到各种错误消息,这可能会让您感到有些困惑。因此,在这里我们将尝试列出所有可能的错误,根据它们发生的频率进行排序。对于每个错误,我们将描述其症状,解释其确切原因,并给出示例文件以及我们修复的文件DataNumen SQL Recovery,以便你能更好地理解他们。下面我们将使用' xxx。MDF '来表示损坏的SQL Server MDF数据库文件名。
根据SQL Server或CHECKDB错误消息,有三种类型的错误会导致失败:
-
- 配置错误:我们知道MDF和NDF文件中的数据被分配为页面.还有一些专门用于分配管理的页面,如下所示:
页面类型 | 描述 |
访问页面 | 存储全局分配映射(GAM)信息。 |
SGAM页面 | 存储共享的全局分配映射(SGAM)信息。 |
我的页面 | 存储IAM (index allocation map)信息。 |
PFS页面 | 存储PFS分配信息。 |
如果上面的分配页面有错误,或者由这些分配页面管理的数据与分配信息不一致,那么SQL Server或CHECKDB将报告配置错误.
- 连贯性错误:为页面用于存储数据,包括数据页和索引页,如果SQL Server或CHECKDB发现页内容与校验和之间有任何不一致,那么它们将报告一致性错误。
- 所有其他错误:可能还有其他不属于上述两类的错误。
- xxxx。MDF不是主数据库文件。(Microsoft SQL Server,错误:5171)
- 文件' xxxx. xml的头文件。Mdf '不是一个有效的数据库文件头。文件大小属性不正确。(Microsoft SQL Server,错误:5172)
- SQL Server检测到一个基于逻辑一致性的I/O错误:错误的校验和
- SQL Server检测到一个基于逻辑一致性的I/O错误:页面撕裂
- 您错误地删除了数据库中的一些记录或表。
SQL Server有一个内置的工具叫做DBCC,有CHECKDB而且CHECKTABLE选项,可以帮助修复损坏的MDF数据库。然而,对于严重损坏的MDB数据库文件,DBCC CHECKDB而且CHECKTABLE也会失败。
CHECKDB报告的一致性错误:
- SQL Server检测到一个基于逻辑一致性的I/O错误:错误的校验和
- 行。XXX在sys.xxx中没有匹配的行。
- 表错误:对象ID ##,索引ID ##将被重建。
- 无法重新创建此系统表索引。
- 对象ID ##,索引ID ##,分区ID ##,分配单元ID ##(类型未知),页ID(##:560)在页头中包含错误的页ID。
CHECKDB报告的分配错误:
CHECKDB报告的所有其他错误: