Fehler beim Ausführen des Adprep /rodcprep
Befehls in Windows Server 2008: Adprep konnte kein Replikat für die Partition DC=DomainDnsZones,DC=Contoso,DC=com kontaktieren.
In diesem Artikel wird ein Problem behoben, das der Adprep /rodcprep
Befehl nicht erfolgreich abgeschlossen hat, da der Infrastrukturmaster für mindestens einen Active Directory-NDNCs nicht erreichbar ist.
Ursprüngliche KB-Nummer: 949257
Symptome
Wenn Sie den Adprep /rodcprep
Befehl unter Windows Server 2008 ausführen, wird die folgende Fehlermeldung angezeigt:
Adprep konnte kein Replikat für partition DC=DomainDnsZones,DC=Contoso,DC=com kontaktieren
Adprep hat den Vorgang auf partition DC=DomainDnsZones,DC=Contoso,DC=com Skippping to next partition fehlgeschlagen.
Adprep konnte kein Replikat für partition DC=ForestDnsZones,DC=Contoso,DC=com kontaktieren
Bei Adprep ist ein LDAP-Fehler aufgetreten. Fehlercode: 0x0. Server erweiterter Fehlercode: 0x0, Serverfehlermeldung: (null).
Adprep hat den Vorgang auf der Partition DC=ForestDnsZones,DC=Contoso,DC=com Skippping to next partition fehlgeschlagen.
Adprep wurde mit Fehlern abgeschlossen. Nicht alle Partitionen werden aktualisiert.
Ursache
Dieses Problem tritt auf, wenn der Adprep /rodcprep
Befehl versucht, den Infrastrukturmaster für jede Anwendungspartition in der Gesamtstruktur zu kontaktieren. Mit dem Befehl werden die Berechtigungen festgelegt, die für die Read-Only-Domänencontrollerreplikation (RODC) erforderlich sind. Der Adprep /rodcprep
Befehl schlägt fehl, wenn eine der folgenden Bedingungen erfüllt ist:
- Die Partition oder die Partitionen, auf die in der Fehlermeldung verwiesen wird, sind nicht mehr vorhanden.
- Der Infrastrukturmaster für die referenzierten Partitionen oder Partitionen wurde erzwungen herabgestuft oder ist offline.
Lösung
Um dieses Problem zu beheben, wenn die Partition nicht mehr vorhanden ist, führen Sie eine Metadatenbereinigung für die verwaiste Partition mit dem Parameter "remove nc" des Dsmgmt-Tools durch. Weitere Informationen finden Sie auf der folgenden Microsoft-Website:
Wenn die angegebene Partition vorhanden ist, geben Sie einen Infrastrukturrollenbesitzer an, der für die Partition online ist. Sie können dies tun, indem Sie das fSMORoleOwner-Attribut für das Objekt manuell ändern, wie im Abschnitt "Weitere Informationen" beschrieben.
Weitere Informationen
Im folgenden Skriptbeispiel wird das fSMORoleOwner-Attribut für das Infrastrukturobjekt des angegebenen Nichtdomänenbenennungskontexts (Non-Domain Naming Context, NDNC) in einen aktiven oder kontaktierbaren Server geändert. Der NDNC in diesem Beispiel ist der Namenskontext "DomainDnsZones,DC=contoso,DC=com NDNC ". Das Skript verwendet den folgenden Befehl:
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
Um den Infrastrukturmaster für eine Partition zu ermitteln, fragen Sie das fSMORoleOwner-Attribut auf das Infrastrukturobjekt unter dem betreffenden Namenskontextstamm ab. Fragen Sie z. B. das fSMORoleOwner-Attribut im CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com-Namenskontextstamm ab, um den Infrastrukturmaster für die DC=DomainDnsZones,DC=contoso,DC=com-Partition zu ermitteln. Fragen Sie entsprechend das fSMORoleOwner-Attribut für das CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com-Namenskontextstamm ab, um den Infrastrukturmaster für die DC=ForestDnsZones,DC=contoso,DC=com-Partition zu ermitteln.
Sie können Tools wie das LDP-Tool, das Active Directory Service Interfaces (ADSI)-Bearbeitungstool und das ldifde-Tool verwenden, um diese Abfragen ausführen zu können. Die folgende Abfrage verwendet z. B. das Idifde-Tool:
ldifde -f Infra_DomainDNSZones.ldf -d "CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner
Diese Abfrage gibt den Besitzer der Infrastrukturmasterrolle für die DC=DomainDnsZones,DC=contoso,DC=com-Partition an die Datei Infra_DomainDNSZones.ldf zurück.
Notiz
Sie können den Adprep /rodcprep
Befehl mehrmals ausführen, ohne die Gesamtstruktur zu beschädigen. Vorgänge, die in früheren Ausführungen des Rodcprep-Befehls abgeschlossen wurden, werden nicht wiederholt.
Wenn Sie versuchen, den rodcprep
Befehl in einer isolierten Umgebung auszuführen, muss der Infrastrukturmaster für jede Domäne und für jede Anwendungsverzeichnispartition innerhalb der Umgebung verfügbar sein, damit der Vorgang erfolgreich ausgeführt werden kann.