排查 AD 复制错误 8240:“服务器上没有此类对象”

本文讨论失败并生成 Win32 错误 8240 的Active Directory 域服务(AD DS)操作的症状、原因和解决方法:“服务器上没有此类对象。

备注

主用户: 本文仅适用于技术支持代理和 IT 专业人员。 如果你正在寻找解决问题的帮助, 请询问Microsoft社区

适用于: 所有受支持的 Windows Server 版本
原始 KB 数: 2680976

现象

错误 8240 (0x2030 或 ERROR_DS_NO_SUCH_OBJECT) 指示无法在 AD DS 中找到特定对象。 此错误可能发生在两个单独的情况下,这些情况在不同条件下表现出不同的症状。 本部分介绍主要症状以及可能会遇到这些症状的方式。

情况 1:域控制器在查找全局目录时生成 NTDS 事件 ID 1126

域控制器在其目录服务事件日志中记录 NTDS 常规事件 ID 1126。 事件数据列出了错误 8240:

事件类型:错误
事件源:NTDS 常规
事件类别:全局编录
事件 ID:1126
日期: <DateTime>
时间: <DateTime>
用户:NT AUTHORITY\ANONYMOUS LOGON
计算机:ComputerName
说明:
Active Directory 无法与全局目录建立连接。

其他数据
错误值:
8240 服务器上没有此类对象。
内部 ID:
3200ba0

情况 2:域控制器在 AD DS 操作期间生成错误 8240

下表列出了你可能会看到错误 8240 的条件。

操作 症状
在 Windows 命令提示符处运行 Repadmin /ShowReps 该命令。 会看到类似于以下消息的输出:

<SiteName>\<DCName>
objectGuid: <GUID>
上次尝试 @ <时间> 失败,结果 8240:
服务器上不存在该对象。
最后的成功 @ (从不)。
使用 Active Directory 站点和服务(dssite.msc)中的“立即复制”命令强制域控制器跨所选连接进行复制。 你会看到类似于以下消息的消息:

尝试将命名上下文命名>上下文<从域控制器 <Source-DCName 同步到域控制器 <Destination-DCName>> 期间发生以下错误:
服务器上不存在该对象。 此操作不会继续。
尝试从域控制器中删除 Active Directory。 Active Directory 安装向导中收到以下错误消息:

Active Directory 无法将目录分区<命名上下文>中的剩余数据传输到域控制器 <DCName> “服务器上没有此类对象。

备注

上表使用以下变量:

  • <SiteName>:域控制器所属的站点。
  • <DCName>:域控制器的名称。
  • <GUID>:生成错误的对象的 GUID。
  • <命名上下文>:生成错误的对象的命名上下文。
  • <Source-DCName>:将对象复制到另一个域控制器的域控制器的名称。
  • <Destination-DCName>:接收复制对象的域控制器的名称。

情况 1 的原因和解决方案:域控制器在查找全局目录时生成 NTDS 事件 ID 1126

当 Windows 执行诸如查找通用组成员身份等任务时,系统依赖于具有全局编录角色的域控制器(称为全局编录服务器或 DC)。 如果系统找不到可用的 GC,它会在 NTDS 事件日志中记录事件 ID 1126。 该事件包括错误代码 8240。

有关 GCS 的详细信息,请参阅 规划全局编录服务器放置

检查现有 GC

执行以下步骤:

  1. 检查林是否具有 GC。 例如,在林中的计算机上的 Windows PowerShell 窗口中,运行以下命令:

    PowerShell
    Get-ADDomainController -Discover -Service "GlobalCatalog"
    
  2. 执行下列其中一项操作:

    • 如果命令识别了至少一个 GC,请检查 GC 与生成事件的域控制器之间的通信问题。
    • 如果命令找不到 GC,请继续执行下一过程,将 GC 添加到林。 否则,请转到 检查 GC 连接性和可用性

将 GC 添加到林

可以通过创建新的域控制器并将其指定为 GC 来添加 GC。 若要将全局编录服务器角色添加到现有域控制器,请执行以下步骤:

  1. 打开 Active Directory 站点和服务(dssite.msc,也可在 服务器管理器 中的“工具”菜单上使用)。

  2. 展开 “站点”,展开站点,然后选择要修改的域控制器。

  3. 在右窗格中,右键单击 “NTDS 站点设置”,然后选择“ 属性”。

  4. “常规 ”选项卡上,选择“ 全局目录”,然后选择“ 确定”。

    备注

    在 Active Directory 站点和服务中将域控制器标记为 GC 后,新 GC 可能需要一段时间才能完全可用。 知识一致性检查器(KCC)必须计算新的复制拓扑,生成全局目录,并传输 GC-ready 公告。 延迟取决于复制计划、用于复制所需只读命名上下文的时间以及 KCC 活动的间隔。

检查 GC 连接性和可用性

  1. 检查是否可以从 DNS 获取域控制器。 在域中的计算机上,打开命令提示符窗口,然后运行以下命令:

    控制台
    NLTest.exe /DnsGetDC:<DomainName> /GC /Force
    

    备注

    在此命令中, <DomainName> 表示新 GC 的域的名称。

    如果无法在 DNS 中查询 GC 记录,请检查 isGlobalCatalogReady 属性的值。 为此,请执行以下步骤之一:

    • 打开 PowerShell 窗口,然后运行以下命令:

      PowerShell
      Get-ADRootDSE -Server <GC_Name> | fl serverName , isGlobalCatalogReady
      

      备注

      在此命令中, <GC_Name> 表示 GC 的名称。

    • 打开“命令提示符”窗口,然后运行以下命令:

      控制台
      ldp.exe <GC_Name>:389
      

    在任一情况下,isGlobalCatalogReady 的值都应为 TRUE。 如果值为 FALSE,则复制周期尚未完成,或者另一个问题正在影响服务器。

  2. 检查是否可以使用端口 3268 连接到 GC。 在命令提示符处运行以下命令:

    控制台
    ldp.exe <GC_Name>:3268
    

    备注

    • 在此命令中, <GC_Name> 表示 GC 的名称。
    • 如果在步骤 1 中使用了ldp.exe,请将其关闭,然后使用新端口再次启动它。

