Поделиться через


Ошибка при выполнении Adprep /rodcprep команды в Windows Server 2008: Adprep не удалось связаться с репликой для секции DC=DomainDnsZones,DC=Contoso,DC=com

В этой статье устранена проблема, из-за Adprep /rodcprep которой команда не выполнена успешно, так как эталон инфраструктуры для одного или нескольких NDNCs Active Directory недоступен.

Исходный номер базы знаний: 949257

Симптомы

При выполнении Adprep /rodcprep команды в Windows Server 2008 вы получите следующее сообщение об ошибке:

Adprep не удалось связаться с репликой для секции DC=DomainDnsZones,DC=Contoso,DC=com

Adprep не удалось выполнить операцию по секции DC=DomainDnsZones,DC=Contoso,DC=com Skipping to next partition.

Adprep не удалось связаться с репликой для секции DC=ForestDnsZones,DC=Contoso,DC=com

Adprep обнаружил ошибку LDAP. Код ошибки: 0x0. Расширенный код ошибки сервера: 0x0, сообщение об ошибке сервера: (null).

Adprep не удалось выполнить операцию по секции DC=ForestDnsZones,DC=Contoso,DC=com Пропускать на следующую секцию.

Adprep завершен с ошибками. Не все разделы обновляются.

Причина

Эта проблема возникает, когда Adprep /rodcprep команда пытается связаться с главной инфраструктурой для каждого раздела приложения в лесу. Эта команда позволяет задать разрешения, необходимые для репликации контроллера домена только для чтения (RODC). Команда завершается ошибкой, Adprep /rodcprep если одно из следующих условий имеет значение true:

  • Секции или секции, на которые ссылается сообщение об ошибке, больше не существуют.
  • Мастер инфраструктуры для указанной секции или секций был принудительно понижен или отключен.

Решение

Чтобы устранить эту проблему, если секция больше не существует, выполните очистку метаданных для потерянной секции с помощью параметра "удалить nc" средства Dsmgmt. Дополнительные сведения см. в следующем разделе веб-сайта Майкрософт:

Управление секциями

Если указанная секция существует, укажите владельца роли инфраструктуры, которая находится в сети для секции. Это можно сделать вручную, изменив атрибут fSMORoleOwner в объекте, как описано в разделе "Дополнительные сведения".

Дополнительная информация

Следующий пример скрипта изменяет атрибут fSMORoleOwner в объекте инфраструктуры указанного контекста именования доменов (NDNC) на активный или контактный сервер. NDNC в этом примере — это контекст именования DomainDnsZones,DC=contoso,DC=com NDNC . Сценарий использует следующую команду:

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

Чтобы определить главную инфраструктуру для секции, запросите атрибут fSMORoleOwner в объекте инфраструктуры в корневом каталоге контекста именования. Например, запросите атрибут fSMORoleOwner в корневой каталог контекста именования DC=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com , чтобы определить главный сервер инфраструктуры для раздела DC=DomainDnsZones,DC=contoso,DC=com . Аналогичным образом запросите атрибут fSMORoleOwner в cn=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com именование корневой каталог, чтобы определить главную инфраструктуру для раздела DC=ForestDnsZones,DC=contoso,DC=com.

Для выполнения этих запросов можно использовать такие средства, как средство LDP, интерфейсы служб Active Directory (ADSI) Edit, а также средство ldifde. Например, следующий запрос использует средство Idifde:

ldifde -f Infra_DomainDNSZones.ldf -d "CN=Инфраструктура,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner

Этот запрос возвращает владельца главной роли инфраструктуры для раздела DC=DomainDnsZones,DC=contoso,DC=com в файл Infra_DomainDNSZones.ldf.

Примечание.

Вы можете выполнить Adprep /rodcprep команду несколько раз, не причинив вреда лесу. Операции, выполненные в предыдущих выполнениях команды rodcprep, не повторяются.

Если вы попытаетесь выполнить rodcprep команду в изолированной среде, образец инфраструктуры для каждого домена и для каждого раздела каталога приложений должен быть доступен в среде для успешной операции.