排查 Jet 数据库错误和恢复步骤

本文介绍 Jet 数据库错误消息和故障排除步骤。

原始 KB 数: 4042791

总结

在操作系统启动、域控制器安装/卸载或 Active Directory 复制期间,可能会遇到 Jet 错误消息。 本文介绍 Jet 错误消息及其解决方案。

错误消息

-501 JET_errLogFileCorrupt

原因

硬件在写入时损坏了 I/O,或者硬件 刷新丢失 导致日志不可用。 通常,数据库(DB)处于损坏状态。

解决方法

从已知良好的备份还原数据库,或重新安装域控制器(DC)。

-510 JET_errLogWriteFail/写入日志文件失败

原因

发生日志写入失败。 此问题可能由以下任一原因引起:

  • 控制器、硬盘驱动器或其他硬件停止响应磁盘命令。
  • 软件(如防病毒软件)在 Active Directory 日志文件上创建了锁。

解决方法

  1. 如果这是硬件问题,则重启服务器将还原访问权限。 如果问题经常发生,可以按该顺序升级固件、更换控制器或更换磁盘。

  2. 对于由于软件而导致的问题,请停止在文件系统中的文件上创建锁的服务。 例如,确定防病毒软件是否导致 Active Directory 日志文件锁定。 确保已将正确的文件添加到防病毒排除列表。 Windows Server 2016 自动从防病毒扫描中排除某些文件和文件夹,请参阅 自动排除项列表。 有关 Windows Server 2012 R2,请参阅:

如果步骤 1 和步骤 2 未解决问题,请通过禁用这些方法来确定非Microsoft应用程序或服务是否导致问题。 为此,请按照下列步骤进行操作:

  1. 按 Windows 键 + R。输入 MSCONFIG ,然后单击“ 确定”。 在 “服务 ”选项卡上,选择“ 隐藏所有Microsoft服务”。 清除第三方服务的复选框。
  2. 禁用所有已启用的启动项。
  3. 重新启动服务器。

-528 JET_errMissingLogFile

原因

这可能是由于停电或其他意外关闭导致的意外关闭造成的。 其他原因包括管理员对日志文件的更改(例如复制旧副本)或损坏的备份/还原软件(如果在还原后立即)。

解决方法

从已知良好的备份还原数据库,或重新安装 DC。

-543 JET_errRequiredLogFilesMissing

请参阅 -528 / JET_errMissingLogFile(上图)。

原因

管理员在关闭时修改了日志或丢失了 I/O 刷新。

-550 JET_errDatabaseDirtyShutdown

原因

管理员在关闭时修改了日志或丢失了 I/O 刷新。

-551 JET_errConsistentTimeMismatch

原因

管理员在关闭时修改了日志或丢失了 I/O 刷新。

-567 JET_errDbTimeTooNew

原因

磁盘子系统丢失了 I/O,可能在挂起或计划外关闭时丢失。

解决方法

验证磁盘缓存的电池备份。

-1018 JET_errReadVerifyFailure/数据库页上的校验和错误

原因

由于硬件故障,DB 已损坏。

解决方法

  • 评估磁盘堆栈,包括主板/控制器、固件、连接电缆和物理驱动器,并联系相关供应商以了解已知问题。 将当前配置与供应商的参考配置进行比较。
  • 评估问题是否可以由最新的固件更新解决,还是由最近的固件更新触发。
  • 如果某些 DC 正在记录 -1018,而同一环境中的其他 DC 则不记录,请查找硬件配置的差异。
  • 无法通过 NTDSUTIL 或 ESENTUTL 中的完整性检查或语义数据库分析来恢复或修复记录此错误的数据库。
  • 脱机碎片整理可能会修复该问题,因为问题不太可能是由于索引一致性问题造成的。
  • 请尝试脱机碎片整理。 或者,还原早于损坏的系统状态备份。 或者强制降级、执行完整的元数据清理和重新编写。 如果出现 -1018 错误,请重复,直到硬件根本原因得到解决。

当 Jet 错误 -1018 发生在仅在使用板载突袭控制器的计算机上运行的虚拟化 DC 上时,可能会发生此错误,因为不可中断的电源(UPS)缺少足够的电源,板上突袭控制器在断电后提交磁盘更改。 解决方法是配置 UPS 软件,以在断电时关闭虚拟化来宾。 具有专用(非板载)突袭控制器且其自己的电池备份的服务器不会遇到 -1018 JET 错误。

