Active Directory 复制事件 ID 2108 和 1084 在 Active Directory 域服务的入站复制期间发生

本文提供了一个解决方案,当 Active Directory 域服务 (AD DS) 发生入站复制时,会出现事件 ID 2108 和 1084。

适用于:  Windows Server 2016,Windows Server 2012 R2
原始 KB 编号:   837932

症状

发生 Active Directory 域服务 (AD DS) 的入站复制时,通过 Windows Server 2016 运行 Microsoft Windows Server 2003 Service Pack 1 (SP1) 的目标域控制器在目录服务日志中记录以下事件:

事件 ID 1084:内部事件:Active Directory 域服务无法用从以下源目录服务收到的更改更新以下对象。 这是因为在目录服务上对 Active Directory 域服务应用更改期间发生错误。

对象:CN=<cn path>

对象 GUID: <objectguid>

源目录服务:NTDSA._msdcs。<forst root DNS domain name>

在更正此更新问题之前,将阻止目录服务与源目录服务的同步。

将在下一次计划复制时再次尝试此操作。

用户操作:

如果此条件似乎与低系统资源(例如, (或虚拟内存不足)相关,请重新启动本地) 。

其他数据:

错误值: <error code><error string>

备注

  • In the Error value text, <error code> and represent the actual values that are shown in the log <error string> entry.
  • 自 2000 Server 以来,已记录Windows 1804。

运行 Windows Server 2003 SP1 的目标域控制器还会在目录服务日志中记录以下事件:

事件 ID 2108:此事件包含以前记录过的 1084 事件的 REPAIR 过程。 此消息指示此复制目标上 Active Directory 域服务数据库的一致性存在特定问题。 将复制的更改应用于以下对象时发生数据库错误。 数据库包含意外内容,导致无法做出更改。

备注

  • 安装 SP1 后,事件 2108 Windows Server 2003 上登录。
  • 这是事件 1084 的合作伙伴事件。

原因

当域控制器无法将事务性更改写入 Active Directory 数据库的本地副本时,将发生这些事件。

解决方案

