第4章 ディレクトリーエントリーの変更の追跡

特定の状況では、エントリーに変更が加えられるタイミングを追跡すると便利です。Directory Server が追跡するエントリーの変更には、以下の 2 つの側面があります。
  • 変更シーケンス番号を使用してデータベースへの変更を追跡します。これは、レプリケーションおよび同期で使用されるシーケンス番号の変更に類似しています。通常のディレクトリー操作はすべて、シーケンス番号がトリガーされます。
  • 作成および変更の情報を割り当てます。これらの属性は、エントリーを作成して直近に変更したユーザーの名前と、エントリーの作成および修正時のタイムスタンプを記録します。
注記
エントリー更新シーケンス番号 (USN)、時間および名前の変更、および時間および作成はすべて操作属性であり、通常の ldapsearch では返されません。操作属性の検索実行に関する詳細は、「操作属性の検索」を参照してください。

4.1. 更新シーケンス番号でデータベースへの変更の追跡

USN プラグインにより、エントリーが変更されたかどうかを LDAP クライアントおよびサーバーが特定できるようになります。

4.1.1. エントリーシーケンス番号の概要

USN プラグインが有効な場合は、エントリーに対して書き込み操作を実行するたびに、エントリーに割り当てられるシーケンス番号 (USN) を更新します。書き込み操作には、add、modify、modrdn、および delete 操作が含まれます。エクスポート操作などの内部データベース操作は、更新シーケンスでカウントされません。 USN カウンターは、最近割り当てられた USN を追跡します。

4.1.1.1. ローカルおよびグローバルの USN

USN は、単一のエントリーではなく、データベース全体に対してグローバルに評価されます。USN は、データベースまたはディレクトリーの変更を追跡するために単に上向きにチェックするという点で、レプリケーションと同期の変更シーケンス番号に似ています。ただし、エントリー USN は CSN と別個に維持され、USN は複製されません。
このエントリーには、entryUSN 操作属性のエントリーへの最後の変更の変更番号が表示されます。操作属性の詳細は、「操作属性の検索」を参照してください。

例4.1 エントリー USN の例

uid=example,ou=People,dc=example,dc=com ユーザーエントリーの entryusn 属性を表示するには、以下のコマンドを実行します。
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com:389 -x -b "uid=example,ou=People,dc=example,dc=com" -s base -x entryusn

dn: uid=example,ou=People,dc=example,dc=com
entryusn: 17653
USN プラグインには、ローカルモードとグローバルモードという 2 つのモードがあります。
  • ローカルモードでは、各バックエンドデータベースには、そのバックエンドデータベースに固有の USN カウンターを持つ USN プラグインのインスタンスがあります。これはデフォルト設定です。
  • グローバルモードでは、ディレクトリー全体に追加された変更に適用されるグローバル USN カウンターを使用する USN プラグインのグローバルインスタンスがあります。
USN プラグインをローカルモードに設定すると、結果はローカルのバックエンドデータベースに限定されます。USN プラグインをグローバルモードに設定すると、返される結果はディレクトリー全体に対して行われます。
ルート DSE は、lastusn 属性のデータベースのエントリーに割り当てられた最新の USN を表示します。USN プラグインがローカルモードに設定されているため、各データベースに独自のローカル USN カウンターがある場合、lastUSN は、USN が割り当てられているデータベースと、USN の両方を表示します。
lastusn;database_name:USN
以下に例を示します。
lastusn;example1: 2130
lastusn;example2: 2070
グローバルモードでは、データベースが共有 USN カウンターを使用する場合、lastUSN 属性は最新の USN のみを表示します。
lastusn: 4200

4.1.1.2. USN エントリーのインポート

エントリーがインポートされると、USN プラグインは nsslapd-entryusn-import-initval 属性を使用して、エントリーに USN が割り当てられているかどうかを確認します。nsslapd-entryusn-import-initval の値が数値である場合、インポートされたエントリーはこの数字をエントリーの USN として使用します。nsslapd-entryusn-import-initval の値が数値でない場合、USN プラグインは lastUSN 属性の値を使用して、インポートしたエントリーの USN で増やします。

4.1.2. USN プラグインの有効化

本セクションでは、USN プラグインがエントリーに USN を記録できるようにする方法を説明します。

4.1.2.1. コマンドラインで USN プラグインの有効化

コマンドラインを使用して USN プラグインを有効にするには、以下を実行します。
  1. dsconf ユーティリティーを使用してプラグインを有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn enable
  2. インスタンスを再起動します。
    # dsctl instance_name restart

4.1.2.2. Web コンソールを使用した USN プラグインの有効化

Web コンソールを使用して USN プラグインを有効にするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを選択します。
  4. USN プラグインを選択します。
  5. ステータスを ON に変更し、プラグインを有効にします。
  6. インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。

4.1.3. グローバルの USN

デフォルト設定では、Directory Server は各バックエンドデータベースに一意の更新シーケンス番号 (USN) を使用します。あるいは、すべてのバックエンドデータベースで一意の USN を有効にすることができます。
注記
この機能を使用するには、USN プラグインを有効にする必要があります。「USN プラグインの有効化」を参照してください。

4.1.3.1. グローバル USN が有効になっているかどうかの特定

本セクションでは、すべてのバックエンドデータベースで USN を有効にするかどうかを特定する方法を説明します。
4.1.3.1.1. コマンドラインでグローバル USN が有効になっているかどうかの特定
コマンドラインを使用して、グローバル USN 機能の現在のステータスを表示するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global
USN global mode is disabled
4.1.3.1.2. Web コンソールを使用してグローバル USN が有効になっているかどうかの特定
Web コンソールを使用してグローバル USN 機能の現在のステータスを表示するには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを選択します。
  4. USN プラグインを選択します。
  5. USN Global スイッチが On に設定されていることを確認します。

4.1.3.2. グローバル USN の有効化

4.1.3.2.1. コマンドラインでグローバル USN の有効化
コマンドラインを使用してグローバル USN を有効にするには、以下を実行します。
  1. グローバル USN を有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global on
  2. インスタンスを再起動します。
    # dsctl instance_name restart
4.1.3.2.2. Web コンソールを使用したグローバル USN の有効化
Web コンソールを使用してグローバル USN を有効にするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを開きます。
  4. USN プラグインを選択します。
  5. プラグインのステータスを On に変更します。
  6. USN Global ステータスを On に変更します。
  7. インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。

4.1.4. USN Tombstone エントリーのクリーンアップ

エントリーが削除されると、USN プラグインは、エントリーを tombstone エントリーに移動します。レプリケーションが有効な場合は、USN および Replication プラグインによって個別の tombstone エントリーが保持されます。tombstone エントリーはレプリケーションプロセスで削除されますが、サーバーのパフォーマンスには、USN tombstones を削除することが有益です。
  • サーバーをレプリカに変換する前に
  • サーバーのメモリーを解放する

4.1.4.1. コマンドラインを使用した USN tombstone エントリーのクリーンアップ

コマンドラインで、dc=example,dc=com 接尾辞から USN tombstone エントリーをすべて削除するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn cleanup -s "dc=example,dc=com"
必要に応じて、-o max_USN オプションをコマンドに渡して、指定した値まで USN tombstone エントリーを削除します。

4.1.4.2. Web コンソールを使用した USN tombstone エントリーのクリーンアップ

Web コンソールを使用して、dc=example,dc=com 接尾辞からすべての USN tombstone エントリーを削除するには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを開きます。
  4. USN プラグインを選択します。
  5. Run Fixup Task ボタンをクリックします。
  6. フィールドを入力し、Run を押します。