-1019 JET_errPageNotInitialized/空白数据库页

原因

这类似于 -1018 错误,但由于页面刷新丢失。

丢失的刷新可以表示关键的 USN 更改。 如果存在单个复制路径,则无法将相同的更改应用到本地 DC 或可传递复制伙伴。

解决方法

在服务器类硬件和磁盘子系统组件上部署 OS。

  • 在主计算机上安装 UPS。
  • 安装具有板载电池备份的磁盘控制器。
  • 禁用驱动器控制器上的写回缓存。
  • 避免放置 NTDS。IDE 驱动器上的 DIT 和日志文件。

无法通过 NTDSUTIL 或 ESENTUTL 中的完整性检查或语义数据库分析来恢复或修复记录此错误的数据库。

脱机碎片整理可能会解决该问题,因为问题不太可能是由于索引一致性问题造成的。

请尝试脱机碎片整理。 或者,还原早于损坏的系统状态备份。 或者,强制降级,执行完整的元数据清理,然后重新编写。 重复,直到解决硬件根本原因。

-1021 JET_errDiskReadVerificationFailure/ 从文件 IO 返回的 OS ERROR_CRC

从 Windows Server 2008 R2 起,Jet 错误 -1021 是新的。 早于 Windows Server 2008 R2 的 Windows 版本将改为返回 -1022。

-1021 标识磁盘级别发生的 -1018 错误。 换句话说,-1021 表示磁盘驱动器返回了错误的检查和错误,并且是磁盘堆栈中问题的特定来源。

原因

问题可能是硬盘上存在错误的块,硬盘驱动器可能会跟踪。

解决方法

删除和重新安装域控制器上的 Active Directory 可能会触发在正常块上存储数据。

-1022 JET_errDiskIO/磁盘 IO 错误

原因

通用磁盘错误。 磁盘 IO 错误意味着 OS 在访问磁盘时遇到非特定错误。 当控制器返回常规错误(如“设备不起作用”)时,可能会记录此错误。某些磁盘和 Jet 版本会针对 CRC 问题返回此错误。

解决方法

验证整个驱动程序堆栈。

-1206 JET_errDatabaseCorrupted

原因

此错误与缺少/损坏的日志文件相同。 此错误表示 发生了丢失的刷新

-1216 JET_errAttachedDatabaseMismatch

原因

管理员在关闭时修改了日志或丢失了 I/O 刷新。

-1605 JET_errKeyDuplicate/非法重复密钥

原因

偶发错误。 此错误可能是由于索引损坏造成的。

解决方法

在 DC 上删除并重新安装 Active Directory。 运行 NTDUSITL 语义数据库分析。 如果问题仍然存在,请执行脱机碎片整理。

-1811

原因

管理员在关闭时修改了日志或丢失了 I/O 刷新。

疑难解答

