Active Directory インストール ウィザードを実行しようとすると、"スキーマの不一致" エラー メッセージが表示されます (Dcpromo.exe)

この記事では、Active Directory インストール ウィザード (Dcpromo.exe) を実行しようとすると、エラー "スキーマの不一致" を修正する解決策について説明します。

適用対象: Windows Server 2012 R2
元の KB 番号: 838179

現象

[適用対象] セクションに記載されている Microsoft Windows のいずれかのエディションを実行しているコンピューターで Active Directory インストール ウィザード (Dcpromo.exe) を実行すると、"スキーマの不一致" エラー メッセージが表示されることがあります。

Microsoft Windows Server 2003 を実行している場合は、次のエラー メッセージが表示されることがあります。

Active Directory では、ソース ドメイン コントローラーのリモート ドメイン コントローラーの完全修飾コンピューター名から、パーティションのディレクトリ パーティション DN パスをレプリケートできませんでした。 関係するサーバー間のスキーマの不一致が原因で、レプリケーション操作が失敗しました。

Microsoft Windows 2000 を実行している場合は、次のエラー メッセージが表示される場合があります。

ディレクトリ サービスは、リモート サーバーのリモート サーバー名からパーティション パーティション名をレプリケートできませんでした。 関係するサーバー間のスキーマの不一致が原因で、レプリケーション操作が失敗しました。

原因

この問題は、次のいずれかの条件に該当する場合に発生する可能性があります。

  • 条件 1: ソース ドメイン コントローラーの Active Directory ディレクトリ サービスのコピーに、重複する複数値属性が含まれています。
  • 条件 2: ソース ドメイン コントローラーのデータベース内の 1 つ以上の属性またはページが破損しています。
  • 条件 3: ソース ドメイン コントローラーのデータベースには、スキーマの削除のために現在のスキーマでカバーされていない属性があります。

解決方法

この問題を解決するには、次の 2 つの方法のいずれかを使用します。 方法 1 は、条件 1 と条件 2 に対処します。 方法 2 は条件 3 に対処します。

方法 1: 条件 1 と条件 2 の解決

"スキーマの不一致" エラー メッセージは誤解を招きます。 エラーの根本原因は、スキーマ パーティション (CN) またはその中にあるオブジェクトとは関係がない可能性があります。 実際の問題は、重複する値を持つ複数値の属性など、データベース制約違反である可能性があります。

トラブルシューティングを行い、この問題を解決するには、この 6 部構成の手順の手順に従います。

パート 1: 診断ログを有効にする

ソース ドメイン コントローラーで診断ログを有効にします。 それには、以下の手順を実行します。

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護を強化するため、レジストリを変更する前にレジストリをバックアップします。 こうしておけば、問題が発生した場合にレジストリを復元できます。 レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のサポート技術情報番号をクリックしてください。

322756 Windows でレジストリをバックアップおよび復元する方法

  1. [スタート] ボタン、[ファイル名を指定して実行] の順にクリックし、「regedit」と入力して、[OK] をクリックします。

  2. 次のレジストリ サブキーを見つけてクリックします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics

  3. 右側のウィンドウの [ 名前 ] 列で、[ 5 つのレプリケーション イベント ] レジストリ エントリを右クリックし、[ 変更] をクリックします。

  4. 「5」と入力し、[OK] をクリックします。

  5. 次のレジストリ エントリに対して手順 3 と 4 を繰り返します。

    • 7 内部構成
    • 8 ディレクトリ アクセス
    • 9 内部処理
    • 24 DS スキーマ
  6. 左側のウィンドウで、次のレジストリ サブキーをもう一度クリックします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics

  7. [ ファイル ] メニューの [ エクスポート] をクリックします。

  8. [保存場所] ボックス 、"スキーマの不一致" エラー メッセージが表示されているコンピューター上の管理者のデスクトップ フォルダーを開きます。 [ ファイル名 ] ボックスに 「Ntds_logging」と入力し、[OK] をクリック します

    注:

    通常、管理者のデスクトップ フォルダーは C:\Documents and Settings\Administrator\Desktop です。 ただし、システム ドライブ文字は異なる場合があります。 コンピューターで使用されているシステム ドライブを見つけるには、次の手順に従います。

    1. "スキーマの不一致" エラー メッセージが表示されているコンピューターにログオンします。

    2. [ スタート] をクリックし、[ 実行] をクリックし、「 コマンド」と入力して、[OK] をクリック します

    3. 「set」と入力し、Enter キーを押します。

      "SystemDrive=" で始まる出力行には、システムが使用するドライブ文字が表示されます。

    4. 「exit」と入力し、Enter キーを押します。