原因和解决方案的情况 2:域控制器在 AD DS 操作期间生成错误 8240

在 AD DS 林中,每个域控制器维护有关林对象的信息。 对对象的任何更改都从单个(源)域控制器开始。 从那里,更改将复制到源域控制器的复制合作伙伴(目标域控制器)。 这些域控制器进一步复制更改,最终所有域控制器都对更新的对象“知道”。 两个与错误 8240 相关的域控制器之间的复制过程遵循以下步骤:

步骤 1: 源域控制器通知目标域控制器更改。

步骤 2: 收到通知后,目标域控制器将从源域控制器拉取更改。

步骤 3: 每个目标域控制器查找对象的本地副本以应用更改。

步骤 4: 如果目标域控制器找不到对象的本地副本,则会生成错误 8240。

由于以下原因,可能缺少该对象:

  • 源域控制器上的对象是一个 挥之不去的对象。 这意味着对象已从林中删除,但出于某种原因,源域控制器从未收到此更改。 此外,在源域控制器恢复复制之前,对象的逻辑删除生存期 (TSL) 已过期。
  • 在所有目标域控制器可以拉取更改之前,源域控制器已降级。 但是,更改将复制到 GC。

确定受影响的域控制器并选择解决方案

解决此问题的第一步是了解哪些数据不一致,哪些域控制器受到影响:

在复制事务中,生成错误 8240 的域控制器是目标域控制器。 此域控制器上不存在不一致的对象,但存在于源域控制器上。 在某些上下文中,错误 8240 的文本标识源域控制器。 在其他人中,它不是。 在复杂的复制拓扑中,可能需要使用 Active Directory 站点和服务以及目标控制器的事件日志来验证源域控制器的身份。 此外,可以使用这些工具来识别源域控制器的其他复制合作伙伴,这些合作伙伴可能会报告相同的问题。

接下来,确定是要删除这些对象,保留这些对象,还是重置受影响的域控制器。 以下部分提供了每个选项的详细信息:

选项 1:从源域控制器中删除不一致的对象

若要删除不一致的对象,可以将它们视为挥之不去的对象。 建议使用 Lingering Object Liquidator v2 (LoLv2) 删除挥之不去的对象。 有关 LoLv2 的详细信息,请参阅:

在某些情况下,无法使用 LoLv2。 相反,可以使用 Repadmin.exe。 可以通过在公告模式下运行 repadmin /removelingeringobjects 命令来执行此操作,如 Active Directory 复制事件 ID 2042 中所述 :自此计算机复制以来已过长:标识挥之不去的对象

有关徘徊对象的详细信息,请参阅 如何检测和删除 Windows Server Active Directory 林中的挥霍对象。

选项 2:保留不一致的对象并将其集成到林中

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

如果要保留不一致的对象并将其复制到林的其余部分,请在目标域控制器上配置以下注册表项:

  • 子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
    名称:Strict Replication Consistency
    类型:REG_DWORD
    数据: 0

  • 子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
    名称:Allow Replication With Divergent and Corrupt Partner
    类型:REG_DWORD
    数据: 1

    子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
    名称:Correct Missing Object
    类型:REG_DWORD
    数据: 1

更新这些注册表项后,允许更改复制到源域控制器的时间。 或者,可以使用 Active Directory 站点和服务中的“立即复制 ”命令来强制源域控制器使用特定连接将更改复制到目标域控制器。

重要

在包含许多域控制器的大型环境中小心。 当不一致的对象通过林进行复制时,它们可能会导致更多的域控制器报告 8240 错误,直到复制完成。

选项 3:删除并重新创建不一致的域控制器

另一个选项是强制从源域控制器中删除林,方法是将其降级到成员服务器。 然后,清理林中的服务器元数据,然后重新升级服务器。 此操作将重新安装 AD DS。 然后,林数据的新副本将复制到新的域控制器。

若要删除并重新创建源域控制器,请执行以下步骤:

  1. 在源域控制器上,打开管理 PowerShell 窗口,然后运行以下命令:

    PowerShell
    Uninstall-ADDSDomainController -Force
    

    备注

    还可以使用服务器管理器中的“删除角色和功能”向导来执行此任务。 在向导中,请确保选择“ 强制删除此域控制器”。 有关详细信息,请参阅 降级域控制器和域:凭据

  2. 在林中,清理与降级的域控制器相关的元数据。

    备注

    元数据清理有几种可能的方法。 有关详细信息,请参阅以下文章:

  3. 再次将服务器提升为域控制器。 可以使用 服务器管理器 或 Powershell 来提升服务器。 建议使用用于创建原始域控制器的方法和选项。

  4. 等待安装和升级过程完成,并等待林数据复制。 可以使用事件查看器来遵循此过程。

为Microsoft 支持部门收集数据

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

详细信息

有关详细信息,请参阅 无法将 Windows Server 域控制器提升到全局编录服务器