ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Directory Integration Platform管理者ガイド
11g リリース1(11.1.1)
B65032-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

9 リレーショナル・データベースの表との同期

この章では、リレーショナル・データベース内の表のデータをOracle Internet Directoryと同期させる方法について説明します。同期は、増分(たとえば、データベース表の行単位)またはすべてのデータベース表を一括で実行できます。


注意:

データベースからOracle Internet Directoryへの複数値属性の同期はサポートされません。

Oracle Directory Integration Platformアプリケーションでは、データベースの削除操作はサポートされていません。ただし、行がデータベースで削除されたときに必ずOracle Internet Directoryのエントリを直接削除する外部トリガーを作成できます。そのようなトリガーの作成方法についての情報は、このドキュメントには含まれていません。

Oracle Internet Directory 11gリリース1(11.1.1)では、Oracle Internet Directoryからリレーショナル・データベースへのデータのエクスポートはサポートされません。


データベースとの同期プロセスでは、ディレクトリ統合プロファイルを実行し、次の手順を行う必要があります。

  1. データベースからのデータの取得。これには、指定したデータ・レコードをデータベースから取得するSQLのSELECT文を実行する必要があります。

  2. ディレクトリへのデータの書込み。これには、取得したデータ・レコードをLDAP属性値に変換し、ディレクトリに対してLDAP操作を実行する必要があります。


注意:

この章を読む前に、Oracle Directory Integration Platformの概要についての次の章をよく理解しておく必要があります。

この章は、次の項目を含みます。

9.1 追加構成情報ファイルの準備

リレーショナル・データベースからOracle Internet Directoryへの同期の間、データベースからのデータの取得は追加の構成情報ファイルによって管理されます。Oracle Directory Integration Platformに次の情報が提供されます。

このファイルを構成するには、$ORACLE_HOME/ldap/odi/confディレクトリにあるサンプル・ファイルDBReader.cfg.masterをユーザーの仕様に従って編集してください。

追加構成情報ファイルの形式

このファイルの構成では、正しい形式に従うことが非常に重要です。TAG名を使用して、各種セクションに分割します。各TAGセクションには、パラメータのリストとそれぞれの値を示します。通常のレイアウトは次のとおりです。

[TAG]
PARAMETER1: value
PARAMETER2: value

[TAG]
PARAMETER1: value
PARAMETER2: value\
VALUE continuation\
value continuation\
end of value continuation

[TAG]
PARAMETER1: value
PARAMETER2: value\
end of value continuation

この形式に従うと、たとえば、DBReader.cfg.masterファイルは次のようになります。

[DBQUERY]
SELECT: SELECT\
EMPNO EmpNum,\
ENAME,\
REPLACE(EMAIL),'@ACME.COM','') UID,\
EMAIL,\
TELEPHONE,\
TO_CHAR(LAST_UPDATE_DATE,'YYYYMMDDHH24MISS') Modified_Date\
FROM\
EMPLOYEE\
WHERE\
LAST_UPDATE_DATE>TO_DATE (:Modified_Date,'YYYYMMDDHH24MISS')\
ORDER BY\
LAST_UPDATE_DATE

[SYNC-PARAMS]
CHANGEKEYATTRS: Modified_Date

SELECT文全体がSELECTパラメータの値として、タグDBQUERYで表されているセクションに入力されています。値が冗長なため、SELECT文の終わりまですべての行で値継続文字が最後の文字として入力されています。

SELECT文に存在するWHERE条件にも注意してください。WHERE条件はModified_Dateに基づいて変更を取得します。変更されたユーザー・レコードをOracle Internet Directoryにコピーするには、WHERE句を更新してレコードを取得します。この例では、Modified_Dateが増分同期のキーです。これは日付であるため、文字列書式で指定する必要があります。

CHANGEKEYATTRSパラメータ値は、増分同期の実行中に使用される列の名前です。これらの列の値は、常にプロファイルのorclodipcondirlastappliedchgnum属性に格納されます。SELECT文が実行されるたびに、それに応じてこの属性の現在の値がSQL文に入力されます。これによって、データは常に増分取得されます。

CHANGEKEYATTRSに複数の列名(たとえばcolumn1:column2)がある場合、プロファイルのorclodipcondirlastappliedchgnum属性の値はvalue1~value2(value1column1value2column2に対応)などとして格納されます。

列名は、属性値ペアとしてOracle Directory Integration Platformに取得された後、設定されたマッピング・ルールに従ってLDAP属性値にマッピングされます。このため、SELECT文で取得されたすべての列名は、式ではなく単純名である必要があります。たとえば、式REPLACE(EMAIL),'@ACME.COM','')を使用することはできますが、この式の値は、UIDとして取得されます。