パート 2: Active Directory の受信レプリケーションを強制する

NTDS 診断ログが有効になっているドメイン コントローラーから Active Directory の受信レプリケーションを実行するように、移行先コンピューターに強制します。 複数のソース ドメイン コントローラーがある場合は、診断ログが有効になっているソース ドメイン コントローラーからレプリケーションが発生していることを確認します。 これを行うには、次のいずれかの方法を使用します。

  • 「パート 1: 診断ログを有効にする」セクションの手順 1 ~ 5 を使用して、考えられるすべてのソース ドメイン コントローラーのログ記録を増や HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics します。

  • ログ記録が増加した "スキーマの不一致" エラーで参照されているソース ドメイン コントローラーを除き、考えられるすべてのソース ドメイン コントローラーで Net Logon サービスを停止します。 これを行うには、次の手順を実行します。

    1. [ スタート] をクリックし、[ プログラム] をポイントし、[ 管理ツール] をポイントして、[ サービス] をクリックします。
    2. [Net Logon] を右クリックし、[停止] をクリックします。
    3. 無人 Active Directory インストール ウィザード の応答ファイルを作成します。
  • NTDS 診断ログが有効になっている "スキーマの不一致" エラーを報告している対象コンピューターで Active Directory インストール ウィザード を実行します。 NTDS 診断ログが正確に実行される時間は、昇格されているコンピューターが Windows 2000 と Windows Server 2003 のどちらを実行しているかによって異なります。

    Active Directory インストール ウィザードは、次の Windows レジストリ キーに影響します。

    • Windows 2000 または Windows Server 2003 を実行しているヘルパー ドメイン コントローラーは、Active Directory インストール ウィザードによってこれらのドメイン コントローラーが降格されるまで、レジストリ サブキーに HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics ログ設定を保持します。
    • 昇格されている Windows 2000 ベースのコンピューターは、各昇格試行の開始時にレジストリ サブキーを上書き HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics します。 ヘルパー ドメイン コントローラーからのスキーマ パーティションの受信レプリケーションが Windows 2000 ベースのドメイン コントローラーを昇格させるたびにレジストリ サブキーの事前設定HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnosticsを開始したら、すぐにNtds_logging.regダブルクリックします。
    • Windows Server 2003 ベースのコンピューターは、レジストリ サブキーの既存の値を HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics 上書きしません。 ただし、既存の設定は、プロモーション試行が失敗するたびに削除されます。

パート 3: 移行先ドメイン コントローラーにレジストリを事前に設定する

Windows 2000 または Windows Server 2003 を実行している移行先ドメイン コントローラーでサブキーを事前に設定 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics します。 これを行うには、次の手順を実行します。

  1. ソース ドメイン コントローラーで、「パート 1: 診断ログを有効にする」セクションの手順 1 から 5 に従います。

  2. 次のレジストリ サブキーを右クリックし、[ エクスポート] をクリックします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ntds\Diagnostics

  3. [保存先] ボックス 、昇格するコンピューター上の管理者のデスクトップ フォルダーを開きます。 [ ファイル名 ] ボックスに 「Ntds_logging」と入力し、[OK] をクリック します

    注:

    Desktop フォルダーを見つけるには、パート 1、手順 8 のメモを参照してください。

  4. 移行先のドメイン コントローラーで、昇格しているコンピューターが Windows Server 2003 または Windows 2000 のどちらを実行しているかに応じて、適切なタイミングで管理者のデスクトップ フォルダーに保存したNtds_logging.reg ファイルをダブルクリックします。