若要解决此问题,请按照以下步骤操作。 在每个更改步骤后重试复制操作。

  1. 请确保托管 Active Directory 数据库的卷上有足够的可用磁盘空间,然后重试该操作。 按照以下步骤释放额外的磁盘空间:

    1. 将不相关的文件移动到另一个卷。

    2. 执行系统状态备份。 此过程可以减少事务日志文件的大小。 有关详细信息,请参阅如何使用备份功能在Windows Server 2003 中备份和还原数据

    3. 执行 Active Directory 的脱机碎片整理。 有关详细信息,请参阅 如何对 Active Directory 数据库执行脱机碎片整理

  2. 确保托管 Ntds.dit 文件和事务日志文件的物理驱动器未打开 NTFS 文件系统压缩。 若要确认这一点,请右键单击"我的计算机"中的驱动器号,然后确保未选中"压缩驱动器以节省磁盘空间"复选框。

  3. 确保专门将托管 Ntds.dit 文件和事务日志文件的物理驱动器从远程和本地防病毒程序中排除。 有关详细信息,请参阅防病毒软件文档。

  4. 如果目标域控制器包含全局编录,并且该错误发生在一个只读分区中,请使用下列方法之一来帮助解决问题:

    • 方法 1:使用 Repadmin.exe 的 rehost 选项来重新获得受影响的分区。

      the Repadmin.exe tool is installed on computers that have the domain controller role, and is installed with the RSAT tool on member workstations and servers. 为此,在命令提示符处键入以下内容,其中 domain_controller 是目标域控制器的名称,good_source_domain_controller_name 是另 一个域控制器的名称:

      repadmin /rehost domain_controller naming_context good_source_domain_controller_name
      
    • 方法 2:配置域控制器,以便它不再是全局编录服务器。 请按以下步骤操作:

      1. 单击 "开始",指向"管理工具", 然后单击 "Active Directory 站点和服务"。
      2. 找到 "默认-第一站点名称服务器"domain_controller_name \ \ \ NTDS 设置 树。
      3. 右键单击 "NTDS 设置", 然后单击"属性 "。
      4. 单击以清除"全局编录"复选框,然后单击"确定 "。
    • 方法 3

      如果错误发生在程序分区中,请使用 Ntdsutil.exe 工具更改托管程序分区的副本。

  5. 使用第三方实用工具(如 FileMon 实用工具)来确定程序或用户是否正在访问 Active Directory 数据库、事务日志文件或 Edp.tmp 文件。 如果存在文件访问活动,请停止负责该活动的服务。 有关 FileMon 实用工具详细信息,请参阅FileMon for Windows v7.04。

  6. 确定问题是否与目标域控制器上 Active Directory 对象的父级相关。 为此,请按照下列步骤操作:

    1. 在源域控制器上,将事件 1084 中引用的对象临时移动到组织单位 (OU) 容器中。 OU 必须与当前容器无关。 例如,将对象移动到域根目录外的新容器。

    2. 如果在移动对象后完成复制,则将该对象移回其原始容器。

    3. 强制安全描述符传播器在源域控制器和目标域控制器上存在的数据库中重新构建对象容器 ancestry。 为此,请按照下列步骤操作:

      1. 确保安装了 Windows Server 2003 支持工具。 支持工具位于 support\Tools 文件夹中的 Windows Server 2003 CD-ROM 上。 双击文件Suptools.msi安装工具。

      2. 单击 "开始",单击 "运行",键入 ldp, 然后单击"确定 "。

      3. 单击 " 连接 连接, 然后单击"连接",然后键入要连接到的服务器的名称。

        备注

        您将通过 Active Directory 的端口 389 进行连接。

      4. 单击 "连接**",** 单击"绑定",然后键入您的管理用户名、密码和域。 (必须使用域管理员或企业管理员凭据。) 确定 "。

      5. 在"浏览"菜单 上,单击"修改"。"DN" 文本框留空。 在" 属性" 文本框中,键入 FixUpInheritance。 在 "值**"文本框中单击"** 是"。

      6. 在"操作" 区域中,单击"添加 "。

      7. 单击 Enter 以填充 "条目列表" 区域。

        备注

        在条目 列表区域中将显示 [Add]fixupinheritance:yes。

      8. 单击 "运行"

        备注

        右窗格现在显示 "已修改" 状态,安全描述符传播器将启动。 安全描述符传播器的运行时取决于 Active Directory 数据库的大小。 当 NTDS Performance 对象中的 DS 安全传播事件 计数器返回零时,此过程即完成。

      9. 单击 "关闭",再 单击"连接",然后单击"退出"。

  7. 在源域控制器上,在命令提示符下键入 ,然后查看事件 1084 中引用的可分辨名称路径的对象 repadmin /showmeta distinguished_name_path 元数据。 在目标域控制器上重复此步骤。 查找不一致值,其中包括但不限于以下值:

    • 对象上显示的属性名称和数量不正确
    • 发送时间或日期戳不正确
    • USN 更新错误的本地 (序列号)

    不正确的值可能表示承载该对象的数据库页有问题。

    若要在可分辨Repadmin.exe路径引用活动对象时使用 Repadmin.exe 工具,在命令提示符下键入以下内容:

    repadmin /showmeta remote_domain_controller_name distinguished_name_path_of_reference _object
    

    如果对象位于已删除对象容器中,或者不能使用 Repadmin.exe 工具查找对象,请使用对象的 GUID 引用查找对象。 在事件 1084 中引用此 GUID。 为此,在命令提示符下键入以下内容:

    repadmin /showmeta remote_domain_controller_name "GUID_for_the_object that_is_referenced_in_Event_ID_1084"
    

    例如,如果事件 1084 和事件 2108 引用 GUID 为 b49cd496-98a2-4500-bb08-58550c2f79ac 的对象,请键入 repadmin /showmeta "<GUID=b49cd496-98a2-4500-bb08-58550c2f79ac>"

    备注

    引号和方括号是必需的。

  8. 通过为操作系统Ntdsutil.exe最新的 Service Pack,获取最新的工具。 使用 Ntdsutil.exe 工具对源域控制器上的 Active Directory 数据库执行完整性检查。

    在目录服务还原模式下启动计算机之前,请获取脱机管理员帐户的密码。 如果不知道管理员帐户密码,请重置目录服务还原模式密码,然后再在此模式下启动。 在运行 Windows 2000 Service Pack 2 (SP2) 更高版本的域控制器上,使用 Setpwd.exe 命令。 the Setpwd.exe command is located in the %Systemroot%\System32 folder. 在Windows Server 2003 的域控制器上,使用 Ntdsutil Set Directory Services Restore Mode Password 命令。

    有关目录服务还原模式的详细信息,请参阅启动基于 Windows 或基于 SBS 的域控制器时出现"目录服务无法启动"错误消息

    若要详细了解如何在 Windows Server 2003 中更改密码,请参阅启动基于Windows 或基于 SBS的域控制器时出现"目录服务无法启动"错误消息。

  9. 重新启动源域控制器,然后按 F8 启动目录服务还原模式。 在命令提示符下,键入 ntdsutil files integrity ,然后按 Enter。

    备注

    此命令确认数据库的完整性。

    • 如果 Ntdsutil 工具报告数据库已损坏,并且源域控制器上具有命名上下文的副本,则强制降级源域控制器,然后在验证驱动程序、固件以及承载 Active Directory 数据库和事务日志文件的物理驱动器的完整性后重新升级它。

    • 如果数据库已损坏,并且源域控制器上不存在命名上下文的副本,请还原最新的系统状态。 使用 NTDSutil.exe 工具再次确认数据库的完整性。 如果仍收到损坏消息,请还原较旧的备份,直到可以确认域控制器的完整性。

    • 如果数据库仍损坏,请还原最新的系统状态备份,然后在命令提示符下键入:

      ntdsutil files recover
      

      使用 NTDSutil.exe 工具再次确认数据库的完整性。 如果数据库通过完整性检查,请对磁盘分区执行脱机碎片整理。 有关详细信息,请参阅 如何对 Active Directory 数据库执行脱机碎片整理

      若要执行数据库的完整性检查,请在命令提示符下键入以下内容, 然后 按 Enter,其中 database_name 是 Active Directory 数据库的名称:

      esentutl.exe /g database_name
      

      最后,使用"Windows正常"选项重新启动计算机,然后重试从源域控制器到受影响的目标域控制器的复制。 如果数据库未通过完整性检查,则必须停止使用域控制器。 使用 Active Directory 迁移工具 (ADMT) 迁移对象。 您还可以使用 Ldifde.exe 和 Csvde.exe 工具导出将导入到新目标域控制器的对象。

      有关如何使用 Ldifde.exe 和 Csvde.exe 工具,请参阅批量导入和导出到 Active Directory的分步指南。

  10. 如果这些步骤失败,并且复制错误继续,请降级域控制器,确认物理驱动器和托管 Ntds.dit 文件和磁盘子系统的卷的完整性,然后再次升级域控制器。 使用相同的计算机名称。

  11. 使用 ntdsutil files compact 命令对 Active Directory 数据库执行脱机碎片整理。 有关详细信息,请参阅执行 Active Directory 数据库的脱机碎片整理。

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

    ntdsutil "semantic database analysis" "go"
    

    备注

    使用单个命令行参数运行语义数据库分析命令需要此示例中的引号。

    如果报告错误,则 type ntdsutil go fixup 按 Enter。

    备注

    语义数据库命令不会在 Active Directory 数据库(如 Windows Server 2003 Service Pack 1 Ntdsutil File Repair 或命令)上执行丢失修复 Esentutl /p

    第三方信息免责声明

    本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。