排查 dcpromo 复制阶段内部错误消息的问题

本文介绍如何排查在 Active Directory 安装向导的复制阶段收到的内部错误 (Dcpromo) 。

适用于:Windows Server 2019、Windows Server 2016、Windows Server 2012 R2
原始 KB 编号: 265090

注意

家庭用户: 本文仅供技术支持代理和 IT 专业人员使用。 如果正在寻求解决问题的帮助, 请向 Microsoft 社区咨询

摘要

在升级期间,目录服务对象按更新序列号 (USN) (架构、配置和域的低到高) 的顺序进行复制。 如果本地目录服务中不存在复制子对象的父容器,则可能会出现内部错误。

此问题可能发生在以下任一方案中:

  • 有一个实时对象,其父对象过去已删除,父对象已过期并已转换为虚拟。 因此,无法再复制子对象。ReplPrepareDataToShip 中父对象的 FillGuidAndSid 调用不成功,并且报告错误 (8352 = ERROR_DS_NOT_AN_OBJECT) 。 此错误会导致子对象的出站复制退出,并收到复制内部错误消息。

    如果存在具有虚拟父对象的实时 (或删除) 对象,Active Directory 会暂时接受实时对象,因为复制要求无序。 如果父级具有子对象,则磁盘清理过程(如垃圾回收)不应将已删除的对象转换为虚拟对象。 自 Windows 2000 Service Pack 2 (SP2) Ntdsa.dll 文件可防止目录服务中出现这种情况。 但是,此文件在问题发生后无法修复该问题。

  • 使用 Windows Server 2003 或更高版本的 Ntdsutil 工具时,可以使用 权威还原 命令。 Ntdsutil.exe 增加 Active Directory 中指定容器和子对象的 USN。 Ntdsutil.exe 的 Beta 版本可能会错误地增加“丢失和找到”容器的 USN。 在本地目录服务中创建容器之前复制目标为“丢失”和“找到”容器的对象时,将报告以下事件:

    事件 1084:复制失败并出现内部错误

    为了避免这种情况,丢失和找到的容器通常是复制的第一个容器之一。

在正常复制或管理员启动的 Active Directory 复制过程中,现有 Active Directory 域控制器上也可能发生内部错误。