パート 4: 重複する複数値属性を見つける

  1. ソース ドメイン コントローラーと宛先ドメイン コントローラーの両方でディレクトリ サービス イベント ログを調べて、問題のあるオブジェクトを見つけます。

  2. ソース ドメイン コントローラーで、ディレクトリ サービス イベント ログを確認し、昇格しているドメイン コントローラーに送信レプリケートされた最後のオブジェクトと属性を書き留めます。 問題オブジェクトは、ディレクトリ サービス イベント ログで参照される最後のオブジェクトまたは属性、または次に高い更新シーケンス番号 (USN) を持つ同じパーティション内のオブジェクトです。 参照されるオブジェクトのドメイン名パスと、レプリケートされた最後の属性を記録します。 ソース ドメイン コントローラーで、最後のイベント 1240 を探します。 宛先ドメイン コントローラーで、イベント 1203 を探します。

  3. コマンドを ldifde 使用して、参照されているオブジェクトをエクスポートします。 これを行うには、次の手順を実行します。

    1. [ スタート] をクリックし、[ 実行] をクリックし、「 コマンド」と入力して、[OK] をクリック します
    2. 次のように入力し、Enter キーを押します。 LDIFDE -f MISMATCH -d <domain name path of object referenced in event log of the source domain controller>
  4. メモ帳または別のテキスト エディターで ldifde 出力を調べます。 値が重複する属性には特に注意してください。 たとえば、次の切り捨てられた例には、重複する値を持つ属性が含まれています。

    msExchMonitoringResponses:: <複製の開始 #1> W19fQ0xBU1M6c3RyKDE3KV1TTVRQRXZlbnRDb25zdW1lcltOb3RpZnlPbkVycm9yOnN0cigyKV0tMV tSZXNwb25kVG9XaGljaE9iamVjdHM6c3RyKDEpXTBbT2JqZWN0c1RvUmVzcG9uZKRvOnN0cigwKV1b U01UUFNlcnZlcjpzdHIoNCldQUxFWFtUb0xpbmU6c3RyKDI1KV1yamtlbnZpbkBtZXRib2UuazEyLm 5qLnVzW01lc3NhZ2U6c3RyKDMxNyldJVRhcmdldEluc3RhbmNlLk5hbWUlIGhhcyByZXBvcnRlZCBh ICVUYXJnZXRJbnN0YW5jZS5TZXJJTdGF0ZN0cmluZyUuICBSZXBvcnRlZCBzdGF0dXMgaXM6DQpRdWV1ZXMgLSAlVGFy
    Z2V0SW5zdGFuY2UuUXVldWVzU3RhdGVTdHJpbmclDQpEcml2ZXMgLSAlVGFy Z2V0SW5zdGFuY2UuRGlza3NtdGF0ZVN0cmluZyUNClNlcnZpY2VzIC0gJVRhcmdldEluc3RhbmNlLl NlcnZpY2VzU3RhdGVTdHJpbmclDQpNZW1vcnkgLSAlVGFyZ2V0SW5zdGFuY2UuTWVtb3J 5U3RhdGVT dHJpbmclDQpDUFUgLSAlVGFyZ2V0SW5zdGFuY2UuQ1BVU3RhdGVTdHJpbmclDQpbU3ViamVjdDpzdH IoNTkpXSVUYXJnZXRJbnN0YW5jZS5TZXJ2ZXJTdGF0ZVN0cmluZyUgb24gJVRhcmdldEluc3RhbmNl Lk5hbWUl msExchMonitoringResponses:: <Start of Duplicate#2> W19fQ0xBU1M6c3RyKDE3KV1TTVRQRXZlbnRDb25zdW1lcltOb3RpZnlPbkVycm9yOnN0cigyKV0tMV tSZXNwb25kVG9XaGljaE9iam VjdHM6c3RyKDEpXTBbT2JqZWN0c1RvUmVzcG9uZKRvOnN0cigwKV1b U01UUFNlcnZlcjpzdHIoNCldQUxFWFtUb0xpbmU6c3RyKDI1KV1yamtlbnZpbkBtZXRib2UuazEyLm 5qLnVzW01lc3NhZ2U6c3RyKDMxNyldJVRhcmdldEluc3RhbmNlLk5hbWUlIGhhcyByZXBvcnRlZCBh ICVUYXJnZXRJbnN0YW5jZS5TZXJ2ZXJTdGF0ZVN0cmluZyUuICBSZXBvcnRlZCBzdGF0dXMgaXM6DQ pRdWV1ZXMgLSAlVGFyZ2V0SW5zdGFuY2UuUXVldWVzU3RhdGVTdHJpbmclDQpEcml2ZXMgLSAlVGFy Z2V0SW5zdGFuY2UuRGlza3NTdGF0ZVN0cmluZyUNClNlcnZpY2VzIC0gJVRhcmdldEluc3RhbmNlLl NlcnZpY2VzU3RhdGVTdHJpbmclDQpNZW1vcnkgLSAlVGFyZ2V0SW5zdGFuY2UuTWVtb3J5U3RhdGVT dHJpbmclDQpDUFUgLSAlVGFyZ2V0SW5zdGFuY2UuQ1BVU3RhdGVTdHJpbmclDQpbU3ViamVjdDpzdH IoNTkpXSVUYXJnZXRJbnN0YW5jZS5TZXJ2ZXJTdGF0ZVN0cmluZyUgb24gJVRhcmdldEluc3RhbmNl Lk5hbWUl

  5. 重複する値が表示される場合は、 または ldifde を使用Adsiedit.mscして、重複の 1 つを削除します。 重複を削除したら、 Active Directory インストール ウィザード をもう一度実行して、昇格を再試行します。

