Active Directory 复制事件 ID 2042:自此计算机复制以来一直太久

本文可帮助你排查 Active Directory 复制事件 ID 2042 的问题。

适用于: 支持的 Windows Server 版本
原始 KB 数: 4469622

现象

如果域控制器与其合作伙伴的复制时间超过逻辑删除生存期,则一个或两个域控制器上可能存在一个或两个延迟的对象问题。 Active Directory 林中的逻辑删除生存期确定删除的对象(称为“墓碑”)在Active Directory 域服务(AD DS)中保留多长时间。 逻辑删除生存期由配置目录分区中目录服务对象上的 tombstoneLifetime 属性的值确定。

当导致记录事件 ID 2042 的条件时,源伙伴的入站复制在目标域控制器上停止,事件 ID 2042 记录在目录服务事件日志中。 该事件标识源域控制器以及删除过时域控制器或删除挥之不去的对象以及从源域控制器还原复制所要采取的适当步骤。

下面是事件文本的示例:

日志名称:目录服务
来源:Microsoft-Windows-ActiveDirectory_DomainService
日期: <时间>
事件 ID:2042
任务类别:复制
级别:错误
关键字:经典
用户:匿名登录
计算机: <域控制器主机名>
说明:
自此计算机上次使用命名源计算机进行复制以来,此计算机已过长。 具有此源的复制之间的时间已超过逻辑删除生存期。 此源已停止复制。
不允许复制继续的原因是,两台计算机的已删除对象的视图现在可能不同。 源计算机可能仍具有此计算机上已删除的对象的副本(以及垃圾回收)。 如果允许复制这些对象,源计算机可能会返回已删除的对象。
上次成功复制的时间:
<日期><时间>
源的调用 ID:
<调用 ID>
源名称:
<GUID>._msdcs。<域>
逻辑删除生存期(天): <TSL 数(天)>

复制操作失败。

用户操作:

确定两台计算机中的哪一台计算机已与林断开连接,现在已过期。 有三个选项:

  1. 降级或重新安装断开连接的计算机。
  2. 使用“repadmin /removelingeringobjects”工具删除不一致的已删除对象,然后恢复复制。
  3. 恢复复制。 可能会引入不一致的已删除对象。

可以使用以下注册表项继续复制。
系统复制一次后,建议删除密钥以恢复保护。
注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Allow Replication With Divergent and Corrupt Partner

repadmin /showrepl 命令还会报告错误 8416,如以下示例所示:

源:Default-First-Site-Name\DC1
<自日期><时间以来<的连续失败次数>>
上次错误:8614(0x21a6):
Active Directory 域服务无法使用此服务器进行复制,因为自上次使用此服务器复制以来的时间已超过逻辑删除生存期。

原因

记录事件 ID 2042 的一些潜在原因包括:

  • 域控制器存在导致复制失败的软件问题。
  • 已存在的复制失败时间超过配置的逻辑删除生存期值。
  • 系统时间提前或回滚,导致对象在某些域控制器上删除,而不是所有域控制器。

解决方法

此问题的解决取决于问题的实际原因或原因。 若要解决此问题,请检查以下每个条件:

  1. 确定是否允许任何复制失败超过林的墓碑生存期。 通常,默认情况下,林的墓碑生存期为 60 到 180 天。 事件消息指示当前配置的林的逻辑删除生存期。

    运行该命令 repadmin /showrepl 以确定是否存在复制问题。 如果怀疑存在复制问题,请参阅 “使用 Repadmin 监视和排查 Active Directory 复制问题”,了解如何解决此问题。

  2. 确定是否存在挥之不去的对象。

    检测和删除挥发对象的首选方法是使用 Lingering Object Liquidator v2 (LoLv2)。 在某些情况下,无法使用 LoLv2,可以使用 Repadmin.exe

    有关 LoLv2 的详细信息,请参阅:

    为此,可以在公告模式下运行命令 repadmin /removelingeringobjects ,如以下过程所述。

必须首先标识权威域控制器。 如果知道特定域控制器具有最新更改,则可以使用该域控制器作为权威域控制器。 否则,可能需要在多个域控制器上完成以下过程,直到你确定你认为有最新更改的域控制器。 然后,可以将该域控制器用作权威域控制器。

若要完成该过程,必须至少具有 Domain Admins 的成员资格或同等权限。 查看有关 Active Directory 本地组和域默认组的默认组成员身份的详细信息。

