既存のクラスと属性の無効化

スキーマの追加は永続的です。 attributeSchemaオブジェクトとclassSchemaオブジェクトは削除できません。 分散システムでは、特定のクラスまたは属性のインスタンスが存在しないことを保証するのは困難です。 クラスまたは属性の定義を削除すると、そのクラスまたは属性の既存のインスタンスが破損します。

既存のクラスまたは属性を無効にするには、"無効"としてマークします。 これは、そのようにマークされたクラスまたは属性の既存のインスタンスには影響しませんが、新しいインスタンスが作成されなくなります。

スキーマクラスと属性を無効にする場合は、次の制限が適用されます。

  • カテゴリ1のクラスまたは属性を無効にすることはできません。
  • 無効になっていないクラスのメンバーである属性を無効にすることはできません。 これは、 (無効になっていない) クラスに属性が必要な場合があり、属性を無効にすると、クラスの新しいインスタンスが作成されなくなるためです。

属性を無効にするには、attributeSchemaオブジェクトのisDefunct属性をTRUEに設定します。 属性を無効にすると、属性の新しいインスタンスを作成できなくなります。 属性を再度有効にするには、isDefunct属性をFALSEに設定します。

クラスを無効にするには、classSchemaオブジェクトのisDefunct属性をTRUEに設定します。 クラスを無効にすると、クラスの新しいインスタンスを作成できなくなります。 クラスを再度有効にするには、isDefunct属性をFALSEに設定します。

運用環境では、スキーマオブジェクトを非機能として設定すると便利です。 スキーマ拡張機能のテストバージョンが不要になった場合は、非機能としてマークします。 これを復元するには、isDefunct属性を削除するか、属性値をFALSEに設定します。 また、操作を簡単に元に戻すことができるため、スキーマオブジェクトを非機能に設定して、意図しない削除から保護することもできます。

スキーマオブジェクトを非機能にすると、Active Directoryサーバーは属性またはクラスの既存のインスタンスをクリーンアップしないことに注意してください。 isDefunctプロパティを削除すると、すべてのインスタンスが有効な通常のオブジェクトに戻ります。

attributeSchemaオブジェクトまたはclassSchemaオブジェクトを非機能としてマークした場合のその他の影響を次に示します。

  • インスタンスの追加または変更が失敗します。
  • エラーコードは、機能していないクラスが存在しないかのように動作します。
  • 検索と削除は、機能していないスキーマオブジェクトがないかのように動作します。
  • オブジェクトからの属性全体の削除のみを許可します。

次のリストには、機能していないスキーマ拡張の影響を軽減するための、運用環境での追加オプションが含まれています。

  • 機能していないクラスからすべてのmayHave属性値を削除します。
  • 機能していないクラスからすべてのmustHave属性値のサイズを小さくします。
  • 機能していない属性をグローバルカタログから削除します。
  • 機能していない属性をインデックスから削除します。

運用環境で不要なスキーマ変更を削除するためのその他のオプションとして、開発者はテスト用にプライベートドメインコントローラーを使用できます。 この場合、次のことができます。

  • Dcpromo.exeを使用してDCを降格し、Active Directoryサーバーを"リセット"します。 降格が完了したら、もう一度Dcpromo.exeを使用して、サーバーをDCに昇格させます。 その後、開発者はLDIFスクリプトを使用して、必要なクラス、属性、およびオブジェクトインスタンスを再読み込みできます。
  • Ntbackup.exeを使用して、使用可能なディスクパーティションにシステム状態のバックアップを実行します。 復元するには、セーフ/ディレクトリサービス復元モードで再起動します。

Windows Server 2003オペレーティングシステムでは、クラスまたは属性を非機能に設定すると、新しいクラスまたは属性を作成して置き換えるときに、非機能のスキーマ要素のldapDisplayNameschemaIdGuidOID、およびmapiIDの値をすぐに再利用できます。 クラスまたは属性の非機能バージョンはスキーマコンテナーに保持されますが、MMCスナップインでは非表示になります。 古いスキーマ要素を再アクティブ化するには、isDefunctFALSEに設定します。

次のLDIFコード例は、isDefunct属性を変更し、それを置き換えるために作成する新しいクラスと混同されないようにRDNを変更する方法を示しています。

 dn: CN=MyClass,CN=Schema,CN=Configuration,DC=X
   changetype: modify
   replace: isDefunct
   isDefunct: TRUE
   -

   dn: CN=MyClass,CN=Schema,CN=Configuration,DC=X
   changetype: modrdn
   newrdn: cn=MyClassOld
   deleteoldrdn: 1

   dn:
   changetype: modify
   add: schemaUpdateNow
   schemaUpdateNow: 1
   -

Windows Server 2003オペレーティングシステムで実行されているコンピューターのフォレストに対してLDIFコード例を実行するには、次のコマンドを使用します。

ldifde/i/f rdn.ldf/c"DC=X""dc=mydomain, dc=com"

("DC=X"は定数です) 。