排查此错误消息的步骤

  1. 使用 Active Directory 安装向导) 时,使用网络监视器、事件日志或Dcpromo.log查找在 Active Directory 复制 (期间使用的源服务器。

  2. 如果在使用 Active Directory 安装向导时发生此错误,并且存在多个潜在的复制伙伴,请使用 Active Directory 安装向导应答文件查找源服务器。 可能的源域控制器包括新子域的父域中的域控制器,或复制域控制器的同一域中的域控制器。 或者,如果特定的源服务器可疑,请停止可疑计算机上的 Net Logon 服务,并从其他域控制器进行搜索。

  3. 在源服务器上,找到并单击以下注册表子项:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Diagnostics

    编辑以下值:

    • 9 内部处理:将诊断级别设置为 1。
    • 7 内部配置:将诊断级别设置为 3。
    • 5 复制事件:将诊断级别设置为 3。
  4. 使用注册表编辑器将密钥从源服务器导出\NTDS到正在升级 (的计算机,例如,Ntds.reg) 。 复制发生时,将文件复制到遇到内部错误的计算机。 如果在 Active Directory 安装向导运行时发生内部错误,请将.reg文件复制到有问题的域控制器上的桌面,以便可以轻松启动该文件。

    或者,按 Windows 键+R,然后从焦点位于该文件的暂存资源管理器窗口中拖动.reg文件。 选择“ 确定 ”,将.reg文件的内容添加到注册表。

  5. 当正在升级的计算机开始复制架构命名上下文时,请运行 Ntds.reg 文件来生成 \NTDS\Diagnostics 注册表项和设置。

    警告

    NTDS\Diagnostics 升级阶段不存在注册表项,必须在目标域控制器上手动创建。 NTDS\Diagnostics如果在 Active Directory 安装向导运行时加载注册表项太早,则会用默认值覆盖注册表项,并且不会记录任何事件。 对于现有域控制器,可以随时启用注册表设置。

  6. 检查源服务器和目标服务器上的目录服务事件日志。 内部事件在源服务器上显示为事件 ID 1173。 查看在内部错误之前发生的 NTDS 复制事件,找到要复制的对象的全局通用标识 (GUID) 。 (可能会有背靠背尝试复制同一对象) 。 记录有问题的对象或容器的 GUID。

  7. 启动 Ldp.exe,启动连接,然后针对源服务器进行绑定。 从“ 浏览 ”菜单中选择“ 删除”。 对于可分辨名称路径,请键入 <GUID=GUID=GUID#>,例如 GUID <=b2d605a4-b9e6-4505-ba59-895e91a9a7b5>。 将搜索范围设置为 Base,然后删除指定的 GUID。

  8. 使用 Ldp.exe,将 TombstoneLifetime 属性的值设置为 2, (在删除) 逻辑删除对象之前的几天内的值。 TombstoneLifetime 位于以下可分辨名称路径中:

    CN=目录服务,CN=Windows NT,CN=服务,CN=配置,,DC= 根域,DC=COM

    验证 TombstoneLifetime 属性是否存在,并且其值为 2。 如果该值小于 2,则该值无效,服务器使用默认值 60 天。 (还可以使用 ADSIEDIT 更改此属性。)

    注意

    在等待两天删除逻辑删除的对象后,可能需要再等待 60 分钟或更长时间,然后重新启动域控制器并继续垃圾回收过程。

  9. 在源域控制器上启动垃圾回收。 找到并单击以下注册表项:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Diagnostics key

    编辑以下值:

    • 6 垃圾回收:将诊断级别设置为 3。
    • 9 内部处理:将诊断级别设置为 1。

    若要强制垃圾回收,请重启域控制器。 垃圾回收应在重启域控制器后 15 分钟运行。 诊断级别现在在目录服务事件日志中记录垃圾回收事件。

  10. 若要验证是否已删除对象,请运行以下命令:

    repadmin /showmeta "<"GUID for deleted object">"
    

    如果收到消息:没有此类对象,则表示该对象已成功删除,现在可以成功运行 Active Directory 安装向导。 如果对象尚未经历垃圾回收过程,则应有 isDeleted 属性的元数据。 与 isDeleted 属性关联的时间戳是删除时间。 验证删除时间是否设置为至少两天前,例如:

    repadmin /showmeta "<GUID=b2d605a4-b9e6-4505-ba59-895e91a9a7b>"
    
  11. 解决此问题后,请将诊断日志记录级别重置为 0,并将逻辑删除生存期重新设置为以前,或完全删除该值以提示计算机使用默认值。 TombstoneLifetime 设置对于定义系统状态和 Active Directory 备份的使用寿命至关重要。 当 TombstoneLifetime 设置为 2 时,超过两天的备份磁带将不可用。 必须从备份还原或重新安装已关闭两天或两天以上的任何域控制器。

以下文本是源和目标服务器上的目录服务事件日志中报告的事件示例:

事件类型:信息事件源:NTDS 复制事件类别:复制事件 ID:1240 日期:MM/DD/YY 时间:HH:MM:SS AM|PM 用户:S-1-5-21-1151542997-2719369742-1698538726-500 计算机:computer_source 说明:属性 0 (objectClass) 对象 CN=“NTDS 设置 DEL:51c6913c-9221-4ac4-8513-9155dd7e15ad”,CN=“ZA9902000 DEL:37eabd48-bc9 8-483f-b2fd-9c8869e9c3ce”,CN=Servers,CN=Bull,CN=Sites,CN=Configuration,DC=mma,DC=fr (GUID 51c6913c-9221-4ac4-8513-9155dd7e15ad) 将发送到 DSA 6abec3d1-3054-41c8-a362-5a0c5b7d5d71。

事件类型:警告事件源:NTDS 常规事件类别:内部处理事件 ID:1173 日期:MM/DD/YY 时间:HH:MM:SS AM|PM 用户:S-1-5-21-1151542997-2719369742-1698538726-500 计算机:computer_source 说明:内部事件:发生异常 e0010002,参数 8442 和 20a0 (内部 ID 11003a1) 。

正在升级的计算机上的 Active Directory 安装向导日志中报告了以下文本。 在此示例Dcpromo.log文件中,正在升级的计算机\\computer_promoted在从 \\computer_source 采购时遇到 Active Directory 安装向导中的“内部错误”。 请注意复制三个命名上下文之一时发生的错误 8442 (“复制系统遇到内部错误”) 。 此示例显示配置命名上下文上发生错误:

MM/DD HH:MM:SS [INFO] 复制 CN=Configuration,DC=win2ktest,DC=A,DC=com:收到 1783 个对象中的 917 个。
MM/DD HH:MM:SS [INFO] 复制 CN=Configuration,DC=win2ktest,DC=A,DC=com:收到 1783 个对象中的 1049 个。
MM/DD HH:MM:SS [INFO] 复制 CN=Configuration,DC=win2ktest,DC=A,DC=com:收到 1783 个对象中的 1181 个。
MM/DD HH:MM:SS [INFO] 复制 CN=Configuration,DC=win2ktest,DC=A,DC=com:接收了 1783 个对象中的 1200 个。
MM/DD HH:MM:SS [INFO] 错误 - 目录服务无法从远程服务器computer_source.test.a.com复制分区 CN=Configuration,DC=test,DC=A,DC=com。 (8442)
MM/DD HH:MM:SS [INFO] NtdsInstall for test.a.com returned 8442
MM/DD HH:MM:SS [INFO] DsRolepInstallDs 返回 8442
MM/DD HH:MM:SS [错误] 无法安装到目录服务 (8442)
MM/DD HH:MM:SS [INFO] 启动服务 NETLOGON
MM/DD HH:MM:SS [INFO] 将服务 NETLOGON 配置为 2 返回 0
MM/DD HH:MM:SS [INFO] 搜索计算机帐户forcomputer_promotedon \computer_source.test.a.com...
MM/DD HH:MM:SS [INFO] 配置服务器帐户
MM/DD HH:MM:SS [INFO] NtdsSetReplicaMachineAccount 返回 0
MM/DD HH:MM:SS [INFO] 尝试移动accountcomputer_sourceto CN=GAXGPTS01,CN=计算机,DC=test,DC=A,DC=com