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

Este artigo resolve um problema de que o Adprep /rodcprep comando não é concluído com êxito porque a infraestrutura master para um ou mais NDNCs de diretório ativo não é acessível.

Aplica-se a: Windows Server 2012 R2
Número de KB original: 949257

Sintomas

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

O Adprep não pôde contatar um réplica para partição DC=DomainDnsZones,DC=Contoso,DC=com

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

O Adprep não pôde contatar um réplica para 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).

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

O Adprep foi 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 a master 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 Read-Only). 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.
  • A infraestrutura master para partições ou partições referenciadas foi rebaixada com força ou está offline.

Resolução

Para resolve 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 "remover 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 contactável. O NDNC neste exemplo é o contexto de nomenclatura DomainDnsZones,DC=contoso,DC=com NDNC . 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 master de infraestrutura para 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 CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com para determinar a infraestrutura master para a partição DC=DomainDnsZones,DC=contoso,DC=com. Da mesma forma, consulte o atributo fSMORoleOwner na raiz de contexto CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com para determinar a infraestrutura master para a partição DC=ForestDnsZones,DC=contoso,DC=com.

Você pode usar ferramentas como a ferramenta LDP, a ferramenta de edição ADSI (Interfaces de Serviço do Active Directory) 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=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner

Essa consulta retorna a infraestrutura master proprietário da função 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 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, a infraestrutura master para cada domínio e para cada partição do diretório de aplicativo deve estar disponível no ambiente para que a operação tenha êxito.