标识挥之不去的对象

  1. 在需要进行最新更改的域控制器上,打开提升的命令提示符窗口。 若要打开提升的命令提示符窗口,请单击“开始”、指向“所有程序”、单击“附件”、右键单击“命令提示符”,然后单击“以管理员身份运行”

  2. 在咨询模式下运行以下 repadmin 命令。 这使你能够评估挥之不去的对象,而无需实际删除任何内容。

    控制台
     repadmin /removelingeringobjects <DestDCName> <SourceDCGUID> <LDAPPartition> /advisory_mode
    

    在命令语法中将以下项替换为占位符:

    • DestDCName:要针对的域控制器的主机名,用于清理对象。 例如,如果要从 contoso.com 域中的 DC1 中删除挥发对象,请替换为 dc1.contoso.com <DestDCName>。

    • SourceDCGUID:运行以下命令:

      控制台
      repadmin /showrepl AuthDCname |more
      

      其中,AuthDCname 是你选择为权威的域控制器的主机名。 替换为 SourceDCGUID 显示 <的第一个 DSA 对象 GUID>。

    • LDAPPartition:要定位的分区的轻型目录访问分区(LDAP)名称。 例如,如果挥发对象位于域的 contoso.com 域分区中,请将 dc=contoso,dc=com 替换为 <LDAPPartition>。

下面是用于标识挥之不去对象的示例命令:

控制台
repadmin /removelingeringobjects dc1.contoso.com 4a8717eb-8e58-456c-995a-c92e4add7e8e dc=contoso,dc=com /advisory_mode

如有必要,请对其他域控制器重复上述步骤,直到确定你认为有最新更改的域控制器。 使用该域控制器作为权威域控制器。 repadmin /removelingeringobjects在没有开关的情况下/advisory_mode运行命令,以实际删除挥之不去的对象。 根据需要重复该命令,从具有这些对象的每个域控制器中删除挥发对象。

在事件 ID 2042 之后重启复制

复制的正常状态是一种更改对象及其属性以域控制器接收最新信息的方式聚合。 当发现合作伙伴域控制器传递较旧的更改时,来自合作伙伴的更改被视为“分化”。据说合作伙伴从事“分化复制”。域控制器通常会停止与任何被认为参与不同复制的合作伙伴复制。

删除所有挥发对象后,可以通过编辑注册表在记录事件的域控制器上重启复制。

备注

仅在删除所有挥发对象后重启复制。 注册表编辑不当可能会严重损坏系统。 在更改注册表之前,应备份计算机上任何有价值的数据。

若要完成该过程,必须至少具有 Domain Admins 的成员资格或同等权限。 查看有关 Active Directory 本地组和域默认组的默认组成员身份的详细信息。

使用 Repadmin 在事件 ID 2042 之后重启复制

  1. 打开提升的命令提示符。 若要打开提升的命令提示符窗口,请单击“开始”、指向“所有程序”、单击“附件”、右键单击“命令提示符”,然后单击“以管理员身份运行”

  2. 在命令提示符下,键入以下命令,然后按 Enter:

    控制台
    repadmin /regkey <hostname> +allowDivergent
    
    参数 说明
    /regkey 启用 (+) 并禁用 中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters严格复制一致性注册表项的值
    <hostname> 替换单个域控制器的名称,或使用星号字符 • 将更改应用于林中的所有域控制器。 对于域控制器名称,可以使用域名系统(DNS)名称、域控制器计算机对象的可分辨名称或域控制器服务器对象的可分辨名称。
    +allowDivergent 使复制能够再次启动具有挥之不去对象的复制伙伴。 只有在删除了所有挥发对象之后,才应运行此命令。 复制再次正常运行后,请使用 -allowDivergent 开关防止发生不同复制。

备注

如果未使用星号字符 \ 将更改应用于所有域控制器,请对要允许不同复制的每个域控制器重复步骤 2。

重置注册表以防止过时的复制

如果确信删除了徘徊对象,并且已成功从源域控制器进行复制,请使用 Repadmin 来防止不同的复制。 若要防止分化复制,请运行以下命令:

控制台
repadmin /regkey <hostname> -allowDivergent

例如,若要限制 contoso.com 域中名为 DC1 的域控制器上的不同复制,请运行以下命令:

控制台
repadmin /regkey dc1.contoso.com -allowDivergent

备注

如果未删除所有挥发对象,尝试复制可能会导致复制挥之不去的对象。 如果在目标域控制器上启用了严格的复制一致性,则会再次阻止使用源域控制器进行复制。

数据收集

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