プロファイルを作成する場合は、orclodipcondirlastappliedchgnum属性に値を設定する必要があります。この日付より後のすべての変更(この値より大きいLAST_UPDATE_DATEを持つ表内の行)が取得されます。たとえば、orclodipcondirlastappliedchgnum属性を20000101000000に設定すると、2000年1月1日以降のすべての従業員の変更が取得されます。

ORDER BY句があるため、戻されるすべてのデータベース行はLAST_UPDATE_DATEの順になります(つまり、取得され、ディレクトリに適用される変更は時間順になります)。最後の変更が取得され、適用されると、次の処理が行われます。

  1. orclodipcondirlastappliedchgnum属性値が、取得された最後の行からModified_Dateに設定されます。

  2. プロファイルが更新されます。

Oracle Directory Integration Platformは、プロファイルを再実行する場合、常に、すでに格納された値を使用します。

9.2 マッピング・ファイルの準備

マッピング・ルールを構成するには、「マッピング・ルールとその形式」の指示に従います。

9.3 ディレクトリ統合プロファイルの準備

ディレクトリ統合プロファイルは、Oracle Enterprise Manager Fusion Middleware Controlを使用して作成できます。Oracle Enterprise Manager Fusion Middleware Controlを使用する際には、manageSyncProfilesコマンドのupdate操作を使用して、追加構成情報ファイルとマッピング・ファイルをアップロードする必要があります。

ディレクトリ統合プロファイルを構成するには、「Oracle Directory Integration Platformでのコネクタの登録」の指示に従います。ただし、次の注意事項があります。

9.4 例: リレーショナル・データベース表とOracle Internet Directoryの同期化

この項では、リレーショナル・データベース表とOracle Internet Directoryを同期化する方法について説明します。


注意:

Directory Integration Platformデータベース・プロファイルでは、削除操作はサポートされていません。ただし、行がデータベースで削除されたときに必ずOracle Internet Directoryのエントリを直接削除する独立したトリガーを、DIPの外部に作成できます。そのようなトリガーの作成方法についての情報は、このドキュメントには含まれていません。

この章は、次の項目を含みます。

この例では、従業員データを含む次のリレーショナル・データベース表がOracle Internet Directoryと同期化されます。

EMPNO ENAME LAST_UPDATE_DATE EMAIL TELEPHONE
98357 JOHN DOE 2-JAN-2000 JOHN.DOE@ACME.COM 435-324-3455
98360 ROGER BECK 3-JUL-2001 ROGER.BECK@ACME.COM 435-324-3600
98365 JIMMY WONG 4-MAR-2001 JIMMY.WONG@ACME.COM 435-324-2390
98370 GEORGE TWINSLEY 6-FEB-2002 GEORGE.TWINSLEY@ACME.COM 435-324-9232

この例のサンプル・プロファイル(DBReader.properties)は、サンプルの構成ファイル、マッピング・ファイルとともに、$ORACLE_HOME/ldap/odi/confディレクトリにあります。この例では、次のように仮定します。

9.4.1 追加構成情報ファイルの構成

この例では、「追加構成情報ファイルの準備」で説明した追加構成情報ファイルと同じファイルを使用します。

9.4.2 マッピング・ファイルの構成

この例のマッピング・ファイルの内容は次のとおりです。

DomainRules
NONLDAP:dc=testdbsync,dc=com:uid=%,dc=testdbsync,dc=com
AttributeRules
ename: : : :cn: :person
ename : : : :sn: :person
uid : : : :uid: :inetOrgperson:
EMail: : : :mail: :inetOrgperson
Telephone: : : :telephonenumber: :inetOrgperson
empnum: : : :employeenumber: :inetOrgperson

このマッピング・ファイルは次のことを指定しています。

  • ディレクトリ・エントリはuid=%,dc=testdbsync,dc=comとして作成されます。パーセント記号(%)は、uidの実際の値のプレースホルダです。uidをマッピング・ルールに含め、マッピング後に値を持つようにする必要があります。存在しない場合、識別名の構成は失敗します。

  • cnsnの両方の属性は、enameと同じ値である必要があります。

  • uid要素の値は、EMail接頭辞の値(電子メール・アドレス内のアット・マーク(@)文字より前の部分)になります。

  • empnum属性は、ディレクトリ・エントリ内のemployeenumberになります。

  • telephone属性は、ディレクトリ・エントリ内のtelephone numberになります。

9.4.3 ディレクトリ統合プロファイルの構成

この例のディレクトリ統合プロファイルには、表9-1に示す属性値が含まれます。これらの値が入ったサンプル統合プロファイルとそれに対応するマッピング・ファイルおよび構成ファイルが$ORACLE_HOME/ldap/odi/confディレクトリにあります。Oracle Enterprise Manager Fusion Middleware Controlを使用するか、「同期プロファイルの作成」の指示に従ってプロファイルを作成できます。

表9-1 TESTDBIMPORT用のディレクトリ統合プロファイル