パート 5: データベースの破損を探す

根本原因は、ソース ドメイン コントローラーでのデータベースの破損である可能性があります。 データベースの破損を見つけて修復するには、次の手順に従います。

  1. ログに記録された最後の 1240 イベントについて、ソース ドメイン コントローラーのディレクトリ サービス イベント ログを調べます。 このイベントは、内部処理イベント 1173 の直前にログに記録される場合があります。 最後の 1240 イベントで参照されるオブジェクトの DN パスをメモし、ソース ドメイン コントローラーのコンソールで Repadmin.exe ツールを実行します。 これを行うには、次の手順を実行します。

    1. [ スタート] をクリックし、[ 実行] をクリックし、「 コマンド」と入力して、[OK] をクリック します
    2. 次のコマンドを入力し、Enter キーを押します。
    REPADMIN /SHOWMETA CN=Secret,CN=Schema,CN=Configuration,DC=CORP,DC=COM  
    
  2. ソース ドメイン コントローラーからレプリケートされた最後の送信レプリケートオブジェクトのメタデータを表示します。 重複する値が見つからない場合は、1173 イベントの前にログに記録された最後の 1240 イベントについて、ソース ドメイン コントローラーのディレクトリ サービス イベント ログを調べます。 1240 イベントの例を次に示します。

  3. repadmin /showmetaソース ドメイン コントローラーでログに記録された最後の 1240 イベントで参照されるオブジェクトのドメイン名パスに対してコマンドを実行します。 たとえば、CORP.COM ドメイン内のドメイン コントローラーに対して手順 2 のサンプル イベントを使用すると、構文は次のようになります。

    REPADMIN /SHOWMETA CN=Secret,CN=Schema,CN=Configuration,DC=CORP,DC=COM
    

    出力で一貫性のない値または疑わしい値を探します。特に[ローカル USN] 列と [元の時刻] 列で検索します。 たとえば、次の切り捨てられた出力例では、defaultObjectCategory と ObjectClass の 2 つの属性に、無効な USN 番号と 0 個の日付と時刻のスタンプが含まれます。

    コマンドからの repadmin /showmeta 切り捨てられた出力:

    CN=Secret,=Schema,CN=Configuration,DC=CORP,DC=COM オブジェクト Loc。 USNOriginating Time: 属性 21962002-01-29 05:52.47 instanceType 18295873486194836 4446-09-07 21:51.13defaultObjectCategory 182958734861948362002-01-29 05:52.47 objectClass

  4. 出力で参照されている問題のあるオブジェクトが重要なオブジェクトでない場合は、オブジェクトの ldifde バックアップを作成し、オブジェクトを削除します。 Active Directory のスキーマ パーティションに存在する問題のあるオブジェクトは削除しないでください。

  5. Active Directory データベースに対してチェック NTDSUTIL ファイルの整合性を実行します。 これを行うには、次の手順を実行します。

    1. Windows 2000 では、setpwd を使用して DSRM パスワードを変更します。 Windows Server 2003 では、ntdsutil を使用して DSRM パスワードを変更します。

      次のオプションは、Windows Server 2003 で機能します。

      322672 Windows Server で Directory Services 復元モードの管理者アカウント パスワードをリセットする方法

    2. DSREPAIR モードでソース ドメイン コントローラーを起動します。

      注:

      DFS ルート情報または DFS リンク情報にアクセスしようとするクライアントは、ドメイン コントローラーが DSREPAIR モードの間に接続しようとすると、"アクセスが拒否されました" というエラー メッセージを受け取る可能性があります。 この動作は仕様です。

    3. Windows コマンド プロンプトから NTDSUTIL ファイルの整合性チェックを実行します。

    4. NTDSUTIL 出力でエラーを探します。

  6. NTDSUTIL 整合性チェックログに記録された jet エラー -1206 の場合は、次のオプションを調査します。 どのような状況でも、NTDSUTIL を使用するか、ESENTUTL 同等のデータベースを使用して、破損した Active Directory データベースを修復しないでください。

    1. フォレスト内の新しいドメイン コントローラーのソースに他の候補ドメイン コントローラーが存在する場合は、問題のあるソース ドメイン コントローラーをオフラインで使用して Active Directory インストール ウィザードを実行します。

    2. ドメイン内の他のドメイン コントローラーが存在し、ヘルパー ドメイン コントローラーに固有の重要なシステム状態がない場合は、元のソース ドメイン コントローラーを適切に降格してみてください。 それ以外の場合は、強制的に降格し、そのメタデータをフォレストから削除します。 Active Directory インストール ウィザードを実行して、フォレスト内のすべてのドメイン コントローラーでの削除のエンドツーエンド レプリケーションが発生した後、元のドメイン コントローラーをフォレストに追加し直します。

    3. 次の条件がすべて満たされている場合は、そのドメイン コントローラーのシステム状態を復元します。

      • 元のソース ドメイン コントローラーは、そのドメイン内の唯一のドメイン コントローラーです。
      • 重要なシステム状態が含まれています (つまり、フォレスト ルート ドメインが含まれているか、Active Directory のコピー内のオブジェクトに大きな投資があります)。
      • 有効なシステム状態のバックアップが存在します (つまり、バックアップは古い tombstonelifetime の日数未満であり、破損したオブジェクトは含まれています)。

      注:

      1 つのレプリカを含むパーティションのシステム状態の復元は、実質的にそのパーティションの権限のある復元です。

    4. 元のソース ドメイン コントローラーがそのドメイン内の唯一のドメイン コントローラーであり、重要なシステム状態が含まれているが有効なシステム状態のバックアップが存在しない場合は、次の操作を検討してください。

    • Microsoft Windows NT 4.0 ベースのバックアップ ドメイン コントローラー (BDC) をドメインに追加します。 このオプションでは、混合モードまたは 4.0 ベースの BDC Windows NTがネイティブ モード ドメインの Windows 2000 ベースのドメイン コントローラーとレプリケートできるようにするスイッチを想定しています。
    • Windows NT 4.0 ベースの BDC をプライベート ネットワークに配置します。
    • Windows NT 4.0 ベースの BDC をプライマリ ドメイン コントローラー (PDC) に昇格させます。
    • Windows NT 4.0 ベースの PDC を Windows 2000 または Windows Server 2003 にアップグレードします。
    • フォールト トレランスと負荷分散のためのレプリカ ドメイン コントローラーを追加します。
    • Active Directory プログラムに必要なスキーマ変更を追加します。

