Adamsync のOBJ_CLASS_VIOLATION エラーのトラブルシューティング

この記事では、Windows Server で Adamsync ツールを使用するときに発生するOBJ_CLASS_VIOLATION エラーのトラブルシューティング方法について説明します。

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

概要

このエラーは、Active Directory ディレクトリ サービスと ADAM インスタンスのクラス定義の違いが原因で発生します。 この問題をトラブルシューティングするには、次のセクションで説明する手順に従います。

  • オブジェクトの属性とクラスを決定する
  • 属性が TOP クラスに属している場合の問題を解決する手順
  • 属性が TOP クラスに属していない場合の問題を解決する手順

現象

Active Directory アプリケーション モード (ADAM) シンクロナイザー (Adamsync.exe) ツールを使用して、Active Directory オブジェクトを Windows Server 上の ADAM インスタンスに同期しようとするとします。 ただし、Adamsync ログ ファイルには次のようなエラー メッセージが記録されます。

処理エントリ: ページ X、フレーム X、エントリ X、カウント X、USN X 処理ソース エントリ
<guid=f9023a23e3a06d408f07a0d51c301f38> スコープ内エントリの処理
f9023a23e3a06d408f07a0d51c301f38。 ターゲット オブジェクトの追加
CN= TestGroup,OU= Accounts,dc= domain, dc= com. 属性の追加: sourceobjectguid、objectClass、instanceType、displayName、info、adminDescription、displayNamePrintable、userAccountControl、codePage、countryCode、logonHours、primaryGroupID、comment、accountExpires、sAMAccountName、desktopProfile、legacyExchangeDN、userPrincipalName

Ldap エラーが発生しました。 ldap_add_sW: オブジェクト クラス違反。 拡張情報: 0000207D: UpdErr: DSID-0315119D, 問題 6002 (OBJ_CLASS_VIOLATION), data -2054643804

原因

この問題は、Active Directory と ADAM のクラス定義の違いが原因で発生します。 この違いは、クラスに無効な属性を含むようにオブジェクトを変更しようとすると表示されます。 たとえば、属性が ADAM スキーマで定義されていないか、属性が定義されていますが、特定のクラスの必須属性または省略可能属性の一覧に属性が存在しません。 通常、2 番目の状況は、この問題の最も頻繁な原因です。

同期するオブジェクトのクラス定義には、ADAM で使用できない Active Directory 内の 1 つ以上の属性が含まれています。 「現象」セクションに記載されているエラー メッセージの [属性の追加] セクションには、追加しようとしている属性が表示されます。 これらの属性は、同期するオブジェクトのクラスの省略可能または必須の属性の一覧で定義されます。

たとえば、「現象」セクションに記載されているエラー メッセージでは、参照オブジェクトは CN=TestGroup です。 Active Directory で CN=TestGroup オブジェクトを表示し、このクラスとすべての親クラスの属性の一覧をチェックすると、この一覧の 1 つ以上の属性が ADAM のこのクラスで有効になっている必須属性または省略可能な属性の一覧に含まれていないことがわかります。

注:

これには、すべての親クラスの属性リストが含まれます。

解決方法

この問題を解決するには、次の手順に従います。

オブジェクトの属性とクラスを決定する

  1. 失敗したオブジェクトに追加されている属性の一覧を確認します。 失敗したオブジェクトは、同期ログにエラー メッセージを表示することで判断できます。 失敗したオブジェクトは、常に、同期ログの最後にエラー メッセージの直前に示される最後のオブジェクトです。 たとえば、 CN=TestGroup オブジェクトは、"現象" セクションに記載されているエラー メッセージで失敗しました。
  2. エラー メッセージに DisplayNamePrintable、Flags、または ExtensionName 属性を含めるかどうかを確認します。 これらの属性のいずれかがエラー メッセージに含まれている場合は、「属性が TOP クラスに属している場合の問題を解決する手順」セクションを参照してください。 エラー メッセージに属性が含まれていない場合は、「属性が TOP クラスに属していない場合の問題を解決する手順」セクションを参照してください。

属性が TOP クラスに属している場合の問題を解決する手順

