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

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

Применяется к: Windows Server 2012 R2
Исходный номер базы знаний: 949257

Симптомы

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

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

Adprep не выполнил операцию для секции DC=DomainDnsZones,DC=Contoso,DC=com Пропуская следующий раздел.

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

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

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

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

Причина

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

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

Решение

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

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

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

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

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

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

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

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

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

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

Примечание.

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

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