Red Hat Training

A Red Hat training course is available for Red Hat Directory Server

第6章 Directory Database への入力

データベースには、Red Hat Directory Server が管理するディレクトリーデータが含まれます。

6.1. データのインポート

Directory Server には、データをインポートする(Directory Server Console またはインポートツールを使用)、またはレプリケーション用にデータベースを初期化することで、以下のいずれかの方法でデータベースにデータを作成できます。
表6.1「インポート方法の比較」では、インポートとデータベースの初期化の相違点を説明します。

表6.1 インポート方法の比較

動作 インポート データベースの初期化
データベースの上書き いいえ はい
LDAP 操作 追加、変更、削除 追加のみ
パフォーマンス より時間がかかる 速い
パーティション特長 すべてのパーティションで機能 ローカルパーティションのみ
サーバー障害への応答 ベストエフォート (障害が発生した時点までに行われたすべての変更が残る) アトミック (障害発生後にすべての変更が失われる)
LDIF ファイルの場所 コンソールへのローカル サーバーに対するコンソールまたはローカルへのローカル
設定情報 (cn=config) をインポートする Yes いいえ

6.1.1. インポート中の EntryUSN 初期値の設定

エントリーがサーバーからエクスポートされ、別のサーバーにインポートされた場合には、エントリーの更新シーケンス番号 (USN) が保持されません。「更新シーケンス番号でデータベースへの変更の追跡」で説明されているように、エントリー USN はローカルサーバーで発生する操作に割り当てられるため、これらの USN を別のサーバーにインポートすることは意味がありません。
ただし、データベースのインポート時やデータベースの初期化時にエントリーに USN 値を設定することが可能です (レプリカがレプリケーションに対して初期化される場合など)。これは、nsslapd-entryusn-import-initval 属性を設定して行います。これにより、インポートされたすべてのエントリーの USN が開始されます。
nsslapd-entryusn-import-initval には 2 つの値を指定することができます。
  • 整数。インポートされたすべてのエントリーに使用される明示的な開始番号です。
  • 次に、インポートされたすべてのエントリーは、インポート操作前にサーバー上の最も大きなエントリー USN 値を使用し、1 つずつ増分します。
nsslapd-entryusn-import-initval が設定されていない場合、すべてのエントリー USN はゼロで始まります。
たとえば、インポートまたは初期化操作の前にサーバーの最大値が 1000 で、nsslapd-entryusn-import-initval の値が next の場合、インポートされたすべてのエントリーには 1001 の USN が割り当てられます。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "(cn=*)" entryusn

dn: dc=example,dc=com
entryusn: 1001
dn: ou=Accounting,dc=example,dc=com
entryusn: 1001
dn: ou=Product Development,dc=example,dc=com
entryusn: 1001
...
dn: uid=jsmith,ou=people,dc=example,dc=com
entryusn: 1001
...
エントリー USN の初期値を設定するには、データをインポートするサーバーまたは初期化を実行するマスターサーバーに nsslapd-entryusn-import-initval 属性を追加するだけです。
# ldapmodify -D "cn=Directory Manager" -W -x -D "cn=directory manager" -W -p 389 -h server.example.com -x

dn: cn=config
changetype: modify
add: nsslapd-entryusn-import-initval
nsslapd-entryusn-import-initval: next
注記
マルチマスターレプリケーションでは、nsslapd-entryusn-import-initval 属性はサーバー間で 複製されません。つまり、値は、レプリカの初期化に使用しているすべてのサプライヤーサーバーに対して設定する必要があります。
たとえば、Supplier1 に nsslapd-entryusn-import-initvalnext に設定され、レプリカの初期化に使用される場合は、インポートされたエントリーのエントリー USN は最も高い値に 1 が追加されます。Supplier2 に nsslapd-entryusn-import-initval が設定されておらず、レプリカの初期化に使用される場合は、Supplier1 および Supplier 2 にマルチマスターレプリカ合意がある場合でも、インポートされたエントリーのすべてのエントリー USN はゼロで始まります。

6.1.2. コンソールからのデータベースのインポート