Active Directory スキーマの TOP クラスに DisplayNamePrintable、Flags、または ExtensionName 属性が含まれていることがわかります。 ただし、これらの属性は ADAM の TOP クラスには含まれません。 ただし、ADAM で TOP クラスを変更することはできません。 そのため、次のいずれかの方法を使用して問題を解決します。

  • XML 構成ファイルの exclude セクションを使用して、 <これらの属性を除外> します。
  • MMC スキーマを使用して、ADAM スキーマの関連クラスの Optional 属性の一覧にこれらの属性を手動で追加します。 たとえば、「現象」セクションに記載されているエラー メッセージでは、失敗したオブジェクトは Group クラスです。 したがって、ADAM の Group クラスの [省略可能な属性] リストにこれらの属性を追加する必要があります。

属性が TOP クラスに属していない場合の問題を解決する手順

  1. ADSchemaAnalyzer の [ツール\オプション] メニューの [更新] をクリックし、[LDIF 生成] タブの [新しい要素と現在の要素への参照] をクリックします。

  2. [ファイル] メニューを使用して Active Directory をターゲット スキーマとして読み込み、ADAM を基本スキーマとして読み込みます。 ツールがスキーマの比較を完了するまで待ちます。

  3. [ スキーマ ] メニューの [ すべての要素を含まれるものとしてマークする] をクリックします。

  4. [ ファイル ] メニューの [ LDIF ファイルの作成 ] をクリックして、変更を含む LDF ファイルを作成します。

    注:

    この LDF ファイルを ADAM に直接インポートすると、必要な属性が正しく追加または変更されない可能性があります。

  5. エラー メッセージは表示されません。 これが発生する理由の説明については、「なぜ LDF ファイルを ADAM に直接インポートできないのか」セクションを参照してください。 この場合は、LDF ファイルをインポートせずに手順 5 に進みます。

  6. 手順 4 で作成した LDF ファイルを調べます。 具体的には、問題の原因となっているクラスを表示します。 たとえば、Group クラスを表示します。 このクラスのセクションには、Active Directory のこのクラスの必須または省略可能な属性の一覧に存在するが、ADAM に存在しない属性の一覧が含まれます。

  7. LDF ファイルで問題の属性を見つけます。 これを行うには、LDF ファイルの "#attributes" セクションを調べます。 インポートされない属性は、このセクションに残ります。 通常、problem 属性は、"#attributes" セクションで見つかる唯一の属性です。 問題の属性が見つかる場合は、手順 8 に進みます。 問題の属性が見つからない場合は、手順 7 に進みます。

  8. LDF ファイルの "#attributes" セクションから問題属性が明らかでない場合は、次の手順に従って問題属性を見つけます。

    1. 現在、クラスに対するすべての変更は、LDF ファイル内の 1 つのセクションの下にあります。 これは、"#Updating Present Elements" セクションです。 このセクションの下で、問題のあるクラスを更新するセクションを見つけます。 たとえば、Group クラスが問題の場合は、次のようなセクションがあります。

      # Update 要素: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add:mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      注 この例では、ここに配置される可能性があるその他のエントリの一部が除外されています。

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

    2. 手順 4a で見つけたエントリを変更するには、操作ごとにエントリを 1 つの属性に分割します。 たとえば、次のようなエントリを使用して、手順 7a の例のエントリを変更します。

      # Update 要素: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add:mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      -

      # Update 要素: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add:mayContain
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add:mayContain
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add:mayContain
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      注 この例では、ここに配置される可能性があるその他のエントリの一部が除外されています。

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

  9. LDF ファイルを保存します。

  10. LDF ファイルの先頭にあるコマンドを使用して、LDF ファイルを ADAM スキーマにインポートします。

  11. Ldifde ユーティリティによって表示されるレポートを表示します。 Ldifde は、インポートされなかった属性で発生したエラーを報告するようになりました。 エラー情報は、次のサンプル情報のようになります。

    ldifde -i -u -f c:\data\problem\KBtest_modified.ldf -s localhost:50010 -j .-c "cn=Configuration,dc=X" #configurationNamingContext  
    Connecting to "localhost:50010"
    

    SSPI を使用して現在のユーザーとしてログインする
    ファイル "c:\data\problem\KBtest_modified.ldf" からディレクトリをインポートする
    エントリの読み込み。
    15 行目にエラーを追加する: 既に存在する
    サーバー側のエラーは次のとおりです。0x2071 オブジェクトを に追加しようとしました。
    既に使用されている名前を持つ ectory。
    拡張サーバー エラーは次のとおりです。
    00002071: UpdErr: DSID-0305030D, 問題 6005 (ENTRY_EXISTS), データ 0

    注:

    エラー・レポートに示されている行番号を表示して、LDF ファイル内の問題属性を見つけます。

  12. このエラー情報を使用して、問題属性を見つけ、問題を解決します。 問題を解決するには、次の手順に従います。

    1. エラー・レポートに示されている行番号を表示して、LDF ファイル内の問題属性を見つけます。 失敗した属性には、DisplayName に "DUP-" プレフィックスが付く場合があります。
    2. 属性のオブジェクト識別子 (OID) をメモし、ADAM でこのオブジェクト識別子を探します。
    3. 同じオブジェクト識別子を持つ ADAM 内の属性を検索します。
    4. ADAM と LDF ファイルの属性を比較して、違いを見つけます。 たとえば、属性の DisplayName は異なるが、同じオブジェクト識別子を持つ場合があります。
    5. 保持する属性を決定し、もう 1 つを修正します。 たとえば、LDF ファイルからエントリを削除したり、ADAM 属性エントリを修正したりすることができます。 または、XML 構成ファイルの exclude セクションを使用して、問題属性を <同期から除外> することもできます。
  13. 問題の属性が Active Directory または ADAM スキーマで修正された後、または LDF ファイルから属性が削除されたら、変更した LDF ファイルをもう一度インポートします。 これで、インポート操作が成功します。 問題が解決されない場合は、問題の原因となっている別の属性が存在する可能性があります。 すべての属性がインポートされるまで、手順 10 から 12 を繰り返します。

