この章では、リレーショナル・データベース内の表のデータをOracle Internet Directoryと同期させる方法について説明します。同期は、増分(たとえば、データベース表の行単位)またはすべてのデータベース表を一括で実行できます。
注意: データベースからOracle Internet Directoryへの複数値属性の同期はサポートされません。 |
データベースとの同期プロセスでは、ディレクトリ統合プロファイルを実行し、次の手順を行う必要があります。
データベースからのデータの取得。これには、指定したデータ・レコードをデータベースから取得するSQLのSELECT
文を実行する必要があります。
ディレクトリへのデータの書込み。これには、取得したデータ・レコードをLDAP属性値に変換し、ディレクトリに対してLDAP操作を実行する必要があります。
注意: この章を読む前に、Oracle Directory Integration Platformの概要についての次の章をよく理解しておく必要があります。Oracle Internet Directory 11gリリース1(11.1.1)では、Oracle Internet Directoryからリレーショナル・データベースへのデータのエクスポートはサポートされません。 |
この章の内容は次のとおりです。
リレーショナル・データベースからOracle Internet Directoryへの同期中、データベースからのデータの取得は、追加構成情報ファイルによって制御されます。追加構成情報ファイルは、Oracle Directory Integration Platformに次の情報を提供します。
実行するSELECT
文
増分同期に使用される属性またはデータベース列のいずれか。通常、タイムスタンプを含む属性、または次のSQL文で増分データの取得に使用する必要がある変更順序番号のいずれかです。
このファイルを構成するには、$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
文の終わりまですべての行で値継続文字が最後の文字として入力されています。
CHANGEKEYATTRS
パラメータ値は、増分同期の実行中に使用される列の名前です。これらの列の値は、常にプロファイルのorclodipcondirlastappliedchgnum
属性に格納されます。SELECT
文が実行されるたびに、それに応じてこの属性の現在の値がSQL文に入力されます。これによって、データは常に増分取得されます。
CHANGEKEYATTRS
に複数の列名(たとえばcolumn1:column2
)がある場合、プロファイルのorclodipcondirlastappliedchgnum
属性の値はvalue1~value2
(value1
はcolumn1
、value2
はcolumn2
に対応)などとして格納されます。
列名は、属性値ペアとしてOracle Directory Integration Platformに取得された後、設定されたマッピング・ルールに従ってLDAP属性値にマッピングされます。このため、SELECT
文で取得されたすべての列名は、式ではなく単純名である必要があります。たとえば、式REPLACE(EMAIL),'@ACME.COM','')
を使用することはできますが、この式の値は、UID
として取得されます。
この例では、Modified_Date
が増分同期のキーです。これは日付であるため、文字列書式で指定する必要があります。
プロファイルを作成する場合は、orclodipcondirlastappliedchgnum
属性に値を設定する必要があります。この日付より後のすべての変更(この値より大きいLAST_UPDATE_DATE
を持つ表内の行)が取得されます。たとえば、orclodipcondirlastappliedchgnum
属性を20000101000000
に設定すると、2000年1月1日以降のすべての従業員の変更が取得されます。
ORDER BY
句を使用しているため、返されるすべてのデータベース行はLAST_UPDATE_DATE
の順序です。変更は、行われた順に取得されディレクトリに適用されます。最後の変更が取得されて適用された後、次の処理が行われます。
orclodipcondirlastappliedchgnum
属性値が、取得された最後の行からModified_Date
に設定されます。
プロファイルが更新されます。
Oracle Directory Integration Platformは、プロファイルを再実行する場合、常に、すでに格納された値を使用します。
マッピング・ルールを構成するには、「マッピング・ルールとその形式」の指示に従います。
ディレクトリ統合プロファイルは、Oracle Enterprise Manager Fusion Middleware Controlを使用して作成できます。Oracle Enterprise Manager Fusion Middleware Controlを使用する際には、manageSyncProfiles
コマンドのupdate
操作を使用して、追加構成情報ファイルとマッピング・ファイルをアップロードする必要があります。
ディレクトリ統合プロファイルを構成するには、「Oracle Directory Integration Platformでのコネクタの登録」の指示に従います。ただし、次の注意事項があります。
「エージェントの実行コマンド」(orclodipAgentExeCommand
)属性に値を設定しないでください。
「インタフェース・タイプ」(orclodipDataInterfaceType
)属性をDB
に設定します。
この項では、リレーショナル・データベース表とOracle Internet Directoryを同期化する方法について説明します。内容は次のとおりです。
この例では、従業員データを含む次のリレーショナル・データベース表がOracle Internet Directoryと同期化されます。
EMPNO | ENAME | LAST_UPDATE_DATE | 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ディレクトリにあります。この例では、次のように仮定します。
表の名前は、Employee
です。
プロファイル名は、TESTDBIMPORT
です。
データベース・レコードをディレクトリ・エントリと結合するには、従業員番号(EMPNO
)が使用されます。この番号は、「OID一致フィルタ」(orclOdipOIDMatchingFilter
)属性に指定されています。この属性の詳細は、『Oracle Identity Managementユーザー・リファレンス』の属性リファレンスに関する章を参照してください。
この表は、データベース内のtestsync
/testsyncpwd
スキーマにあります。データベースはホストmachine.acme.com
に存在し、データベース・リスナー・ポートは1526
、SIDはiasdb
です。データベースURLは、machine.acme.com:1526:iasdb
です。
適切な読取り/書込み権限がこのプロファイル、つまりorclodipagentname=testdbimport, cn=subscriber profile, cn=changelog subscriber, cn=oracle internet directory
に明示的に付与されています。
プロファイルは、構成設定1内に作成されます。
この例では、「追加構成情報ファイルの準備」で説明した追加構成情報ファイルと同じファイルを使用します。
この例のマッピング・ファイルの内容は次のとおりです。
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
に値が入るようにするには、uid
がマッピング・ルールに存在している必要があります。存在しない場合、識別名の構成は失敗します。
cn
とsn
の両方の属性は、ename
と同じ値である必要があります。
uid
要素の値は、EMail
接頭辞の値(電子メール・アドレス内のアット・マーク(@)文字より前の部分)になります。
empnum
属性は、ディレクトリ・エントリ内のemployeenumber
になります。
telephone
属性は、ディレクトリ・エントリ内のtelephone number
になります。
この例のディレクトリ統合プロファイルには、表9-1に示す属性値が含まれます。これらの値が入ったサンプル統合プロファイルとそれに対応するマッピング・ファイルおよび構成ファイルが$ORACLE_HOME/ldap/odi/confディレクトリにあります。Oracle Enterprise Manager Fusion Middleware Controlを使用するか、「同期プロファイルの作成」の指示に従ってプロファイルを作成できます。
表9-1 TESTDBIMPORT用のディレクトリ統合プロファイル
属性 | 値 |
---|---|
プロファイル名( |
|
同期モード( |
|
プロファイルのステータス( |
|
エージェントの実行コマンド( |
NULL |
拡張構成情報( |
前述のファイルに示したとおり。 |
接続されたディレクトリ・アカウント( |
|
接続されたディレクトリ・アカウントのパスワード( |
|
接続されたディレクトリURL( |
|
インタフェース・タイプ( |
|
マッピング・ファイル( |
ファイルからアップロード。 |
OID一致フィルタ( |
これは、一致を検索中、ディレクトリの検索に データベース行が取得されると、Oracle Directory Integration Platformでは、ドメイン・ルールに従って、 |
前回適用された変更番号( |
これは、プロファイルの最初の実行時に、4つすべての行を取得し同期することを意味します。その後は、表内の |
manageSyncProfilesコマンドのupdate
操作を使用して、追加構成情報ファイルとマッピング・ファイルを次のように更新します。
manageSyncProfiles update -h HOST -p PORT -D WLS_USER -pf PROFILE_NAME -file FILE_NAME
この例では、同期プロセスの手順は、次のとおりです。
「スケジューリングの間隔」(odip.profile.schedinterval
)属性に指定された値が期限切れになるたびに、Oracle Directory Integration Platformは、TESTDBIMPORTプロファイル用に新しいプロファイル・スレッドを起動します。
プロファイル・スレッドは、追加構成情報を読み取ってSQLを準備し、実行します。
データベースから取得された行ごとに、マッピング・ルールがレコードに適用され、LDAP属性が作成されます。
「OID一致フィルタ」(odip.profile.oidfilter
)属性によって、Oracle Internet Directory内に一致するエントリがあるかどうかをOracle Directory Integration Platformが判断します。一致するエントリがある場合は更新されます。ない場合は新しいエントリが作成されます。ディレクトリ操作の後、「前回適用された変更番号」(odip.profile.lastchgnum
)属性が更新されます。
行は、次の形式でデータベースから取得されます。
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
)