可以使用这些方法来排查 Jet 数据库错误:

  1. 验证是否在所有 Active Directory 数据库和日志文件都部署在合适的硬件上。

    许多但并非所有 SATA 和 IDE 驱动器都不支持写入刷新命令。 SAS 驱动器确实支持它。

    Active Directory 数据库和日志文件应在任何写入缓存元素上具有电池备份的 SAS 控制器 DC 上使用 SAS 驱动器。

  2. 如果0xc00002e1(c00002e1)和0xc00002e2(c00002e2)是在 Windows Server 2012 Hyper-V 主机上运行的虚拟来宾域控制器,请在 Hyper-V 主机服务器根据需要在主机和来宾 DC 上遇到计划外重启时,安装与 IDE 附加虚拟硬盘的一致性丢失的纠正修复

  3. 检查 LSASS 0xc00002e1(c00002e1)和0xc00002e2(c00002e2)启动错误之前的事件是否指示以下问题之一:

    • 未计划的停电。
    • 系统挂起。
    • 安装 Windows 更新或 Service Pack 安装。
    • 向本地系统添加或删除磁盘、卷或分区。
    • 硬盘驱动器故障。
    • NTDS。DIT 或一个或多个日志文件是从另一台计算机复制的,甚至从此 DC 生命中的上一点复制。
    • 未知
  4. 将计算机启动到目录服务还原模式。

  5. 最佳做法:创建系统状态备份,以便回滚在恢复会话期间所做的任何更改。

  6. 最佳做法:让管理员提前找到最新的系统状态备份,以便可以将系统状态备份的存在或不存在因素纳入恢复计划。 如果可能,让管理员委托任何备份的位置。

  7. 运行 NTDSUTIL -> 文件 -> 信息。

    注意

    NTDS 的路径。DIT 和日志文件。

  8. 验证托管 NTDS 的驱动器。OS 启动时提供 DIT 或日志文件。

  9. 打开 Windows 资源管理器并验证 NTDS。DIT 和日志文件存在于步骤 7 报告的日志文件路径中。

    如果文件存在,请继续执行步骤 10。

    如果文件不存在,请搜索 NTDS 的所有可用驱动器和卷。属于此 Active Directory 实例的 DIT 和日志文件。

    警告

    可能有多个 NTDS。本地驱动器上存在的 DIT 和日志文件。 使用日期和时间戳查找正确的实例。

    根据需要更正数据库和日志文件路径的路径。

  10. 验证有关 OS 版本的文件权限。

    注意

    OS 需要对 Windows Server 2003 拥有足够的权限。

    帐户 权限 继承
    系统 完全控制 此文件夹、子文件夹和文件
    Administrators 完全控制 此文件夹、子文件夹和文件
    Creator Owner 完全控制 仅子文件夹和文件
    Local Service 创建文件夹/追加数据 此文件夹和子文件夹
    • 承载 NTDS 的卷的根目录。DIT 和 NTDS 日志文件(系统需要完全控制)
    • %windir% 文件夹 (即 c:\windows 或 c:\winnnt) (系统需要完全控制)
    • 承载 NTDS 的文件夹。DIT 和 NTDS 日志文件(请参阅下面的权限表)
    • NTDS 日志文件本身(请参阅下表中的 perms 表)
  11. 验证正确的日志文件是否驻留在日志文件目录中:

    NTDSUTIL /FILES 将标识数据库目录和日志文件目录(如果不同)。 NTDSUTIL /MH 将标识日志文件目录中需要哪些日志文件。

    在任何情况下,将数据库或日志文件从一个 DC 复制到另一个 DC,以使第二个 DC 正常运行。

  12. 确认未在任何托管 NTDS 的卷上启用磁盘或文件压缩。DIT 或日志文件卷。

  13. 验证 NTDS 中数据库的运行状况。DIT 从下到上。

    从下到上验证 Jet 数据库运行状况。 仅当基础层完成且没有错误时,才继续下一层。

    排查 ESE 逻辑或应用程序逻辑一致性报告的任何错误时,物理一致性仍然失败将导致出现不正确的故障排除路径。

    后面每个命令的等效 NTDSUTIL 和 ESENTUTL 命令如下所示:

    NTDSUTIL 命令 ESENTUTL 等效命令
    1. 物理一致性 无等效项 ESENTUTL /K
    2. ESE 逻辑一致性 NTDSUTIL 文件完整性 ESENTUTL /G
    3. 应用程序逻辑一致性
    NTDSUTIL ->Semantic 数据库分析

    +

    NTDSUTIL -> 脱机碎片整理
    无等效项。 运行 NTDSUTIL -> SDA

    +

    ESENTUTL / D
  14. 查找在步骤 13 期间遇到的第一个失败 Jet 错误的用户操作。 如果可能,请执行修正。

  15. 修复 Jet 数据库:

    • 可以使用 NTDSUTIL 和 ESENTUTL 修复某些 Jet 数据库错误。
    • 无法修复某些 Jet 数据库错误,任何修复错误的尝试都将失败。 在这种情况下,唯一的追索可能是还原早于损坏的系统状态备份,或生成新服务器。 如果副本 DC 是最新的,则尝试缓解任何硬件或软件相关错误的根本原因后,导致将其他副本提升到域中。

    注意

    NTDS 常规事件 1168 中返回的 Jet 错误是应用程序层错误。 除非 Jet 物理一致性和应用程序逻辑一致性检查(按该顺序测试),否则不要处理此 Jet 错误。

更多信息

有关详细信息,请参阅以下Microsoft文章:

域控制器未启动,出现 c00002e2 错误,或显示“选择选项”

什么是丢失的 IO/丢失刷新

当应用程序将数据写入磁盘时,磁盘指示写入操作成功。 但是,当应用程序尝试读取它刚刚写入的数据时,数据不存在。 此问题称为丢失 I/O 或刷新丢失。

数据收集

如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集 Active Directory 复制问题的信息中所述的步骤收集信息。