Windows Server 域控制器在遇到 USN 回滚时记录目录服务事件 2095

本文介绍如何使用基于映像的操作系统安装来检测和恢复 Windows Server 域控制器是否错误地回滚。

原始 KB 数: 875495

注意

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

总结

本文介绍由更新序列号(USN)回滚导致的无提示 Active Directory 复制失败。 当旧版 Active Directory 数据库未正确还原或粘贴到位时,会发生 USN 回滚。

发生 USN 回滚时,对一个域控制器上发生的对象和属性的修改不会复制到林中的其他域控制器。 由于复制合作伙伴认为它们具有 Active Directory 数据库的最新副本,因此监视和故障排除工具(如Repadmin.exe)不会报告任何复制错误。

域控制器在检测到 USN 回滚时,在目录服务事件日志中记录 Directory Services 事件 2095。 事件消息的文本将管理员定向到本文,了解恢复选项。

事件 2095 日志条目示例

Log Name:      <Service name> Service  
Source:        Microsoft-Windows-ActiveDirectory_DomainService  
Date:          <DateTime>
Event ID:      2095  
Task Category: Replication  
Level:         Error  
Keywords:      Classic  
User:          <USER NAME>  
Computer:      SERVER.contoso.com  
Description:

During an Active Directory Domain Services replication request, the local domain controller (DC) identified a remote DC which has received replication data from the local DC using already-acknowledged USN tracking numbers.

Because the remote DC believes it is has a more up-to-date Active Directory Domain Services database than the local DC, the remote DC will not apply future changes to its copy of the Active Directory Domain Services database or replicate them to its direct and transitive replication partners that originate from this local DC.

If not resolved immediately, this scenario will result in inconsistencies in the Active Directory Domain Services databases of this source DC and one or more direct and transitive replication partners. Specifically the consistency of users, computers and trust relationships, their passwords, security groups, security group memberships and other Active Directory Domain Services configuration data may vary, affecting the ability to log on, find objects of interest and perform other critical operations.

To determine if this misconfiguration exists, query this event ID using http://support.microsoft.com or contact your Microsoft product support.

The most probable cause of this situation is the improper restore of Active Directory Domain Services on the local domain controller.

User Actions:

If this situation occurred because of an improper or unintended restore, forcibly demote the DC.

以下主题讨论如何在基于 Windows Server 的域控制器中检测和恢复 USN 回滚。

支持在运行 Windows Server 2012 及更高版本的域控制器上备份 Active Directory 的方法

Windows Server 2012 添加了对 Hyper-Visor 生成 ID(GenID)的支持。 这允许虚拟来宾检测具有新 ID 的磁盘卷,并响应新的 GenID。 在 Active Directory 中,目录服务会像从备份还原域控制器一样做出反应。 然后,它会生成新的调用 ID。 通过使用新的调用 ID,数据库实例可以安全地在林中重新输入复制。

这是虚拟化域控制器部署和配置涵盖的方案之一。

支持的方法在运行 Windows Server 2003 或更高版本的 Windows Server 的域控制器上备份 Active Directory

在域控制器的生命周期内,可能需要还原或“回滚”Active Directory 数据库的内容到已知的良好时间点。 或者,可能需要将域控制器主机操作系统(包括 Active Directory)的元素回滚到已知良好的点。

以下是可用于回滚 Active Directory 内容的支持方法:

  • 使用 Active Directory 感知的备份和还原实用工具,该实用工具使用Microsoft提供的和经过Microsoft测试的 API。 这些 API 非权威或权威地还原系统状态备份。 还原的备份应源自同一操作系统安装和正在还原的相同物理或虚拟计算机。

  • 使用 Microsoft 卷影复制服务 API 的 Active Directory 感知备份和还原实用工具。 这些 API 备份和还原域控制器系统状态。 卷影复制服务支持在运行 Windows Server 2003、Windows Server 2008 或 Windows Server 2008 R2 的计算机上创建单一或多卷的时间点卷影副本。 单一时间点卷影副本也称为快照。 有关详细信息,请在Microsoft 支持部门搜索“卷影复制服务”。

  • 还原系统状态。 评估此域控制器是否存在有效的系统状态备份。 如果在回滚域控制器未正确还原之前进行有效的系统状态备份,并且如果备份包含域控制器上最近进行的更改,请从最近的备份还原系统状态。

还原 Active Directory 感知系统状态备份时发生的典型行为

