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