Directory Server コンソールからインポート操作を実行すると、ldapmodify 操作はデータを追加し、エントリーの変更や削除を行います。この操作は、Directory Server が管理するすべてのデータベースと、Directory Server が設定したデータベースリンクを持つリモートデータベースで実行されます。
インポート操作は、Directory Server コンソールに対してローカルとなるサーバーインスタンスまたは別のホストマシン(リモートインポート操作)で実行できます。
インポートを実行するには、Directory Manager としてログインしている必要があります。
注記
インポート操作に使用される LDIF ファイルは、UTF-8 文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8 文字セットエンコーディングに変換しません。
警告
インポートされたすべての LDIF ファイルには、root 接尾辞も含まれている必要があります。
Directory Server コンソールからデータをインポートするには、以下を実行します。
  1. Tasks タブを選択します。画面の下部までスクロールし、Import Database を選択します。
    または、Configuration タブを開き、Console メニューから Import を選択します。
  2. Import Database ダイアログボックスで、LDIF ファイル フィールドでインポートする LDIF ファイルへの完全パスを入力するか、Browse をクリックしてインポートするファイルを選択します。
    コンソールがマシンのリモートで実行している場合、フィールド名は LDIF ファイルとして表示されます(コンソールを実行するマシン上)。ファイルを参照する場合、Directory Server ホストの現在のディレクトリーは参照されませんが、コンソールを実行しているマシンのファイルシステムも参照しません。
    リモートコンソールを使用してデータベースをインポートする場合 は、データベースへの相対パスを使用しないでください。リモートインポートでは、ファイルに相対パス が指定されている場合に Cannot write to file... というエラーで操作に失敗します。リモートインポート操作には常に絶対パスを使用します。
  3. オプション ボックスで、以下のオプションのいずれかまたは両方を選択します。
    • のみを追加します。LDIF ファイルには、デフォルトの追加手順に加えて、変更および削除手順を含めることができます。サーバーが add 以外の操作を無視するには、Add only チェックボックスを選択します。
    • Error に進みます。エラーが発生した場合でもインポートを続行するには、サーバーの Continue on error チェックボックスを選択します。たとえば、このオプションを使用して、新しいものに加えて、データベースにすでに存在するエントリーが含まれる LDIF ファイルをインポートします。サーバーノートでは、すべての新規エントリーの追加中に rejects ファイルの既存のエントリーがあります。
  4. File for Rejects フィールドに、サーバーがインポートできないすべてのエントリーを記録するファイルへの完全パスを入力するか、Browse をクリックして拒否が含まれるファイルを選択します。
    拒否は、データベースにインポートできないエントリーです。たとえば、サーバーは、データベースにすでに存在するエントリーや、親オブジェクトのないエントリーをインポートできません。コンソールは、サーバーによって送信されたエラーメッセージが rejects ファイルに書き込みます。
    このフィールドを空白のままにすると、サーバーは拒否されたエントリーを記録しません。
サーバーはインポートを実行し、インデックスも作成します。
注記
末尾のスペースは、リモートコンソールのインポート時に破棄されますが、ローカルコンソールまたは ldif2db インポート操作時に保持されます。

6.1.3. コンソールからのデータベースの初期化

データベース内の既存のデータは、データベースを初期化することで上書きできます。
Directory Manager (root DN)を除き、ルートエントリーが含まれる LDIF ファイルをデータベースにインポートできないため、データベースを初期化するために Directory Manager としてログインしている必要があります。Directory Manager のみが、dc =example,dc=com などのルートエントリーにアクセスできます。
警告
LDIF ファイルからデータベースを初期化する場合は、データを復元しない限り、o=NetscapeRoot 接尾辞を上書きしないように注意してください。それ以外の場合は、データベースの初期化により情報が削除され、Directory Server の再インストールが必要になる場合があります。
Directory Server コンソールを使用してデータベースを初期化するには、以下を実行します。
  1. Configuration タブを選択します。
  2. 左側のナビゲーションペインで Data tree を展開します。初期化するデータベースの接尾辞を展開し、データベース自体をクリックします。
  3. データベースを右クリックし、Initialize Database を選択します。
    または、Object メニューから Initialize Database を選択します。
  4. LDIF file フィールドにインポートする LDIF ファイルへの完全パスを入力するか、Browse をクリックします。
  5. コンソールが、インポートされているファイルのマシンから実行中の場合は、OK をクリックして、即座にインポートに進みます。Console がマシンリモートから LDIF ファイルを含むサーバーに実行している場合は、以下のオプションのいずれかを選択して OK をクリックします。
    • ローカルマシンからいる。LDIF ファイルがローカルマシンにあることを示します。
    • サーバーマシン から。LDIF ファイルがリモートサーバーにあることを示します。
    デフォルトの LDIF ディレクトリーは /var/lib/dirsrv/slapd-instance/ldif です。

6.1.4. コマンドラインからのインポート

