Active Directory 复制错误 8451:“复制操作遇到数据库错误”

本文提供了 Active Directory 复制错误 8451 的解决方法:“复制操作遇到数据库错误”。

适用于: 所有受支持的 Windows Server 版本
原始 KB 编号: 2645996

注意

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

症状

本文介绍Active Directory 域服务 (AD DS) 操作失败并生成错误 8451 的情况的症状和原因:“复制操作遇到数据库错误。本文还提供了此问题的解决方法。
可能会遇到以下多种症状之一:

  • 你将看到一条或多条屏幕上的错误消息、记录的事件或用于标识数据库错误的诊断输出。 该错误的可能格式包括以下内容。

    十进制代码 十六进制代码 文本代码 错误消息
    8451 0x2103 ERROR_DS_DRA_DB_ERROR 复制操作遇到数据库错误。
    -1018 0xfffffc06 JET_errReadVerifyFailure 数据库页上的校验和错误。
    -1047 0xfffffbe9 JET_errInvalidBufferSize 数据缓冲区与列大小不匹配。
    -1075 0xfffffbc JET_errOutOfLongValueID 长值 ID 计数器已达到最大值, (执行脱机碎片整理以回收可用和未使用的 LongValueID) 。
    -1206 0xfffffb4a JET_errDatabaseCorrupted 非数据库文件或损坏的 db。
    -1414 0xfffffa7a JET_errSecondaryIndexCorrupted 辅助索引已损坏。 必须对数据库进行碎片整理。
    -1526 0xfffffa0a JET_errLVCorrupted 长值树中遇到的损坏。
    -1601 0xfffff9bf JET_errRecordNotFound 找不到密钥。
    -1603 0xfffff9b JET_errNoCurrentRecord 未记录的货币。
  • Dcpromo.exe 失败并生成错误 8451。
    用户界面显示以下消息:

    操作失败,原因如下:

    Active Directory 域服务无法复制目录分区<来自远程Active Directory 域控制器<帮助程序 DC> 的失败分区>的 DN 路径。<dns 域名>。<顶级域>。

    复制操作遇到数据库错误。

    Dcpromo.log文件包含以下信息:

    <日期><时间> [INFO] NstdInstall for contoso.com 返回 8451
    <日期><时间> [INFO] DsRolepInstallD 返回 8451
    <日期><时间> [错误] 无法安装到目录服务 (8451)
    <日期><时间> [INFO] 启动服务 NETLOGON

  • Repadmin.exe 报告复制尝试失败,状态为 8451。 通常引用 8451 状态的 Repadmin.exe 命令包括但不限于:

    • Repadmin /kcc

    • Repadmin /rehost

    • Repadmin /replicate

    • Repadmin /replsum

    • Repadmin /showrepl

    • Repadmin /showreps

    • Repadmin /showutdvec

    • Repadmin /syncall

      有关如何使用 Repadmin 排查复制问题的详细信息,请参阅 使用 Repadmin 监视和排查 Active Directory 复制问题

      以下示例显示了 命令的 repadmin /showreps 输出,该命令指示从 CONTOSO-DC2 到 CONTOSO-DC1 的入站复制失败并生成了“复制访问被拒绝”消息。

      Default-First-Site-Name\CONTOSO-DC1
      DSA 选项:IS_GC
      网站选项: (无)
      DSA 对象 GUID:b6dc8589-7e00-4a5d-b688-045aef63ec01
      DSA 调用 ID:b6dc8589-7e00-4a5d-b688-045aef63ec01
      =≤ 入站邻居======================================
      DC=contoso,DC=com
      Default-First-Site-Name\CONTOSO-DC2 通过 RPC
      DSA 对象 GUID:74fbe06c-932c-46b5-831b-af9e31f496b2
      上次尝试 @ <日期><时间> 失败,结果 8451 (0x2103) :
      复制操作遇到数据库错误。
      连续失败 () 。
      上次成功 @ <日期><时间>。

  • 事件查看器列出了引用 8451 错误的一个或多个事件。 下表列出了在事件源 + 事件 ID 顺序) 中引用 8451 错误 (的常见事件的事件源和事件 ID。

    事件源 事件 ID 事件消息
    Microsoft-Windows-ActiveDirectory_DomainService 1039,包含扩展错误 8451 内部事件:Active Directory 域服务无法处理以下对象。
    Microsoft-Windows-ActiveDirectory_DomainService 1084,扩展错误 8451 内部事件:Active Directory 无法使用从以下源域控制器接收的更改更新以下对象。 这是因为在域控制器上将更改应用到 Active Directory 期间发生了错误。
    Microsoft-Windows-ActiveDirectory_DomainService 1308,扩展错误 8451 知识一致性检查器 (KCC) 检测到连续尝试使用以下目录服务复制失败。
    Microsoft-Windows-ActiveDirectory_DomainService 1699,扩展错误 8451 本地域控制器无法检索针对以下目录分区请求的更改。 因此,无法将更改请求发送到以下网络地址的域控制器。
    NTDS 复制 2108,具有扩展错误 8451,次要错误值-1075 此事件包含以前记录的 1084 事件的 REPAIR 过程。 此消息指示 Active Directory 数据库在此复制目标上的一致性存在特定问题。 将复制的更改应用于以下对象时发生数据库错误。 数据库包含意外内容,导致无法进行更改。 对象:CN=justintu@contoso.com,OU=marketing,OU=5thWard,OU=Houston,DC=Contoso,DC=com 对象 GUID:2843919c-345c-4f57-bc1a-4ed5acbcf9e2 源域控制器:173ee10f-4c28-4acd-a2d7-61af8d4d3010._msdcs。Contoso.com 用户操作 如果这些操作均未成功且复制错误继续,则应降级此域控制器并再次升级。 其他数据主错误值:8451 复制操作遇到数据库错误。 次要错误值:-1075
    NTDS 复制 2108,具有扩展错误 8451,次要错误值-1526 此事件包含以前记录的 1084 事件的 REPAIR 过程。 此消息指示 Active Directory 数据库在此复制目标上的一致性存在特定问题。 将复制的更改应用于以下对象时发生数据库错误。 数据库包含意外内容,导致无法进行更改。 对象:CN=justintu@contoso.com,OU=marketing,OU=5thWard,OU=Houston,DC=Contoso,DC=com 对象 GUID:2843919c-345c-4f57-bc1a-4ed5acbcf9e2 源域控制器:173ee10f-4c28-4acd-a2d7-61af8d4d3010._msdcs。Contoso.com 用户操作 如果这些操作均未成功且复制错误继续,则应降级此域控制器并再次升级。 其他数据主错误值:8451 复制操作遇到数据库错误。 次要错误值:-1526
    NTDS 复制 具有扩展错误 8451 的 2108,次要错误值为 -1414 此事件包含以前记录的 1084 事件的 REPAIR 过程。 此消息指示 Active Directory 数据库在此复制目标上的一致性存在特定问题。 将复制的更改应用于以下对象时发生数据库错误。 数据库包含意外内容,导致无法进行更改。 对象:CN=justintu@contoso.com,OU=marketing,OU=5thWard,OU=Houston,DC=Contoso,DC=com 对象 GUID:2843919c-345c-4f57-bc1a-4ed5acbcf9e2 源域控制器:173ee10f-4c28-4acd-a2d7-61af8d4d3010._msdcs。Contoso.com 用户操作 如果这些操作均未成功且复制错误继续,则应降级此域控制器并再次升级。 其他数据主错误值:8451 复制操作遇到数据库错误。 次要错误值:-1414
    NTDS 常规 1039,扩展错误 8451。 内部事件:Active Directory 无法处理以下对象。
    NTDS KCC 1925,扩展错误 8451 尝试为以下可写目录分区建立复制链接失败。
    NTDS 复制 1084,扩展错误 8451 内部事件:Active Directory 无法使用从以下源域控制器接收的更改更新以下对象。 这是因为在域控制器上将更改应用到 Active Directory 期间发生了错误。
    NTDS 复制 1699,扩展错误 8451 本地域控制器无法检索针对以下目录分区请求的更改。 因此,无法将更改请求发送到以下网络地址的域控制器。
  • 提高域控制器上的 NTDS 诊断日志记录级别时,事件查看器列出与 8451 错误相关的其他事件。 下表列出了事件源和事件 ID,这些事件经常伴随包含 8451 错误的其他事件。

    事件源 事件 ID 事件消息
    内部处理 1481,错误为 1601 内部错误:对对象执行的操作失败。 其他数据:错误值:2 000020EF:NameErr:DSID-032500E8,问题 2001 (NO_OBJECT) ,数据 -1601,最佳匹配:”
    内部处理 错误为 1075 的 1173 内部事件:Active Directory 遇到以下异常和关联的参数。 异常: e0010004 参数: 0 其他数据 错误值: -1075 内部 ID: 205086d
    内部处理 1173,错误为 1526 内部事件:Active Directory 遇到以下异常和关联的参数。 异常: e0010004 参数: 0 其他数据 错误值: -1526 内部 ID: 205036b
    内部处理 1173,错误为 1603 内部事件:Active Directory 遇到以下异常和关联的参数。 异常: e0010004 参数: 0 其他数据 错误值: -1603 内部 ID: 2050344
    NTDS ISAM 474,错误为 1018 从文件“E:\NTDS\Data\ntds.dit”读取的数据库页在偏移量 3846455296 (0x00000000e5444000) 为 8192 (0x00002000) 字节时,由于页校验和不匹配,验证失败。 预期校验和已323677604 (0x134aeda4) ,实际校验和已2081515684 (0x7c1168a4) 。 读取操作将失败并出现错误 -1018 (0xfffffc06) 。 如果这种情况仍然存在,请从以前的备份还原数据库。 此问题可能是由硬件故障引起的。 请联系硬件供应商,获取诊断问题的进一步帮助。
    NTDS ISAM 488 NTDS (396) NTDSA:在数据库 C:\WINDOWS\NTDS\ntds.dit 的表数据表中检测到的数据不一致 (4621,7905) 。
  • 运行 Dcdiag.exe 实用工具时,它将生成如下所示的输出:

    开始测试:复制

    * 复制检查
    [复制检查、<DC 名称>] 最近的复制尝试失败:
    从 <源 DC> 到 <目标 DC>
    命名上下文: <失败的命名上下文的 DN 路径>
    复制生成错误 (8451) :
    复制操作遇到数据库错误

  • 在 Active Directory 站点和服务中,右键单击源 DC 的连接对象并选择“ 立即复制”时,命令将失败,并生成如下所示的消息:

    尝试将命名上下文 <%directory 分区名称%>从域控制器<源 DC 同步到域控制器<目标 DC>> 时发生以下错误:
    “复制操作遇到数据库错误。”
    操作不会继续。

如何解码错误代码

可以使用 Microsoft 错误查找工具 解码本文中所述的错误代码。 解码与 8451 错误和随附错误相关的错误代码会生成以下信息:

C:>err 8451
对于 decimal 8451 / hex 0x2103 :
ERROR_DS_DRA_DB_ERROR winerror.h
复制操作遇到数据库错误。
为“8451”找到 2 个匹配项

C:>err -1414
对于 decimal -1414 / hex 0xfffffa7a :
JET_errSecondaryIndexCorrupted esent98.h
/辅助索引已损坏。必须对数据库进行碎片整理/
为“-1414”找到 1 个匹配项

C:>err -1526
对于 decimal -1526 / hex 0xfffffa0a :
JET_errLVCorrupted esent98.h
/长值树中遇到的损坏/
为“-1526”找到 1 个匹配项

C:>err -1603
对于 decimal -1603 / hex 0xfffff9bd :
JET_errNoCurrentRecord esent98.h
/未记录的货币/
为“-1603”找到 1 个匹配项

C:>err -1075
对于 decimal -1075 / 十六进制0xfffffbcd :
JET_errOutOfLongValueIDs esent98.h
/长值 ID 计数器已达到最大值。 (执行脱机碎片整理以回收可用/未使用
LongValueIDs)
/
为“-1075”找到 1 个匹配项

C:>err -1601
对于 decimal -1601 / hex 0xfffff9bf :
JET_errRecordNotFound esent98.h
/找不到密钥/
为“-1601”找到 1 个匹配项

C:>err -1047
对于 decimal -1047 / hex 0xfffffbe9 :
JET_errInvalidBufferSize esent98.h
/数据缓冲区与列大小不匹配/
为“-1047”找到 1 个匹配项

C:>err -1018
对于 decimal -1018 / hex 0xfffffc06 :
JET_errReadVerifyFailure ese.h
/数据库页上的校验和错误/
JET_errReadVerifyFailure esent98.h
数据库页上的 /* 校验和错误 */
为“-1018”找到 2 个匹配项

C:>err -1206
对于 decimal -1206 / hex 0xfffffb4a :
JET_errDatabaseCorrupted esent98.h
/非数据库文件或损坏的数据库/
为“-1206”找到 1 个匹配项

原因

状态 8451:“复制操作遇到数据库错误”有多种根本原因,包括以下原因:

  • Active Directory 数据库或 Active Directory 数据库索引可能已损坏。 原因可能如下:
    • 硬件故障:
      • 磁盘
      • 控制者
      • 控制器缓存
    • 过时的驱动程序:
      • 控制者
    • 过时的固件:
      • 计算机 BIOS
      • 控制者
      • 磁盘
    • 突然断电。
    • 挥之不去的对象。
    • 长值 ID 计数器已达到其最大值:
      • ESE 列类型 JET_coltypLongTextJET_coltypLongBinary 称为长值列类型。 这些列是大型字符串和大型二进制对象,可以存储在远离主索引的单独 B+ 树中。 当长值与主记录分开存储时,它们内部会以长值 ID (LID) 。
    • msExchSecurityDescriptor 属性中的安全描述符无效。

解决方案

重要

请仔细遵循本部分中的步骤进行操作。 对注册表修改不当可能会导致严重问题。 修改之前,备份注册表以便在发生问题时进行还原

如何解决单次出现的问题

如果错误仅发生在一个域控制器上,并且似乎是一个隔离问题,则最佳和最快的解决方法是在受影响的服务器上对数据库执行脱机碎片整理。 有关如何执行此操作的信息,请参阅 如何执行 Active Directory 数据库的脱机碎片整理

如果脱机碎片整理无法更正问题,请降级,然后重新排列受影响的域控制器。 有关如何执行此操作的信息,请参阅 降级域控制器和域

如何解决反复出现的问题

如果问题再次出现,请收集一些诊断数据。

  1. 为复制事件和内部处理启用 NTDS 诊断日志记录,级别为 5。

    若要增加 NTDS 诊断日志记录,请在以下注册表子项下更改目标域控制器注册表中的以下REG_DWORD值:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics

    将以下条目的值设置为 5

    • 复制事件
    • 内部处理

    注意

    级别 5 日志记录非常详细。 问题解决后,这两个键的值应还原为默认值 0 。 应筛选目录服务事件日志以隔离和识别这些事件。

    有关用于描述 Microsoft 软件更新的标准术语的详细信息,请参阅以下知识库文章:

  2. 查看事件日志中的新事件,这些事件是从增加的日志记录生成的错误值,这些值将提供原始 8451 错误的明确视图。 例如,错误值为 -1526 的内部处理事件 ID 1173 表示长值树中存在损坏。

  3. 根据增加的日志记录中的其他信息,请参阅下表以获取可能的解决方法。

    十进制代码 十六进制代码 文本代码 错误消息 可能的解决方法
    -1018 0xfffffc06 JET_errReadVerifyFailure 数据库页上的校验和错误 检查硬件、固件和驱动程序。 从备份还原。降级/提升。
    -1047 0xfffffbe9 JET_errInvalidBufferSize 数据缓冲区与列大小不匹配 832851入站复制在事件 ID 为 1699、错误 8451 或 jet 错误 -1601 的域控制器上失败 注意: 此修补程序不再可用。
    -1075 0xfffffbcd JET_errOutOfLongValueIDs 长值 ID 计数器已达到最大值。 (执行脱机碎片整理以回收可用或未LongValueIDs 使用的) 执行脱机碎片整理。
    -1206 0xfffffb4a JET_errDatabaseCorrupted 非数据库文件或损坏的 db 检查硬件、固件和驱动程序。运行 Esentutl/k 命令。 (SDA) 命令运行 Ntdsutil 文件完整性和语义数据库分析,然后执行脱机碎片整理。否则,请从备份还原或降级/提升。
    -1414 0xfffffa7a JET_errSecondaryIndexCorrupted 辅助索引已损坏。 必须对数据库进行碎片整理。 执行脱机碎片整理。
    -1526 0xfffffa0a JET_errLVCorrupted 长值树中遇到的损坏 检查硬件、固件和驱动程序。运行 Esentutl /k 命令。 运行 Ntdsutil** 文件完整性和 SDA 命令,然后执行脱机碎片整理。 否则,请从备份还原或降级和升级。
    -1601 0xfffff9bf JET_errRecordNotFound 找不到密钥 检查硬件、固件和驱动程序。运行 Esentutl /k 命令。 运行 Ntdsutil 文件完整性和 SDA 命令,然后执行脱机碎片整理。否则,从备份还原或降级和升级。
    -1603 0xfffff9bd JET_errNoCurrentRecord 未记录的货币 检查硬件、固件和驱动程序。运行 Esentutl /k 命令。 运行 Ntdsutil 文件完整性和 SDA 命令,然后执行脱机碎片整理。否则,从备份还原或降级和升级。
    8451 0x2103 ERROR_DS_DRA_DB_ERROR 复制操作遇到数据库错误 检查硬件、固件和驱动程序。运行 Esentutl /k 命令。 运行 Ntdsutil 文件完整性和 SDA 命令,然后执行脱机碎片整理。 否则,请从备份还原或降级/提升。
  4. 如果所有这些方法都失败,请从备份还原域控制器,或将其降级,然后重新命名。

更多信息

验证垂直喷气式数据库堆栈,从下到上 (直到下一层,仅在基础层被评级为“良好”) ,这与 TCP 相同。

Ntdsutil 命令 Esentutl 命令
(1) 物理一致性 无等效项 Esentutl /k
(2) 可扩展存储引擎 (ESE) 逻辑一致性 Ntdsutil文件完整性 Esentutl /g
(3) 应用程序逻辑一致性 Ntdsutil语义数据库分析 + Ntdsutilcompact SDA + Esentutl /d 没有等效项

数据收集

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