属性

プロファイル名(odip.profile.name)

TESTDBIMPORT

同期モード(odip.profile.syncmode)

IMPORT

プロファイルのステータス(odip.profile.status)

ENABLE

エージェントの実行コマンド(odip.profile.agentexecommand)

NULL

拡張構成情報(odip.profile.configfile)

LDAP属性で個々に保持されない構成の詳細を保持します。

接続されたディレクトリ・アカウント(odip.profile.condiraccount)

testdbsync

接続されたディレクトリ・アカウントのパスワード(odip.profile.condirpassword)

testdbsyncpwd

接続されたディレクトリURL(odip.profile.condirurl)

machine.acme.com:1526:iasdb

インタフェース・タイプ(odip.profile.interface)

DB

マッピング・ファイル(odip.profile.mapfile)

マッピング・ルールの格納用属性。

OID一致フィルタ(odip.profile.oidfilter)

employeenumber

これは、一致を検索中、ディレクトリの検索にemployeenumberが使用されることを意味します。一致が検証されると、ディレクトリ・エントリが修正されます。それ以外の場合は、新しいエントリが作成されます。これは、orclOdipOIDMatchingFilter属性がデータベース内で一意なことを保証するためにも必要です。

データベース行が取得されると、Oracle Directory Integration Platformでは、ドメイン・ルールに従って、dc=testdbsync,dc=comドメインのディレクトリでemployeenumberを検索します。一致が検出された場合は、検索された行内の列の最新の値でそのエントリが更新されます。一致が検出されなかった場合は、列値のすべての属性を持つ新しいエントリがディレクトリ内に作成されます。

前回適用された変更番号(odip.profile.lastchgnum)

20000101000000

これは、プロファイルの最初の実行時に、4つすべての行を取得し同期することを意味します。その後は、表内のLAST_UPDATE_DATE列が最終更新時刻に更新した場合にのみ、行が取得されます。


9.4.4 追加構成情報ファイルとマッピング・ファイルのアップロード

manageSyncProfilesコマンドのupdate操作を使用して、追加構成情報ファイルとマッピング・ファイルを次のように更新します。

manageSyncProfiles update -h HOST -p PORT -D WLS_USER -pf PROFILE_NAME -file FILE_NAME

9.4.5 同期プロセス

この例では、同期プロセスの手順は、次のとおりです。

  1. 「スケジューリングの間隔」(odip.profile.schedinterval)属性に指定された値が期限切れになるたびに、Oracle Directory Integration Platformは、TESTDBIMPORTプロファイル用に新しいプロファイル・スレッドを起動します。

  2. プロファイル・スレッドは、追加構成情報を読み取ってSQLを準備し、実行します。

  3. データベースから取得された行ごとに、マッピング・ルールがレコードに適用され、LDAP属性が作成されます。

  4. 「OID一致フィルタ」(odip.profile.oidfilter)属性によって、Oracle Internet Directory内に一致するエントリがあるかどうかをOracle Directory Integration Platformが判断します。一致するエントリがある場合は更新されます。ない場合は新しいエントリが作成されます。ディレクトリ操作の後、「前回適用された変更番号」(odip.profile.lastchgnum)属性が更新されます。

9.4.6 例に関する注意事項

行は、次の形式でデータベースから取得されます。

EmpNum: 98357
EName: JOHN DOE
UID: JOHN.DOE
EMAIL: JOHN.DOE@ACME.COM
TELEPHONE: 435-324-3455
Modified_Date: 20000102000000

このレコード上でマッピングが行われると、次の形式で出力されます。

dn: uid=john.doe,dc=testdbsync,dc=com
uid: JOHN.DOE
cn: JOHN DOE 
sn: JOHN DOE 
mail: JOHN.DOE@ACME.COM
employeenumber: 98357
telephonenumber: 435-324-3455
objectclass: person
objectclass: inetorgperson

dc=testdbsync,dc=comドメイン下のemployeenumber=98357フィルタを使用して、ディレクトリ内でサブツリー検索が行われます。検索結果が既存のエントリの場合は、そのエントリが更新されます。それ以外の場合は、新しいエントリが作成されます。「OID一致フィルタ」(odip.profile.oidfilter)属性がemployeenumberに設定されているため、取得されるすべてのデータベース・レコードにはその列があります。この場合は、employeenumberにマップされるEmpNumです。

マッピング・ファイル内のその他の属性で、SQLによって取得されるデータに含まれないもの(birthday属性など)は無視されます。

プロファイル・スレッドは、SQLからのすべての変更レコードを処理した後、次の属性の正しい値でディレクトリを更新します。

  • 前回適用された変更番号(odip.profile.lastchgnum)

  • 最終実行時間(orclOdipLastExecutionTime)

  • 最終正常実行時間(orclOdipLastSuccessfulExecutionTime)