Error al ejecutar el Adprep /rodcprep comando en Windows Server 2008: Adprep no pudo ponerse en contacto con una réplica para la partición DC=DomainDnsZones,DC=Contoso,DC=com

En este artículo se resuelve un problema que indica que el Adprep /rodcprep comando no se ha completado correctamente porque no se puede acceder al maestro de infraestructura para uno o más NDNC de Active Directory.

Se aplica a: Windows Server 2012 R2
Número de KB original: 949257

Síntomas

Al ejecutar el Adprep /rodcprep comando en Windows Server 2008, recibe el siguiente mensaje de error:

Adprep no pudo ponerse en contacto con una réplica para la partición DC=DomainDnsZones,DC=Contoso,DC=com

Adprep produjo un error en la operación en la partición DC=DomainDnsZones,DC=Contoso,DC=com Omitiendo la siguiente partición.

Adprep no pudo ponerse en contacto con una réplica para la partición DC=ForestDnsZones,DC=Contoso,DC=com

Adprep encontró un error LDAP. Código de error: 0x0. Código de error extendido del servidor: 0x0, mensaje de error del servidor: (null).

Adprep produjo un error en la operación en la partición DC=ForestDnsZones,DC=Contoso,DC=com Omitiendo a la siguiente partición.

Adprep completado con errores. No todas las particiones se actualizan.

Causa

Este problema se produce cuando el Adprep /rodcprep comando intenta ponerse en contacto con el maestro de infraestructura para cada partición de aplicación en el bosque. El comando lo hace para establecer los permisos necesarios para Read-Only replicación del controlador de dominio (RODC). Se Adprep /rodcprep produce un error en el comando si se cumple una de las condiciones siguientes:

  • La partición o las particiones a las que se hace referencia en el mensaje de error ya no existen.
  • El patrón de infraestructura para la partición o particiones a las que se hace referencia se ha degradado con fuerza o está sin conexión.

Solución

Para resolver este problema si la partición ya no existe, realice una limpieza de metadatos para la partición huérfana mediante el parámetro "remove nc" de la herramienta Dsmgmt. Para obtener más información, visite el siguiente sitio web de Microsoft:

administración de particiones

Si existe la partición especificada, especifique un propietario de rol de infraestructura que esté en línea para la partición. Puede hacerlo modificando manualmente el atributo fSMORoleOwner en el objeto, tal como se describe en la sección "Más información".

Más información

El ejemplo de script siguiente modifica el atributo fSMORoleOwner en el objeto de infraestructura del contexto de nomenclatura no de dominio (NDNC) especificado a un servidor activo o contactable. La NDNC de este ejemplo es el contexto de nomenclatura de NDNC DomainDnsZones,DC=contoso,DC=com . El script usa el siguiente comando:

cscript fixfsmo.vbs DC=DomainDnsZones,DC=contoso,DC=com
'-------fixfsmo.vbs------------------
const ADS_NAME_INITTYPE_GC = 3
const ADS_NAME_TYPE_1779 = 1
const ADS_NAME_TYPE_CANONICAL = 2

set inArgs = WScript.Arguments

if (inArgs.Count = 1) then
    ' Assume the command line argument is the NDNC (in DN form) to use.
    NdncDN = inArgs(0)
Else
    Wscript.StdOut.Write "usage: cscript fixfsmo.vbs NdncDN"
End if

if (NdncDN <> "") then

    ' Convert the DN form of the NDNC into DNS dotted form.
    Set objTranslator = CreateObject("NameTranslate")
    objTranslator.Init ADS_NAME_INITTYPE_GC, ""
    objTranslator.Set ADS_NAME_TYPE_1779, NdncDN
    strDomainDNS = objTranslator.Get(ADS_NAME_TYPE_CANONICAL)
    strDomainDNS = Left(strDomainDNS, len(strDomainDNS)-1)

    Wscript.Echo "DNS name: " & strDomainDNS

    ' Find a domain controller that hosts this NDNC and that is online.
    set objRootDSE = GetObject("LDAP://" & strDomainDNS & "/RootDSE")
    strDnsHostName = objRootDSE.Get("dnsHostName")
    strDsServiceName = objRootDSE.Get("dsServiceName")
    Wscript.Echo "Using DC " & strDnsHostName

    ' Get the current infrastructure fsmo.
    strInfraDN = "CN=Infrastructure," & NdncDN
    set objInfra = GetObject("LDAP://" & strInfraDN)
    Wscript.Echo "infra fsmo is " & objInfra.fsmoroleowner

    ' If the current fsmo holder is deleted, set the fsmo holder to this domain controller.

    if (InStr(objInfra.fsmoroleowner, "\0ADEL:") > 0) then

        ' Set the fsmo holder to this domain controller.
        objInfra.Put "fSMORoleOwner",  strDsServiceName
        objInfra.SetInfo

        ' Read the fsmo holder back.
        set objInfra = GetObject("LDAP://" & strInfraDN)
        Wscript.Echo "infra fsmo changed to:" & objInfra.fsmoroleowner

    End if

End if

Para determinar el patrón de infraestructura de una partición, consulte el atributo fSMORoleOwner en el objeto de infraestructura en la raíz del contexto de nomenclatura en cuestión. Por ejemplo, consulte el atributo fSMORoleOwner en la raíz de contexto de nomenclatura CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com para determinar el patrón de infraestructura para la partición DC=DomainDnsZones,DC=contoso,DC=com . Del mismo modo, consulte el atributo fSMORoleOwner en la raíz del contexto de nomenclatura CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com para determinar el patrón de infraestructura para la partición DC=ForestDnsZones,DC=contoso,DC=com .

Puede usar herramientas como la herramienta LDP, la herramienta de edición de interfaces de servicio de Active Directory (ADSI) y la herramienta ldifde para realizar estas consultas. Por ejemplo, la siguiente consulta usa la herramienta Idifde:

ldifde -f Infra_DomainDNSZones.ldf -d "CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner

Esta consulta devuelve el propietario del rol maestro de infraestructura para la partición DC=DomainDnsZones,DC=contoso,DC=com en el archivo Infra_DomainDNSZones.ldf.

Nota:

Puede ejecutar el Adprep /rodcprep comando varias veces sin dañar el bosque. Las operaciones que se completaron en ejecuciones anteriores del comando rodcprep no se repiten.

Si intenta ejecutar el rodcprep comando en un entorno aislado, el maestro de infraestructura para cada dominio y para cada partición de directorio de aplicación debe estar disponible en el entorno para que la operación se realice correctamente.