Udostępnij za pośrednictwem


Błąd podczas uruchamiania Adprep /rodcprep polecenia w systemie Windows Server 2008: Program Adprep nie może skontaktować się z repliką partycji DC=DomainDnsZones,DC=Contoso,DC=com

W tym artykule rozwiązano problem, który Adprep /rodcprep nie został ukończony pomyślnie, ponieważ wzorzec infrastruktury dla co najmniej jednej sieciowej nazwy sieciowej usługi Active Directory nie jest osiągalny.

Oryginalny numer KB: 949257

Symptomy

Po uruchomieniu Adprep /rodcprep polecenia w systemie Windows Server 2008 zostanie wyświetlony następujący komunikat o błędzie:

Program Adprep nie może skontaktować się z repliką partycji DC=DomainDnsZones,DC=Contoso,DC=com

Operacja adprep nie powiodła się na partycji DC=DomainDnsZones,DC=Contoso,DC=com Pomijanie do następnej partycji.

Program Adprep nie może skontaktować się z repliką partycji DC=ForestDnsZones,DC=Contoso,DC=com

Program Adprep napotkał błąd LDAP. Kod błędu: 0x0. Kod błędu rozszerzonego serwera: 0x0, komunikat o błędzie serwera: (null).

Operacja adprep nie powiodła się na partycji DC=ForestDnsZones,DC=Contoso,DC=com Pomijanie do następnej partycji.

Narzędzie Adprep zostało ukończone z błędami. Nie wszystkie partycje są aktualizowane.

Przyczyna

Ten problem występuje, gdy Adprep /rodcprep polecenie próbuje skontaktować się z wzorcem infrastruktury dla każdej partycji aplikacji w lesie. Polecenie służy do ustawiania uprawnień wymaganych do replikacji kontrolera domeny tylko do odczytu (RODC). Polecenie Adprep /rodcprep kończy się niepowodzeniem, jeśli spełniony jest jeden z następujących warunków:

  • Partycja lub partycje, do których odwołuje się komunikat o błędzie, już nie istnieją.
  • Wzorzec infrastruktury dla odwołanej partycji lub partycji został wymuszony lub jest w trybie offline.

Rozwiązanie

Aby rozwiązać ten problem, jeśli partycja już nie istnieje, wykonaj oczyszczanie metadanych dla oddzielonej partycji przy użyciu parametru "remove nc" narzędzia Dsmgmt. Aby uzyskać więcej informacji, odwiedź następującą witrynę sieci Web firmy Microsoft:

zarządzanie partycjami

Jeśli określona partycja istnieje, określ właściciela roli infrastruktury, który jest w trybie online dla partycji. Można to zrobić, modyfikując ręcznie atrybut fSMORoleOwner w obiekcie, zgodnie z opisem w sekcji "Więcej informacji".

Więcej informacji

Poniższy przykładowy skrypt modyfikuje atrybut fSMORoleOwner w obiekcie infrastruktury określonego kontekstu nazewnictwa innej niż domena (NDNC) do aktywnego lub kontaktowalnego serwera. NDNC w tym przykładzie to DomainDnsZones,DC=contoso,DC=com kontekst nazewnictwa NDNC . Skrypt używa następującego polecenia:

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

Aby określić wzorzec infrastruktury dla partycji, wykonaj zapytanie dotyczące atrybutu fSMORoleOwner w obiekcie infrastruktury w katalogu głównym kontekstu nazewnictwa. Na przykład wykonaj zapytanie dotyczące atrybutu fSMORoleOwner w domenie CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com katalogu głównego kontekstu nazewnictwa, aby określić wzorzec infrastruktury dc =DomainDnsZones,DC=contoso,DC=com partycji. Podobnie wykonaj zapytanie dotyczące atrybutu fSMORoleOwner na CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com katalogu głównego kontekstu nazewnictwa, aby określić wzorzec infrastruktury dla D C=ForestDnsZones,DC=contoso,DC=com partycji.

Możesz użyć narzędzi, takich jak narzędzie LDP, narzędzie do edycji interfejsów usługi Active Directory (ADSI) i narzędzie ldifde do wykonywania tych zapytań. Na przykład następujące zapytanie używa narzędzia Idifde:

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

To zapytanie zwraca właściciela roli wzorca infrastruktury dla domeny DC=DomainDnsZones,DC=contoso,DC=com partycji do pliku Infra_DomainDNSZones.ldf.

Uwaga 16.

Polecenie można uruchomić Adprep /rodcprep wiele razy bez uszkodzenia lasu. Operacje, które zostały ukończone we wcześniejszych wykonaniach polecenia rodcprep, nie są powtarzane.

Jeśli spróbujesz uruchomić rodcprep polecenie w środowisku izolowanym, wzorzec infrastruktury dla każdej domeny i dla każdej partycji katalogu aplikacji musi być dostępny w środowisku, aby operacja powiodła się.