Windows Server 域控制器将 USN 与调用 ID 结合使用来跟踪必须在 Active Directory 林中的复制伙伴之间复制的更新。

源域控制器使用 USN 来确定请求更改的目标域控制器已收到哪些更改。 目标域控制器使用 USN 来确定应从源域控制器请求哪些更改。

调用 ID 标识在给定域控制器上运行的 Active Directory 数据库的版本或实例化。

使用Microsoft已设计和测试的 API 和方法在域控制器上还原 Active Directory 时,调用 ID 在还原的域控制器上正确重置。 林中的域控制器接收调用重置通知。 因此,它们相应地调整其高水印值。

导致 USN 回滚的软件和方法

使用以下环境、程序或子系统时,管理员可以绕过在还原域控制器系统状态时Microsoft设计的检查和验证:

  • 启动 Active Directory 域控制器,其 Active Directory 数据库文件已还原(已复制)到位,方法是使用映像程序(如诺顿幽灵)。

  • 启动以前保存的域控制器虚拟硬盘映像。 以下方案可能导致 USN 回滚:

    1. 在虚拟托管环境中提升域控制器。
    2. 创建虚拟托管环境的快照或替代版本。
    3. 让域控制器继续进行入站复制和出站复制。
    4. 启动在步骤 2 中创建的域控制器映像文件。
  • 导致此方案的虚拟化托管环境的示例包括Microsoft虚拟 PC 2004、Microsoft虚拟服务器 2005 和 EMC VMWARE。 其他虚拟化托管环境也会导致这种情况。

  • 有关虚拟托管环境中域控制器的支持条件的详细信息,请参阅 在虚拟托管环境中托管 Active Directory 域控制器时要考虑的事项。

  • 启动位于磁盘子系统使用以前保存的操作系统映像加载的卷上的 Active Directory 域控制器,而无需对 Active Directory 进行系统状态还原。

    • 方案 A:启动位于存储卷多个版本的磁盘子系统上的 Active Directory 的多个副本

      1. 提升域控制器。 在磁盘子系统上找到 Ntds.dit 文件,该文件可以存储托管 Ntds.dit 文件的卷的多个版本。
      2. 使用磁盘子系统创建托管域控制器 Ntds.dit 文件的卷的快照。
      3. 继续让域控制器从步骤 1 中创建的卷加载 Active Directory。
      4. 启动 Active Directory 数据库在步骤 2 中保存的域控制器。
    • 方案 B:从损坏的镜像中的其他驱动器启动 Active Directory

      1. 提升域控制器。 在镜像驱动器上找到 Ntds.dit 文件。
      2. 中断镜像。
      3. 继续使用镜像中第一个驱动器上的 Ntds.dit 文件进行入站复制和出站复制。
      4. 在镜像的第二个驱动器上使用 Ntds.dit 文件启动域控制器。

即使不是预期,其中每个方案都可能导致域控制器通过不支持的方法回滚到旧版 Active Directory 数据库。 回滚 Active Directory 或 Active Directory 域控制器的本地状态的唯一支持方法是使用 Active Directory 感知备份和还原实用工具还原源自同一操作系统安装和正在还原的相同物理或虚拟计算机的系统状态备份。

Microsoft不支持任何其他进程,这些进程拍摄 Active Directory 域控制器的系统状态元素的快照,并将该系统状态的元素复制到操作系统映像。 除非管理员进行干预,否则此类进程会导致 USN 回滚。 此 USN 回滚会导致错误还原的域控制器的直接和可传递复制合作伙伴在其 Active Directory 数据库中具有不一致的对象。

USN 回滚的影响

发生 USN 回退时,之前查看过 USN 的目标域控制器不会入站复制对对象和属性所做的修改。

因为这些目标域控制器认为它们是最新的,因此不会在目录服务事件日志中或通过监视和诊断工具报告复制错误。

USN 回滚可能会影响任何分区中的任何对象或属性的复制。 最常见的副作用是在回滚域控制器上创建的用户帐户和计算机帐户在一个或多个复制合作伙伴上不存在。 或者,在回滚域控制器上发起的密码更新在复制合作伙伴上不存在。