パート 6: 診断ログをオフにする

問題のトラブルシューティングと解決が完了したら、診断ログをオフにします。 これを行うには、「パート 1: 診断ログを有効にする」に移動し、手順 1 ~ 5 に従います。 次のレジストリ エントリを 0 (ゼロ) に設定します。

  • 5 レプリケーション イベント
  • 7 内部構成
  • 8 ディレクトリ アクセス
  • 9 内部処理
  • 24 DS スキーマ

方法 2: 条件 3 の解決

"スキーマの不一致" エラーの 3 番目の原因は、ヘルパー ドメイン コントローラーのデータベースに現在のスキーマでカバーされていない属性がある場合に発生します。 この問題は、Windows 2000 用 Service Pack 3 (SP3) がインストールされる前に、Windows 2000 ドメイン コントローラーでスキーマ オブジェクトが削除された場合に発生する可能性があります。

この問題を解決するには、次の手順を実行します。

  1. スキーマに含まれていない属性を持つオブジェクトを識別します。 これを行うには、次の点を考慮してください。

    • Windows 2000 を実行している場合、影響を受けたオブジェクトの DN を使用して、ソース ドメイン コントローラーに 1039 イベントが記録されます。
    • 他のオペレーティング システムを実行している場合は、ソースのレベル 5 (5) でレプリケーション イベントを有効にします。 送信レプリケーション中に、配布されるオブジェクトと属性がログに記録されます。 エラーが発生したら、対象のコンピューターに出荷される次のオブジェクトを探します。
  2. 追加の属性を持つオブジェクトを特定したら、次のいずれかの操作を行います。

    • オブジェクトを削除します。 問題のある属性は削除され、レプリケーションのために廃棄石が出荷されます。
    • オブジェクトを編集して、問題の属性を削除します。
    • 削除されたスキーマ エントリを再追加します。