コマンドラインでデータをインポートする方法は 4 つあります。
注記
インポート操作に使用される LDIF ファイルは、UTF-8 文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8 文字セットエンコーディングに変換しません。
警告
インポートされたすべての LDIF ファイルには、root 接尾辞も含まれている必要があります。
注記
暗号化したデータベースをインポートするには、スクリプトで -E オプションを使用します。詳細は、「暗号化したデータベースのエクスポートおよびインポート」 を参照してください。

6.1.4.1. ldif2db コマンドラインユーティリティーを使用したインポート

ldif2db スクリプトは、指定したデータベースのデータを上書きします。また、このスクリプトでは、インポートの開始時に Directory Server を停止する必要があります。
デフォルトでは、スクリプトは最初に保存してから、既存の o=NetscapeRoot 設定情報を、インポートするファイルの o=NetscapeRoot 設定情報とマージします。
警告
このスクリプトは、データベースのデータを上書きします。
LDIF をインポートするには、以下を行います。
  1. サーバーを停止します。
    # systemctl stop dirsrv@instance
  2. ldif2db コマンドラインスクリプトを実行します。
    # ldif2db -Z instance_name -n Database1 -i /var/lib/dirsrv/slapd-instance/ldif/demo.ldif -i /var/lib/dirsrv/slapd-instance/ldif/demo2.ldif
    警告
    -n オプションで指定したデータベースが LDIF ファイルに含まれる接尾辞と一致しない場合は、データベースに含まれるすべてのデータが削除され、インポートに失敗します。データベース名が間違っていることがないことを確認してください。
  3. サーバーを起動します。
    # systemctl start dirsrv@instance

6.1.4.2. ldif2db.pl Perl スクリプトを使用したインポート

ldif2db スクリプトと同様に、ldif2db.pl スクリプトは、指定されたデータベースのデータを上書きします。このスクリプトでは、インポートを実行するためにサーバーを実行する必要があります。
警告
このスクリプトは、データベースのデータを上書きします。
ldif2db.pl スクリプトを実行します。
# ldif2db.pl -Z instance_name -D "cn=Directory Manager" -w secret -i /var/lib/dirsrv/slapd-instance/ldif/demo.ldif -n Database1
注記
スクリプトを実行するには root 権限は必要ありませんが、Directory Manager として認証する必要があります。

6.1.4.3. ldif2ldap コマンドラインスクリプトを使用したインポート

ldif2ldap スクリプトは、LDAP を介して LDIF ファイルを追加します。このスクリプトを使用すると、データはすべてのディレクトリーデータベースに同時にインポートされます。ldif2ldap を使用してインポートするには、サーバーが稼働している必要があります。
ldif2ldap を使用して LDIF をインポートするには、以下を実行します。
[root@server ~]# ldif2ldap -Z instance_name -D "cn=Directory Manager" -w secretpwd /var/lib/dirsrv/slapd-instance/ldif/demo.ldif
ldif2ldap スクリプトでは、管理ユーザーの DN、管理ユーザーのパスワード、およびインポートする LDIF ファイルの絶対パスおよびファイル名が必要です。

6.1.4.4. cn=tasks エントリーを使用したインポート

Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリーのコンテナーエントリーです。複数の共通ディレクトリータスクには、cn=tasks,cn=config の下にコンテナーエントリーがあります。一時タスクエントリーは、cn=import,cn=tasks,cn=config の下に作成し、インポート操作を開始できます。
ldif2db および ldif2db.pl スクリプトと同様に、cn=tasks のインポート操作はデータベースのすべての情報を上書きします。
このタスクエントリーには以下の 3 つの属性が必要です。
  • 一意の名前(cn)
  • インポートする LDIF ファイルのファイル名(nsFilename)
  • ファイルをインポートするデータベースの名前(nsInstance)
ldif2db および ldif2db.pl スクリプトで、- s オプションおよび -x オプションと同様に、インポートを包含または除外する接尾辞の DN を指定することもできます。
エントリーは、ldapmodify を使用したエントリーの追加」 で説明されているように ldapmodify を使用して追加されます。以下に例を示します。
# ldapmodify -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=example import,cn=import,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example import
nsFilename: /home/files/example.ldif
nsInstance: userRoot
nsIncludeSuffix: ou=People,dc=example,dc=com
nsExcludeSuffix: ou=Groups,dc=example,dc=com
タスクが完了するとすぐに、エントリーはディレクトリー設定から削除されます。
この例で使用される属性と、このエントリーに設定できるその他の属性の詳細は、Red Hat Directory Server 設定、コマンド、およびファイルリファレンス の cn=import,cn=tasks,cn=config エントリーの説明を参照してください。