当您使用Microsoft SQL Server附加或访问损坏的MDF数据库文件时,您将看到各种错误消息,这可能会让您感到困惑。因此,在这里我们将尝试列出所有可能的错误,并根据它们出现的频率进行排序。对于每一个错误,我们将描述其症状,解释其准确的原因,并给出示例文件以及由我们修复的文件DataNumen SQL恢复,这样你就能更好地理解他们。下面我们将使用' xxx。MDF '来表达您损坏的SQL Server MDF数据库文件名。
根据SQL Server或CHECKDB错误消息,有三种错误会导致失败:
-
- 配置错误:我们知道MDF和NDF文件中的数据被分配为页面.还有一些用于分配管理的特殊页面,如下所示:
页面类型 | 描述 |
访问页面 | 存储全局分配映射(GAM)信息。 |
SGAM页面 | 存储共享全局分配映射(SGAM)信息。 |
我的页面 | 存储索引分配映射(IAM)信息。 |
PFS页面 | 存储PFS分配信息。 |
如果上述任何分配页面有错误,或者由这些分配页面管理的数据与分配信息不一致,则SQL Server或CHECKDB将报告配置错误.
- 连贯性错误:为页面用于存储数据,包括数据页和索引页,如果SQL Server或CHECKDB发现页内容和校验和之间有任何不一致,那么他们将报告一致性错误。
- 所有其他错误:可能还有其他不属于上述两类的错误。
- xxxx。MDF不是一个主数据库文件。(Microsoft SQL Server, Error: 5171)
- 文件' xxxx。Mdf '不是一个有效的数据库文件头。FILE SIZE属性不正确。(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错误:错误的校验和
- “sys.”XXX在sys.xxx中没有匹配的行。
- 表错误:对象ID ##,索引ID ##将被重建。
- 不能重新创建该系统表索引。
- 对象ID ##,索引ID ##,分区ID ##,分配单元ID ##(类型未知),页ID(##:560)在其页头中包含错误的页ID。
CHECKDB报告的分配错误:
- IAM (Index Allocation Map)页面是由IAM页面的Next Pointer指向的
- 数据库ID ##中的Extent(##:##)在GAM中标记为已分配,但没有SGAM或IAM已分配。
CHECKDB报告的所有其他错误: