如何排查和修复已损坏的 Access 2002 或更高版本的数据库

文章翻译 文章翻译
文章编号: 283849 - 查看本文应用于的产品
初级用户: 要求用户界面的单用户计算机上的知识。

本文只适用于 Microsoft Access 数据库 (.mdb)。

为这篇文章的一个 Microsoft Access 97 版本,请参阅 279334
为这篇文章的一个 Microsoft Access 2000 版本,请参阅 209137
展开全部 | 关闭全部

本文内容

概要

有几种方法可以发生内部和外部的 Access 可能会使您的数据库文件已损坏 (损坏)。损坏的数据库的症状的范围可以从 #Deleted 出现在您无法打开一个对象要您无法完全在 Access 中打开该数据库文件在数据库中的某些记录。在 Microsoft Access 的压缩和修复实用工具是一种有用的工具,以优化尝试,或尝试修复 Microsoft Access 数据库文件。本文介绍此访问实用程序,并提供了用于尝试修复损坏的数据库的其他替代方法。本文还提供了有关内容可能会导致损坏的数据库的信息。

注意Microsoft Jet 数据库引擎在 Microsoft Access 中使用的是共享数据库系统文件。当在多用户环境中使用时 Microsoft Jet 时,多个客户端进程正在使用文件读取,写入,并且锁定上共享数据库的操作。由于多个客户端进程是读取和写入到同一数据库,并且因为 Jet 不使用事务日志 (如执行更高级的数据库系统 such as SQL Server)、 不可能可靠地阻止任何和所有数据库损坏。如果您需要一个数据库的系统运行 24 小时内某一天在多用户环境中的每周七天 Microsoft 建议您使用真正的客户端/服务器数据库系统中支持持久与 such as Microsoft SQL Server 的交易记录。

更多信息

尽管本文中介绍的步骤是通常在成功恢复损坏要保护您的数据的数据库文件,Microsoft 建议您将创建您可以随时数据库文件的备份副本。

压缩和修复实用工具的说明

压缩数据库

当压缩数据库时,在压缩过程将回收未使用的空间,在数据库中创建的对象和记录的删除操作。它会通过创建一个新的目标数据库并将旧数据库中的每个对象复制到新的数据库。如果您选择将数据库压缩到原始数据库名称而不是到新的数据库,在压缩过程将创建一个临时数据库、 将原始数据库中的所有对象都导出到临时数据库、 然后删除原来的数据库和在此然后将临时数据库重命名为原始数据库的名称。

以下是在压缩过程执行的操作的列表:
  • 将一个表的页重新组织,使重新定位它们驻留在相邻数据库页中。这可以提高性能,因为表不再零碎跨数据库。
  • 它回收未使用的空间创建的对象和记录的删除操作。时从数据库中删除对象或记录,它们所占用的空间被标记为可供新添加到数据库中。 但是,数据库的大小永远不会收缩除非压缩该数据库。对于数据库中的对象和记录经常添加、 删除,和更新,应该压缩频繁。
  • 它将重置递增的自动编号字段,以便下一个分配的值将为多个中剩下的记录最大的值。例如对于压缩数据库后数据库中的所有记录已都删除,如果自动编号字段中的值将为 1,添加下一条记录时。在自动编号值如果您压缩数据库后,在数据库中剩余的最大自动编号值将为 50,字段将添加下一条记录时为 51。请注意这是,则返回 true 即使以前添加包含值大于 50 的记录,但压缩前,已删除。
  • 它将重新生成查询优化过程中使用的表统计信息。这些统计信息可以随着时间的推移会过期。 如果回滚的事务或如果数据库未正确关闭由于意外的停电的或者因为该计算机之前关闭正在使用 Microsoft Jet 的程序已完全退出的更改,通常会发生这种情况。
  • 以便它们将在重新编译的下一次运行查询时,它标志的所有查询。这一点很重要的因为数据库统计信息可以更改和以前编译过的查询可能有一个不准确的查询计划。
修复数据库

在修复过程试图修复只将表、 在的查询和数据库中的索引。它不会尝试修复损坏的窗体、 报表、 宏,或模块。

要运行压缩和修复程序之前请确定的内容

在一个数据库上运行压缩和修复实用程序之前,请确保以下任一项:
  • 请确保您有足够的硬盘上的原始和访问的压缩的版本上的存储空间数据库。这意味着您必须拥有足够的可用存储空间的大小至少两倍的 Access 数据库的驱动器上。如果希望释放一些空间从该的驱动器删除不必要的文件,或者如有可能将 Access 数据库移到具有更多的可用空间的驱动器。
  • 请确保您拥有打开/运行和以独占方式打开 Access 数据库的权限。如果您所拥有数据库一定要设置这些权限。如果您不是数据库的所有者,请与它的所有者,以了解如果可将这些权限。
  • 请确保用户不具有打开 Access 数据库。
  • 请确保 Access 数据库不位于只读网络共享上,或具有其文件属性设置为只读。

试图修复损坏的数据库的步骤

以下步骤概述了可用于尝试修复损坏的数据库的一般方法:
  1. 请损坏的数据库 (.mdb) 文件的副本,以便您有一个备份。
  2. 如果存在,请删除.ldb 文件。在删除.ldb 文件之前,您必须关闭相应的.mdb 文件。

    .ldb 文件用于确定共享数据库中以及由谁锁定的记录。如果打开一个数据库进行共享使用,.ldb 文件会创建与相应数据库 (.mdb) 同名。例如对于 C:\Msoffice\Access 文件夹中打开 Northwind.mdb 示例数据库供共享使用,如果名为 Northwind.ldb 是自动创建一个文件在同一个文件夹中。最后一个用户已退出有以下两个例外数据库后,.ldb 文件会自动删除--当最后一个用户不具有删除权限,以.mdb 文件所在的文件夹或数据库已损坏。.ldb 文件包含具有打开该数据库的用户的列表。
  3. 运行压缩和修复实用工具。这样做,请按照下列步骤操作:
    1. 打开数据库时请将其关闭。
    2. 工具 菜单上指向 数据库实用工具,,然后再单击 压缩和修复数据库
    3. 数据库来源 对话框中选择要压缩,该文件,然后单击 压缩
    4. 数据库压缩为 对话框中输入新文件的名称,然后单击 保存

      如果压缩和修复不成功,您将收到一条消息,说明操作。这意味着损坏严重无法对其进行更正。
  4. 如果上述步骤无法恢复在损坏的数据库,请尝试创建一个新的数据库,然后从旧到新数据库中导入相应的对象一个接一个。然后重新创建关系。这种方法解决数据库中的已损坏的系统表的问题。

    注意您不能使用导入向导导入数据访问页。 在新数据库中,而是,打开现有的数据访问页。这样做,请按照下列步骤操作:
    1. 在数据库窗口中单击 对象 下的
    2. 单击 新建
    3. 新建数据访问页 对话框中单击 现有的 Web 页,然后单击 确定
    4. 定位网页 窗口中浏览到数据访问页的位置。
  5. 如果损坏是一个表中,并且在前面的步骤不具有恢复表请尝试以下操作:
    1. 在 Microsoft Access 将表导出为 ASCII (带分隔符的文本) 文件。有关详细信息查看主题"导出数据或数据库对象."Microsoft Access 帮助。
    2. 删除与此表相关联的任何关系,然后将其从数据库删除表。
    3. 压缩数据库。
    4. 重新创建表和它的任何关系。
    5. 使用字处理器检查错误或出现了奇怪的数据的 ASCII 文件,并删除这些记录。以 ASCII 文本的文件格式保存文件。
    6. 重新 ASCII 文件导入到新重新创建表。有关本主题的详细信息,搜索的单词在 Microsoft Access 帮助索引"分隔",然后查看相关主题导入或链接数据和对象。
    7. 重新输入您的任何记录不得不删除。
  6. 如果这种损坏发生在窗体或报表中,损坏可以在窗体或报表本身或在窗体或报表上的一个或多个控件中。可以删除窗体或报表,并从您的数据库的备份副本导入它,也可以使用下列选项之一:
    • 如果这种损坏发生在窗体或报表本身,创建一个新的窗体或报表,然后复制原始窗体或报表中的控件。
    • 如果这种损坏发生在窗体或报表上的控件中,创建一个新的窗体或报表,然后重新创建新的窗体或报表上的控件。最好是重新创建所有控件因为没有判断哪些控件已损坏的方法。
  7. 如果这种损坏发生在宏或模块中,损坏可以在宏或模块本身或在宏或模块的内容。可以删除宏或模块,并从您的数据库的备份副本导入它,也可以使用下列选项之一:
    • 如果这种损坏发生在宏或模块本身,创建一个新的宏或模块,然后复制原来的宏或模块的内容。
    • 这种损坏可能涉及嵌入到模块中的非 ASCII 字符。将模块保存为文本的文件、 删除任何错误或出现了奇怪的数据,然后重新装入一个新的模块的文本文件。
    • 如果这种损坏发生在宏或模块的内容中,您必须创建一个新的宏或模块,然后重新创建原始宏或模块的内容。
如果您不能修复数据库与这些步骤,可能无法修复损坏数据库。这是否大小写应当还原最后一个备份数据库或重新创建数据库。

作为最后一种替代方法某些顾问可以提供一个 Microsoft Access 数据库修复服务。这是此类特殊的服务来查找一名顾问最有效的方法是中有以下的新闻组地址该 Microsoft Access"第三方和用户组"Internet 新闻组发布一条消息:
microsoft.public.access.3rdpartyusrgrp
有关 Microsoft Access Internet 的其他信息的新闻组,请参阅 Microsoft 知识库中下面的文章: 有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
287756压缩数据库后,将不重置自动编号字段

为什么.mdb 文件可能损坏

有三个主要原因为什么.mdb 文件可能损坏,如下所示:
  • 被中断的写入操作
  • 有故障的网络硬件
  • 打开和保存在其他程序中的.mdb 文件

被中断的写入操作

通过单击 文件 菜单上的 退出关闭,您应该始终正确退出 Access。如果数据库是打开和写入数据访问异常关闭时,Jet 数据库引擎可能将数据库标记为置疑/损坏。如果您手动关闭计算机而不先退出 Windows 或如果您丢失电源,就会发生这种情况。其他情况下可能发生,请不要关闭 Access,但是,仍可能会干扰 Jet 数据库处于打开状态时将数据写入磁盘。可能会发生这种情况,例如对于当网络遇到数据冲突或磁盘驱动器出现故障时。如果发生这些中断,Jet 可能会将标记作为潜在地损坏数据库。

当 Jet 开始写入操作时,它设置一个标志和它,然后完成该操作时,将重置标志。如果写入操作被中断,标记将保持设置。当试图再次打开该数据库时 Jet 确定该标志设置,并报告数据库已损坏。 在大多数的情况中数据库中的数据没有实际损坏,但设置标志警报 Jet 的可能发生了损坏。在这种情况下,压缩或修复数据库 (或两者) 可以通常还原数据库。幸运的是,有方法可以确定哪些用户和工作站是负责将该文件标记为置疑。与 Microsoft Visual Basic 应用程序在 Access 中,您可以输出到一个特定的数据库登录的用户的列表。
208449在 Internet 上可用的 Microsoft Access 新闻组
有关如何执行此操作的详细信息请参阅本文后面如何确定哪些用户/工作站会导致文件被标记为置疑部分。

有故障的网络硬件

有时不带所涉及到 Jet 数据库引擎可能会发生损坏。例如对于有故障的网络硬件可能会导致损坏的文件。原因可能是一种或更多数据库所在的计算机和具有数据库的计算机之间的硬件链中的链接打开。此列表包括,但不限于网络接口卡、 网络缆线、 路由器,和集线器。

基于硬件的损坏通常表示.mdb 文件不能通过使用的压缩、 修复,或 $ Jetcomp 还原的。负责硬件被修复或更换之前,通常将重复发生硬件损坏。

打开和保存在其他程序中的.mdb 文件

没有要恢复已打开,然后将其保存在另一个程序中的.mdb 文件的方法。例如对于您可以打开并保存在 Microsoft Word 中的.mdb 文件但如果您要执行此操作,可能永远不会恢复.mdb 文件,从备份副本除外。如果您意外地在另一个应用程序中打开.mdb 文件,一定不能保存它。它真正用途没有在另一个应用程序中打开.mdb 文件,因为如果您执行的操作您看到的全部是一种看起来很随机的系列的字符。

如何确定哪些用户/工作站会导致该文件以标记为置疑

当您排除故障以确定导致数据库损坏,您可能需要查看谁已登录到数据库。与 Microsoft Visual Basic 应用程序在 Access 2002 中或在 Access 2003 中,您可以访问的用户登录到特定数据库的列表。
有关如何执行此操作的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
285822如何确定谁登录到数据库在 Access 2002 中或在 Access 2003 中使用 Microsoft Jet UserRoster

为了防止损坏可以采取的步骤

为了防止数据库损坏:
  • 避免在数据库写入过程中丢失电源。在数据库写操作期间失去电源会导致数据库处于可疑状态。
  • 避免丢弃网络连接。
  • 避免异常终止的 Microsoft Jet 连接 (如断电让任务管理器关闭了的应用程序的手动关闭等等。
  • 当进行编程时关闭所有已打开的 DAO 和 ADO 对象。例如,记录集QueryDefTableDef数据库 对象。
  • 致命系统错误几乎总是会导致异常终止。致命错误您的数据库是否应该解决错误之前打开或恢复数据库变得太损坏。有关如何执行此操作和示例的详细信息,可以使用代码,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    285822如何确定谁通过在 Access 2002 中使用 Microsoft Jet UserRoster 登录到数据库
    有关致命系统错误的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    294301ACC2002: 如何在 Microsoft Windows 2000 上运行的 Access 2002 中的致命系统错误的疑难解答
  • 经常压缩数据库。
  • 不要运行 IPX Microsoft Windows NT 服务器上的喷墨数据库位于网络上并且与 IPX/SPX 的 Microsoft Windows 95 客户端。而是运行 Windows NT 服务器和 $ Win95 客户端上的 IPX 和 TCP IP 双协议堆栈上的 TCP IP。也 (Windows NT 以 Windows NT 使用 IPX/SPX 将不会导致问题,不会 Novell 到任何客户端)。
  • 避免大量的打开和关闭 (多个 40,000 连续的打开和关闭操作可能会导致损坏) 循环中的操作。

已转换的数据库上的特殊注释

在版本的 Access 中早于 Access 2002,如果您已将数据库转换为当前的版本时存在错误时没有简单的方法来判断哪些对象造成影响,并可能包含明显的损坏。

当 Microsoft Access 2002 或更高版本的遇到错误,在转换 Access 文件时,可以通过打开新的 Access 文件中的转换错误表中查看这些错误的摘要。转换错误表包含以下列:

对象类型在 Access 中的数据库对象的类型时遇到错误,或者"数据库"如果 Access 时遇到一个错误,不是特定于特定类型的对象。

对象名称在其中访问时遇到一个错误对象的名称。如果 Access 在转换期间遇到编译错误,但是,不被指定包含错误的模块的名称。

错误说明:如有必要,可以按 SHIFT + F2 来查看整个错误的描述。

参考

有关修复数据库的详细信息的 帮助 菜单上单击 Microsoft Access 帮助、 在 Office 助手或应答向导中,键入 修复,然后单击 搜索 以查看相关主题。 有关疑难解答中早期版本的 Access 数据库的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
209137如何排查和修复损坏的 Jet 4.0 数据库
279334如何修复损坏的 Jet 3.5 数据库
109953如何诊断/修复损坏的 Jet 3.0 和以前的数据库
284152如何排查 Windows Millennium 上运行的 Access 2002 中的致命系统错误

属性

文章编号: 283849 - 最后修改: 2007年5月7日 - 修订: 6.4
这篇文章中的信息适用于:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 标准版
关键字:?
kbmt kbcorrupt kbtshoot kbhowto KB283849 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 283849
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com