Advertencia de replicación NTDS con identificador de evento 1093

En este artículo se proporciona una solución para un identificador de evento de advertencia NTDS 1093.

Versión original del producto:   Windows Server 2012 R2
Número KB original:   2889671

Síntomas

Al solucionar otro problema, encontramos el identificador de evento de advertencia NTDS 1093.

Tipo de evento: Advertencia
Origen del evento: replicación NTDS
Categoría de evento: replicación
Identificador de evento: 1093
Fecha: MM/DD/AAA
Hora: hh:mm:ss
Usuario: NT AUTHORITY\ANONYMOUS LOGON
Equipo: DC02
Descripción:
Active Directory no pudo actualizar el siguiente objeto con cambios de atributo porque el cambio entrante hizo que el objeto superara el tamaño máximo del registro de objeto. El cambio entrante al siguiente atributo se invertirá en un intento de completar la actualización.

Objeto:
CN=user01,OU=OU1,OU=OU2,OU=Users,DC=contoso,DC=com
GUID de objeto:
<GUID>
Atributo:
24 (userCertificate)

El valor actual (sin cambios) del atributo en este controlador de dominio se replicará en todos los demás controladores de dominio. Esto contrarreste el cambio en el resto del bosque replicado. Los valores de inversión se pueden reconocer de la siguiente manera:
Versión:
10277
Hora del cambio:
<DateTime>
Actualizar el número de secuencia:
614514713
Para obtener más información, vea el Centro de ayuda y soporte técnico en https://go.microsoft.com/fwlink/events.asp .

Este identificador de evento de advertencia 1093 indica que el cambio entrante no se replicará en el controlador de dominio actual y se revertirá. Es decir, las actualizaciones entrantes en el objeto relacionado se anularán para completar la replicación de AD. Esta advertencia no influirá en la replicación de AD.

Causa

El atributo userCertificate del usuario identificado (user01) contiene un gran número de certificados, que supera el tamaño máximo del registro de objeto.

Solución

Para solucionar el problema, es necesario quitar los certificados no deseados del atributo userCertificate del objeto de usuario en Active Directory.

Para identificar qué certificados no son deseados, puede consultar el método en la sección siguiente.

Más información

Puede usar este método para exportar los datos de usuario del objeto de usuario que alcanzan el tamaño máximo del objeto. A continuación, identifique los certificados relacionados mediante los scripts y decida qué certificados no deseados se pueden eliminar de este objeto de usuario.

  1. Exporte los datos de usuario ejecutando el comando en uno de los controladores de dominio: (salida user_data.txt)

    ldifde -f user_data.txt -d "distinguishedname of the problem user account" -p base
    
  2. Prepare el script LDF2Certs.vbs con el siguiente contenido:

    Option explicit
    Const strVBSfile = "LDF2Certs.vbs"
    Const ForReading = 1
    Const StatusLookingForStart = 0
    Const StatusLookingForEnd = 1
    Dim strLDFFile
    Call CommandParser()
    WScript.Echo "!Open the input LDF file " & strLDFFile
    Dim oFS
    Set oFS = CreateObject("Scripting.FileSystemObject")
    Dim objLDFFile
    Set objLDFFile = oFS.OpenTextFile(strLDFFile, ForReading, False)
    Dim strReadLine, lngStatus, objCertFile, lngCertNumber, strCertFile
    lngStatus = StatusLookingForStart
    lngCertNumber = 0
    Do While objLDFFile.AtEndOfStream <> True
     strReadLine = objLDFFile.ReadLine
     If lngStatus = StatusLookingForEnd Then
       If Not IsNull(strReadLine) Then
         If InStr(strReadLine,":") > 0 Then
           objCertFile.Close
           Set objCertFile = Nothing
           lngCertNumber = lngCertNumber + 1
           lngStatus = StatusLookingForStart
         Else
           objCertFile.Write strReadLine
         End If
       End If
     End If
     If lngStatus = StatusLookingForStart Then
       If Not IsNull(strReadLine) Then
         If InStr(strReadLine,"userCertificate::") > 0 Then
           WScript.Echo "!Found " & (lngCertNumber + 1) & " certificate"
           strCertFile = "Cert" & Right("0000" & CStr(lngCertNumber), 4) & ".cer"
           Set objCertFile = oFS.CreateTextFile(strCertFile, True, False)
           lngStatus = StatusLookingForEnd
         End If
       End If
     End If
    Loop
    objLDFFile.Close
    Set objLDFFile = Nothing
    
    Dim WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Sub CommandParser()'Glable variables: strLDFFile
      If WScript.Arguments.Named.Exists("LDFFile") = True Then
        strLDFFile = WScript.Arguments.Named.Item("LDFFile")
        WScript.Echo "CommandParser: the LDF file name: " & strLDFFile
      Else
        Call ShowUsage()
      End If
    End Sub
    Sub ShowUsage()
      WScript.Echo " "
      WScript.Echo "Usage: CScript " & strVBSfile & " /LDFFile:<Input LDF file name, such as input.txt>"
      WScript.Quit
    End Sub
    
  3. Prepare el script doit.bat comandos siguientes:

    cscript LDF2Certs.vbs /LDFFile:user_data.txt  
    dir /B Cert*.* > listofcerts.txt  
    FOR /F %%i IN (listofcerts.txt) DO echo %%i >> allcerts.txt && certutil -dump %%i >> allcerts.txt
    
  4. Coloque dos scripts (LDF2Certs.vbs y doit.bat) y los datos de usuario (user_data.txt) en la misma carpeta y ejecute scripts doit.bat. Después de ejecutar el script, se generarán allcerts.txt archivo de texto, que contiene todos los certificados de los datos de usuario con información detallada. Mientras tanto, todos los certificados se volcarán también como archivos .cer en la misma carpeta.

    Nota

    Puede tardar algún tiempo, ya que es necesario volcar muchos certificados.

  5. Puedes identificar los certificados con su formato de texto o interfaz de usuario y decidir con certificados que se pueden quitar de este objeto de usuario.