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 enhttps://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.
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
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
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
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.
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.