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