Partilhar via


Erro ao executar o Adprep /rodcprep comando no Windows Server 2008: Adprep não pôde entrar em contato com uma réplica para a partição DC=DomainDnsZones,DC=Contoso,DC=com

Este artigo resolve um problema em que o Adprep /rodcprep comando não é concluído com êxito porque o mestre de infraestrutura para um ou mais NDNCs do Active Directory não está acessível.

Número original da base de conhecimento: 949257

Sintomas

Ao executar o Adprep /rodcprep comando no Windows Server 2008, você recebe a seguinte mensagem de erro:

O Adprep não pôde entrar em contato com uma réplica para a partição DC=DomainDnsZones,DC=Contoso,DC=com

Adprep falhou na operação na partição DC=DomainDnsZones,DC=Contoso,DC=com Pulando para a próxima partição.

O Adprep não pôde entrar em contato com uma réplica para a partição DC=ForestDnsZones,DC=Contoso,DC=com

O Adprep encontrou um erro LDAP. Código de erro: 0x0. Código de erro estendido do servidor: 0x0, Mensagem de erro do servidor: (nulo).

Adprep falhou na operação na partição DC=ForestDnsZones,DC=Contoso,DC=com Pulando para a próxima partição.

Adprep concluído com erros. Nem todas as partições são atualizadas.

Motivo

Esse problema ocorre quando o Adprep /rodcprep comando tenta entrar em contato com o mestre de infraestrutura para cada partição de aplicativo na floresta. O comando faz isso para definir as permissões necessárias para a replicação do RODC (Controlador de Domínio Somente Leitura). O Adprep /rodcprep comando falhará se uma das seguintes condições for verdadeira:

  • A partição ou as partições referenciadas na mensagem de erro não existem mais.
  • O mestre de infraestrutura para a partição ou partições referenciadas foi rebaixado à força ou está offline.

Resolução

Para resolver esse problema se a partição não existir mais, faça uma limpeza de metadados para a partição órfã usando o parâmetro "remove nc" da ferramenta Dsmgmt. Para obter mais informações, acesse o seguinte site da Microsoft:

Gerenciamento de partição

Se a partição especificada existir, especifique um proprietário de função de infraestrutura que esteja online para a partição. Você pode fazer isso modificando manualmente o atributo fSMORoleOwner no objeto, conforme descrito na seção "Mais informações".

Mais informações

O exemplo de script a seguir modifica o atributo fSMORoleOwner no objeto de infraestrutura do NDNC (Contexto de Nomenclatura Não Domínio) especificado para um servidor ativo ou contatável. O NDNC neste exemplo é o contexto de nomenclatura NDNC DomainDnsZones,DC=contoso,DC=com. O script usa o seguinte 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 o mestre de infraestrutura de uma partição, consulte o atributo fSMORoleOwner no objeto de infraestrutura na raiz de contexto de nomenclatura em questão. Por exemplo, consulte o atributo fSMORoleOwner na raiz de contexto de nomenclatura CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com para determinar o mestre de infraestrutura para a partição DC=DomainDnsZones,DC=contoso,DC=com . Da mesma forma, consulte o atributo fSMORoleOwner na raiz de contexto de nomenclatura CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com para determinar o mestre de infraestrutura para a partição DC=ForestDnsZones,DC=contoso,DC=com.

Você pode usar ferramentas como a ferramenta LDP, a ferramenta de edição ADSI (Active Directory Service Interfaces) e a ferramenta ldifde para fazer essas consultas. Por exemplo, a consulta a seguir usa a ferramenta Idifde:

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

Essa consulta retorna o proprietário da função mestra de infraestrutura para a partição DC=DomainDnsZones,DC=contoso,DC=com para o arquivo Infra_DomainDNSZones.ldf.

Observação

Você pode executar o Adprep /rodcprep comando várias vezes sem prejudicar a floresta. As operações que foram concluídas em execuções anteriores do comando rodcprep não são repetidas.

Se você tentar executar o rodcprep comando em um ambiente isolado, o mestre de infraestrutura para cada domínio e para cada partição de diretório de aplicativo deverá estar disponível no ambiente para que a operação seja bem-sucedida.