本記事はマイクロソフト社員によって公開されております。
こんにちは。Windows Commercial Support Directory Services チームです。
弊社 Windows プラットフォーム サポートでは、エラーが発生してドメイン コントローラーの降格ができないというお問合せを、ときどきお寄せいただくことがあります。
具体的には、ドメイン コントローラの削除をウィザードで進めているときに、以下のようなエラーが発生する状況です。
1 | 「ディレクトリ サービスで必須の構成情報が不足しているため、浮動単一マスター操作の役割に対する所有権を判断できません。」 |
このエラーは、アプリケーションパーティションの fSMORoleOwner と呼ばれる属性の値がフォレスト内に存在しない DC 名になっていると発生するのですが、対処方法について、弊社では以下のサポート技術情報を公開しております。
ただし、この公開情報は、問題の発生を未然に防止する観点では書かれておりません。
そのため、本ブログでは、ドメイン コントローラーを降格させるときに、事前確認を行うポイントをエラーの内容詳細と併せて、以下におまとめしています。
A. 未然に防げる現象
事前確認によって、以下のふたつの問題の発生を抑えることができます。
- ドメイン コントローラーの降格が行えない
ドメイン コントローラーの降格を行おうとすると、「ディレクトリ サービスで必須の構成情報が不足しているため、浮動単一マスター操作の役割に対する所有権を判断できません。」というエラー メッセージが表示され、降格ができません。
- Adprep /rodcprep コマンドの実行に失敗する
Adprep /rodcprep コマンドを実行すると、「Adprep は、パーティション DC=DomainDnsZones,DC=Contoso,DC=com のレプリカに接続できませんでした。 」というエラー メッセージが表示されます。
B. fSMORoleOwner 属性について
確認対象の fSMORoleOwner 属性は、以下の 3 ヶ所に保存されている値であり、各パーティションのインフラストラクチャー マスターの役割を保持しているサーバーを示します。
フォレストがマルチドメインで構成されている場合には、各ドメイン毎にドメイン パーティション、 DomainDnsZones パーティションが作成され、そこにもインフラストラクチャーマスターが設定されます。
1 | <ドメイン パーティション> |
※ ドメイン名は contoso.com という名前を例として挙げています。
fSMORoleOwner 属性は、該当のドメイン コントローラーを通常降格した場合には役割は移行されます。
しかし、この属性に登録されていたドメイン コントローラーを強制的に降格して、その後 Metadata Cleanup (強制降格したドメイン コントローラーのコンピューター オブジェクトを削除する作業) を実施した場合には、”0ADEL” のタグが追加された状態で情報が残存します。
ドメイン パーティションについてのインフラストラクチャーマスターであれば ntdsutil コマンドを利用して役割に移行が可能です。
その結果 fSMORoleOwner 属性には有効なドメイン コントローラー名が入ります。
一方、アプリケーション パーティションの fSMORoleOwner 属性は ntdsutil コマンドでは移行されません。
DNS が利用するアプリケーション パーティションではインフラストラクチャー マスターは特に何も行わないため、そのままでも通常の運用の中では何ら影響はありませんが、降格処理や Adprep コマンドを実行するときには、アプリケーション パーティションの fSMORoleOwner 属性もチェックされて、ここで不正な情報 (0ADEL を含む情報) が入っている場合にエラーになります。
C. 問題を未然に防止する方法
強制降格、それに伴う Metadata Cleanup の作業を実施した場合には、その作業を実施した後で ADSI エディタを使用し fSMORoleOwner 属性に問題ないことを確認しておきます。(強制降格後のタイミングでなくても、それ以降にドメイン コントローラーを降格したり、Adprep コマンドを実行する前のタイミングで確認するのでも構いません)
確認手順
- Infrastructure master の役割を持つドメイン コントローラー (netdom query fsmo から確認できます) に管理者権限を持つユーザーでログオンします。
- [管理ツール] – [ADSI エディター] を起動します。
- 左ペインの “ADSI エディター” を右クリックし、[接続] を押します。
- [接続の設定] 内の “接続ポイント” の “識別名または名前付けコンテキストを選択または入力する” に以下を入力し、[OK] を押します。
DC=DomainDnsZones,<ドメインの DN>
例:DC=DomainDnsZones,DC=contoso,DC=com
- 左ペインから以下のパスに移動します。
[既定の名前付けコンテキスト ] – [DC=DomainDnsZones,<ドメインの DN>]
- 右ペインに [CN=Infrastructure] と表示されるので、右クリックし、[プロパティ] を選択します。
- [CN=Infrastructure のプロパティ] にて [属性エディター] タブから [fSMORoleOwner] を選択し、[編集] を押します。
- [文字列の属性エディター] と表示されるので、[CN=NTDS Settings,CN=,CN=Servers,CN=,CN=Sites,CN=Configuration,・・・] 内の “サーバー名” の箇所が “0ADEL” の文字が入っていないことを確認します。
- 続けて、ForestDnsZones に関しても、3 ~ 9 の作業の DomainDnsZones を ForestDnsZones に置き換えて、確認を実施します。
- DomainDnsZones を ForestDnsZones の fSMORoleOwner 属性の値が “0ADEL” となっていた場合は、以下の KB 949257 の VBS スクリプトを実行し、fSMORoleOwner 属性を適切な値に変更します。
- 参考情報: Windows Server 2008 で “Adprep /rodcprep” コマンドを実行すると、エラー メッセージ “Adprep は、パーティション DC=DomainDnsZones,DC=Contoso,DC=com のレプリカに接続できませんでした” が表示される
(※ 上記で案内している VBS は fSMORoleOwner 属性の値に接続不可能な DC の名前、もしくは “0ADEL” という値が設定されていた場合に、接続可能な FSMO の役割を持つサーバーに値を変更するというスクリプトです)
本投稿が少しでも皆様のお役に立てば幸いです。
※ 本情報の内容 (リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。