診断ログ

問題の属性が見つかると、問題の原因が明らかでない可能性があります。 たとえば、重複するオブジェクト識別子や

異なる DisplayName エントリ。 問題属性がインポートされていない場合は、LDAP インターフェイスのデバッグ ログを有効にすることで、エラーに関する詳細情報を取得できます。 これを行うには、次の手順を実行します。

  1. ldifde エラーの詳細を取得するには、ADAM で LDAP ログを有効にします。 これを行うには、 カテゴリ 16 LDAP インターフェイス イベント レジストリ エントリの値を 5 に変更します。 このレジストリ エントリは、次のレジストリ サブキーの下にあります。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ADAM_instanceName\Diagnostics

  2. LDF ファイルをもう一度インポートします。

  3. イベント ログでエラーを確認します。

  4. トラブルシューティングが完了したら、 カテゴリ 16 LDAP インターフェイス イベント レジストリ エントリの値を 0 にリセットします。 それ以外の場合、イベント ログがフラッディングされます。

Microsoft サポートにお問い合わせください

この記事の手順を完了した後に問題が解決しない場合は、Microsoft サポートにお問い合わせください。

状態

この動作は仕様です。

詳細

Adamsync ツールを使用して Active Directory から ADAM にデータを同期するには、次の手順に従います。

  1. [ スタート] をクリックし、[ すべてのプログラム] をポイントし、[ ADAM] をポイントし、[ ADAM ツール] コマンド プロンプトをクリックします。
  2. コマンド プロンプトで次のコマンドを入力し、Enter キーを押します: adamsync /fs Server_Name: configurationName /log log_file_name port_numberします.log

LDF ファイルを ADAM に直接インポートできない理由

「属性が TOP クラスに属していない場合に問題を解決する手順」セクションの手順 1 で作成した LDF ファイルを ADAM にインポートしても、これらの属性は ADAM の属性リストに追加されません。 この動作を確認するには、ADAM スキーマ MMC または ADSIEDIT を使用してスキーマを調べます。 この動作は、Ldifde インポート操作がサイレント モードで失敗したために発生します。 現時点では、Ldifde はエラーを報告しません。 ADSchemaAnalyzer が LDF ファイルを構築する方法が原因で、サイレント モードで失敗します。 ADSchemaAnalyzer では、 ntdsschemaadd コマンドと ntdsSchemamodify コマンドが 使用されます。 これらのコマンドは、制限されていない LDAP 制御を有効にします。 これは、エラーがサイレントであることを意味します。

さらに、クラスごとに、省略可能な属性の一覧に追加するすべての属性が、1 つの追加/変更操作で追加されます。 したがって、いずれかの属性の追加に問題がある場合、操作全体が失敗し、リスト内の属性は追加されません。 したがって、問題の属性を見つけるには、追加の手順を実行する必要があります。

通常、失敗の原因として考えられるのは、属性の重複オブジェクト識別子、または Active Directory と ADAM の属性定義の他の違いです。 つまり、重複する OID が見つからない可能性があり、LDapDisplayName が ADAM に存在しない場合は、属性が新しい属性と見なされる可能性があります。