この章では、リレーショナル・データベース内の表のデータを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)