以下步骤显示了可能导致 USN 回滚的事件序列。 使用不支持的系统状态还原及时回滚域控制器系统状态时,会发生 USN 回滚。

  1. 管理员升级域中的三个域控制器。 (在此示例中,域控制器为 DC1、DC2 和 DC2,域 Contoso.com。DC1 和 DC2 是直接复制合作伙伴。 DC2 和 DC3 也是直接复制合作伙伴。 DC1 和 DC3 不是直接复制合作伙伴,而是通过 DC2 以传递方式接收源更新。

  2. 管理员创建 10 个用户帐户,这些用户帐户对应于 DC1 上的 1 到 10 个 USN。 所有这些帐户都复制到 DC2 和 DC3。

  3. DC1 上捕获操作系统的磁盘映像。 此图像包含对应于 DC1 上本地 USN 1 到 10 的对象记录。

  4. Active Directory 中进行了以下更改:

    • 在步骤 2 中创建的所有 10 个用户帐户的密码在 DC1 上重置。 这些密码对应于 11 到 20 个 USN。 所有 10 个更新的密码都复制到 DC2 和 DC3。
    • DC1 上创建了 10 个对应于 USN 21 到 30 的新用户帐户。 这 10 个用户帐户复制到 DC2 和 DC3。
    • DC1 上创建了 10 个对应于 USN 31 到 40 的新计算机帐户。 这 10 个计算机帐户复制到 DC2 和 DC3。
    • DC1 上创建了 10 个对应于 USN 41 到 50 的新安全组。 这 10 个安全组复制到 DC2 和 DC3。
  5. DC1 遇到硬件故障或软件故障。 管理员使用磁盘映像实用工具将步骤 3 中创建的操作系统映像复制到原地。 DC1 现在从了解 USN 1 到 10 的 Active Directory 数据库开始。

    由于操作系统映像已就地复制,并且不支持还原系统状态的方法,因此 DC1 继续使用创建数据库初始副本的相同调用 ID,并且所有更改最多 USN 50。 DC2 和 DC3 还维护 DC1 的相同调用 ID,以及 USN 50 for DC1 的最新矢量 。 (最新的向量是给定目录分区的所有域控制器上发生的最新发起更新的当前状态。

    除非管理员进行干预,否则 DC2 和 DC3 不会入站复制对应于源自 DC1 的本地 USN 11 到 50 的更改。 此外,根据 DC2 使用的调用 ID,DC1 已经知道对应于 USN 11 到 50 的更改。 因此,DC2 不会发送这些更改。 由于 DC1 上不存在步骤 4 中的更改,因此登录请求失败,并出现“拒绝访问”错误。 出现此错误的原因是密码不匹配,或者当较新的帐户随机使用 DC1 进行身份验证时,帐户不存在。

  6. 在林中监视复制运行状况的管理员请注意以下情况:

    • Repadmin /showreps命令行工具报告 DC1 和 DC2 之间的双向 Active Directory 复制以及 DC2 和 DC3 之间的复制没有错误。 这种情况使得任何复制不一致都难以检测。

    • 运行 Windows Server 的域控制器的目录服务事件日志中的复制事件并不指示目录服务事件日志中的任何复制失败。 这种情况使得任何复制不一致都难以检测。

    • 当 DC2 和 DC3 上的域目录分区与 DC1 上的分区进行比较时,Active Directory 用户和计算机或 Active Directory 管理工具(Ldp.exe)显示不同的对象计数和不同的对象元数据。 区别在于映射到 USN 更改 11 到步骤 50 的更改集。

      注意

      在此示例中,不同的对象计数适用于用户帐户、计算机帐户和安全组。 不同的对象元数据表示不同的用户帐户密码。

    • 针对步骤 2 中创建的 10 个用户帐户的用户身份验证请求偶尔会生成“拒绝访问”或“错误的密码”错误。 此错误可能是因为 DC1 上的这些用户帐户与 DC2 和 DC3 上的帐户之间存在密码不匹配。 遇到此问题的用户帐户对应于在步骤 4 中创建的用户帐户。 步骤 4 中的用户帐户和密码重置未复制到域中的其他域控制器。

  7. DC2 和 DC3 开始从 DC1 开始入站复制原始更新,这些更新对应于大于 50 的 USN 数字。 此复制通常不会进行管理干预,因为之前记录的最新向量阈值 USN 50 已超过。 (USN 50 是 DC1 在 DC2 和 DC3 上为 DC1 记录的最新向量,然后 DC1 脱机并恢复。但是,在不支持的还原后,与源 DC1 上的 USN 11 到 50 对应的新更改永远不会复制到 DC2、DC3 或其可传递复制合作伙伴。

尽管步骤 6 中提到的症状表示 USN 回滚可以在用户和计算机帐户上具有的一些效果,但 USN 回滚可以防止任何 Active Directory 分区中的任何对象类型复制。 这些对象类型包括:

  • Active Directory 复制拓扑和计划

  • 林中域控制器的存在和这些域控制器的角色

    注意

    这些角色包括全局目录、相对标识符 (RID) 分配和操作主角色。 (操作主角色也称为灵活的单主操作或 FSMO。

  • 林中域和应用程序分区的存在

  • 安全组及其当前组成员身份的存在

  • Active Directory 集成 DNS 区域中的 DNS 记录注册

USN 孔的大小可能代表对用户、计算机、信任、密码和安全组所做的数百、数千甚至数万次更改。 (USN 孔是由还原的系统状态备份时存在的最高 USN 数和在回滚域控制器脱机前在回滚域控制器上创建的原始更改数的区别来定义的。

检测 Windows Server 域控制器上的 USN 回滚

由于 USN 回滚难以检测到,因此当源域控制器将以前确认的 USN 号码发送到目标域控制器时,Windows Server 2003 SP1 或更高版本的域控制器会记录事件 2095,而不会对调用 ID 进行相应的更改。

为了防止在错误还原的域控制器上创建对 Active Directory 的唯一原发更新,将暂停网络登录服务。 当 Net Logon 服务暂停时,用户和计算机帐户无法更改域控制器上不会出站复制此类更改的密码。 同样,在对 Active Directory 中的对象进行更新时,Active Directory 管理工具将偏向使用正常运行的域控制器。

在域控制器上,如果满足以下条件,则会记录类似于以下内容的事件消息:

  • 源域控制器向目标域控制器发送以前确认的 USN 编号。
  • 调用 ID 中没有相应的更改。

可能会在目录服务事件日志中捕获这些事件。 但是,在管理员看到它们之前,它们可能会被覆盖。

你可能怀疑发生了 USN 回滚。 但是,在目录服务事件日志中看不到关联事件。 在此方案中,检查 Dsa 不可写注册表项。 此条目可以确凿地证明 USN 回滚已发生。

  • 注册表子项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Parameters
  • 注册表项:Dsa 不可写
  • 值:0x4

删除或手动更改 Dsa 不可写 注册表项值会使回滚域控制器处于永久不受支持的状态。 因此,不支持此类更改。 具体而言,修改该值将删除 USN 回滚检测代码添加的隔离行为。 回滚域控制器上的 Active Directory 分区将与同一 Active Directory 林中的直接和可传递复制伙伴永久不一致。

从 USN 回滚恢复

可通过三种方法从 USN 回滚中恢复。

  • 从域中删除域控制器。 为此,请按照下列步骤进行操作:

    1. 从域控制器中删除 Active Directory 以强制其成为独立服务器。 有关详细信息,请参阅 使用 Active Directory 安装向导强制降级时域控制器不会正常降级。

    2. 关闭已降级的服务器。

    3. 在运行状况良好的域控制器上,清除降级的域控制器的元数据。 有关详细信息,请参阅清理Active Directory 域控制器服务器元数据

    4. 如果错误还原的域控制器承载着操作主机角色,请将这些角色转移到正常的域控制器。 有关详细信息,请参阅Active Directory 域服务中的转移或抓住操作主角色。

    5. 重启已降级的服务器。

    6. 如果需要,请在独立服务器上再次安装 Active Directory。

    7. 如果域控制器以前是全局编录,请将域控制器配置为全局编录。 有关详细信息,请参阅 如何创建或移动全局目录

    8. 如果域控制器以前承载着操作主机角色,请将操作主机角色转移回域控制器。 有关详细信息,请参阅Active Directory 域服务中的转移或抓住操作主角色。

  • 还原良好备份的系统状态。

    评估此域控制器是否存在有效的系统状态备份。 如果在错误还原回滚域控制器之前创建了有效的系统状态备份,并且备份包含域控制器上所做的最新更改,请从最新备份还原系统状态。

  • 在没有系统状态备份的情况下还原系统状态。

    可以使用快照作为备份的源。 或者,可以使用“在 Hyper-V 中 运行域控制器”的系统状态数据备份 部分 还原以前版本的虚拟域控制器 VHD 中的过程,将数据库设置为为自身提供新的调用 ID。

参考