12 Oracle Databaseの表との同期
Oracle Database表に格納されたデータをOracleバックエンド・ディレクトリに同期し、Oracleバックエンド・ディレクトリをOracle Databaseに同期するために、DBReader構成ファイルとdbexport構成ファイルについて理解します。
ノート:
ノート:
-
データベースからOracleバックエンド・ディレクトリへの複数値属性の同期はサポートされません。
Oracle Directory Integration Platformアプリケーションでは、データベースの削除操作はサポートされていません。ただし、行がデータベースで削除されたときに必ずOracleバックエンド・ディレクトリのエントリを直接削除する外部トリガーを作成できます。そのようなトリガーの作成方法についての情報は、このドキュメントには含まれていません。
Oracle Enterprise Managerユーザー・インタフェースまたはWLSTコマンド行ユーティリティを使用して、Oracle Databaseインポートおよびエクスポート・プロファイルを構成できます。
ユーザー・インタフェースを使用したプロファイルの作成および管理のヘルプは、「Fusion Middleware Controlを使用した同期プロファイルの管理」を参照してください。WLST
manageSyncProfilesユーティリティを使用したプロファイルの作成および管理のヘルプは、「manageSyncProfilesを使用した同期プロファイルの管理」を参照してください。
トピック:
ノート:
この章を読む前に、Oracle Directory Integration Platformの概要についての次の章をよく理解しておく必要があります。
12.1 追加構成情報ファイルの概要
DBReader構成ファイルを使用して、Oracle Database表に格納されているデータをOracleバックエンド・ディレクトリと同期するためにコマンド行から変更できます。
同期は、増分(たとえば、データベース表の行単位)またはすべてのデータベース表を一括で実行できます。
Oracleバックエンド・ディレクトリをOracle Databaseと同期するエクスポート・プロファイルをコマンド行から作成する場合、dbexport構成ファイルを変更します。
12.1.1 追加構成情報ファイルの準備
Oracle DatabaseからOracleバックエンド・ディレクトリにデータを同期するインポート・プロファイルを作成するには、$ORACLE_HOME/ldap/odi/confディレクトリのサンプル・ファイルDBReader.cfg.masterを開き、それを仕様に応じて編集します。
Oracleバックエンド・ディレクトリからOracle Databaseにデータを同期するエクスポート・プロファイルを作成するには、$ORACLE_HOME/ldap/odi/confディレクトリのサンプル・ファイルdbexport.cfg.masterを開き、それを仕様に応じて編集します。
12.1.2 追加構成情報ファイルの形式の理解
このファイルの構成では、正しい形式に従うことが非常に重要です。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
12.1.3 DBReader.cfg.master構成ファイルの理解
Oracle DatabaseからOracleバックエンド・ディレクトリへの同期の間、データベースからのデータの取得はDBReader.cfg.masterファイルによって管理されます。Oracle Directory Integration Platformに次の情報が提供されます。
-
実行する
SELECT文 -
増分同期に使用される属性またはデータベース列のいずれか。通常、タイムスタンプを含む属性、または次のSQL文で増分データの取得に使用する必要がある変更順序番号のいずれかです。
DBReader.cfg.masterファイルは次のようになります。
[DBQUERY] SELECT: SELECT\ EMPNO EmpNum,\ ENAME,\ REPLACE(EMAIL,'@example.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バックエンド・ディレクトリにコピーするには、WHERE句を更新してレコードを取得します。この例では、Modified_Dateが増分同期のキーです。これは日付であるため、文字列書式で指定する必要があります。
CHANGEKEYATTRSパラメータ値は、増分同期の実行中に使用される列の名前です。これらの列の値は、常にプロファイルのorclodipcondirlastappliedchgnum属性に格納されます。SELECT文が実行されるたびに、それに応じてこの属性の現在の値がSQL文に入力されます。これによって、データは常に増分取得されます。
CHANGEKEYATTRSに複数の列名(たとえばcolumn1:column2)がある場合、プロファイルのorclodipcondirlastappliedchgnum属性の値はvalue1~value2(value1はcolumn1、value2はcolumn2に対応)などとして格納されます。
列名は、属性値ペアとしてOracle Directory Integration Platformに取得された後、設定されたマッピング・ルールに従ってLDAP属性値にマッピングされます。このため、SELECT文で取得されたすべての列名は、式ではなく単純名である必要があります。たとえば、式REPLACE(EMAIL,'@example.com','')を使用することはできますが、この式の値は、UIDとして取得されます。
プロファイルを作成する場合は、orclodipcondirlastappliedchgnum属性に値を設定する必要があります。この日付より後のすべての変更(この値より大きいLAST_UPDATE_DATEを持つ表内の行)が取得されます。たとえば、orclodipcondirlastappliedchgnum属性を20000101000000に設定すると、2000年1月1日以降のすべての従業員の変更が取得されます。
ORDER BY句があるため、戻されるすべてのデータベース行はLAST_UPDATE_DATEの順になります(つまり、取得され、ディレクトリに適用される変更は時間順になります)。最後の変更が取得され、適用されると、次の処理が行われます。
-
orclodipcondirlastappliedchgnum属性値が、取得された最後の行からModified_Dateに設定されます。 -
プロファイルが更新されます。
Oracle Directory Integration Platformは、プロファイルを再実行する場合、常に、すでに格納された値を使用します。
12.1.4 dbexport.cfg.master構成ファイルの理解
dbexport.cfg.masterファイルでは、Oracle Databaseの構造が記述されます。Oracle Directory Integration Platformに次の情報が提供されます。
-
プライマリ表。プロファイル内のその他すべての表が接続されるデータベース表。各
dbexport.cfg.masterファイルに1つのプライマリ表が必要です。 -
主キー。同期する表の主キーを指定します。この構成に含まれるすべての表名に対して、主キーを定義する必要があります。
主キーが複数の列で構成されている場合は、各列の名前をカンマで区切って入力します。たとえば、
id,name,dobとします。 -
表リレーション。接続属性を指定して、プライマリ表とプロファイルに含まれるその他すべての表の間の関係を定義します。サンプル・ファイルでは、
idが接続属性となります。必要に応じて、カンマ区切りリストを使用して複数の属性を指定します(たとえば、
id,name)。
dbexport.cfg.masterファイルは次のようになります。
[INTERFACEDETAILS] Writer: oracle.ldap.odip.gsi.DatabaseWriter CheckAllEntries: null SkipErrorToSyncNextChange: false UpdateSearchCount: 100 SearchDeltaSize: 500 [SYNC-PARAMS] PRIMARY_TABLE: table1 [PRIMARY-KEYS] table1:id table2:id [TABLE-RELATIONS] table1^table2:id
ノート:
SkipErrorToSyncNextChangeパラメータでは、同期中の変更を処理しているときのエラーについて、Oracle Directory Integration and Provisioning Serverでの処理方法を決定します。デフォルトでは、SkipErrorToSyncNextChangeパラメータにはfalseの値が割り当てられ、エラーが解決されるまでOracle Directory Integration and Provisioning Serverで変更の処理が続行されることを意味します。SkipErrorToSyncNextChangeパラメータにtrueの値を割り当てると、Oracle Directory Integration and Provisioning Serverで、エラーの原因である変更がすべてスキップされます。
12.2 構成ファイルの更新
DBReader.map.masterおよびdbexport.map.master構成ファイルを構成する必要があります。
トピック:
12.2.1 DBReader.map.master構成ファイル
DBReader.map.master構成ファイルを更新して、マッピング・ルールを構成できます。
ディレクトリ同期環境では、あるドメインの典型的なエントリ・セットを別のドメインに移動できます。同様に、ある属性のセットを別の属性のセットにマップすることができます。
マッピング・ルールは、接続ディレクトリとOracleバックエンド・ディレクトリ間の属性の変換を制御します。各コネクタでは、その同期プロファイルのorclodipAttributeMappingRules属性に一連のマッピング・ルールが格納されています。Oracle Directory Integration Platformはこれらのルールを使用し、ディレクトリからエクスポートする場合、および接続ディレクトリまたはファイルからインポートしたデータを変換する場合に、必要に応じて属性をマップします。Oracle Directory Integration Platformでは、変更をOracleバックエンド・ディレクトリにインポートする場合、マッピング・ルールに従って接続ディレクトリの変更レコードをLDAP変更レコードに変換します。同様に、エクスポート時は、コネクタがOracleバックエンド・ディレクトリでの変更内容を接続ディレクトリが理解できる形式に変換します。
12.2.2 dbexport.map.master構成ファイル
dbexport.map.master構成ファイルを構成して、マッピング・ルールを構成できます。
ディレクトリ同期環境では、あるドメインの典型的なエントリ・セットを別のドメインに移動できます。同様に、ある属性のセットを別の属性のセットにマップすることができます。
マッピング・ルールは、接続ディレクトリとOracleバックエンド・ディレクトリ間の属性の変換を制御します。各コネクタでは、その同期プロファイルのorclodipAttributeMappingRules属性に一連のマッピング・ルールが格納されています。Oracle Directory Integration Platformはこれらのルールを使用し、ディレクトリからエクスポートする場合、および接続ディレクトリまたはファイルからインポートしたデータを変換する場合に、必要に応じて属性をマップします。Oracle Directory Integration Platformでは、変更をOracleバックエンド・ディレクトリにインポートする場合、マッピング・ルールに従って接続ディレクトリの変更レコードをLDAP変更レコードに変換します。同様に、エクスポート時は、コネクタがOracleバックエンド・ディレクトリでの変更内容を接続ディレクトリが理解できる形式に変換します。
$ORACLE_HOME/ldap/odi/confディレクトリにあるサンプル・ファイルdbexport.map.masterを開き、仕様に応じて編集します。
dbexport.map.master構成ファイルのマッピング・ルールの形式では、宛先オブジェクト・クラスおよび宛先属性のかわりに、宛先表の名前および宛先列の名前を指定します。
たとえば、サンプル・マップ・ルールは次のようになります。
uid:1::inetorgperson:id::table2:
この例では、uidがソース属性、inetorgpersonがソース・オブジェクト・クラスです。次に、idが宛先列、table2が宛先表の名前です。マップ・ファイルには、主キーとして指定されているすべての列を含める必要があり、それが必須の属性であることを指定する必要もあります。このマッピング・ルールの例では、uidソース属性の後にある:1によって、uidが必須の属性であることが示されています。
12.3 ディレクトリ統合プロファイルの準備
ディレクトリ統合プロファイルは、Oracle Enterprise Manager Fusion Middleware Controlユーザー・インタフェースを使用して作成できます。
「Fusion Middleware Controlを使用した同期プロファイルの管理」を参照してください。
Oracle Enterprise Manager Fusion Middleware Controlを使用する際には、manageSyncProfilesコマンドのupdate操作を使用して、追加構成情報ファイルとマッピング・ファイルをアップロードする必要があります。manageSyncProfilesコマンドの使用の詳細は、「manageSyncProfilesを使用した同期プロファイルの管理」を参照してください。
ディレクトリ統合プロファイルを構成するには、「Oracle Directory Integration Platformでのコネクタの登録」の指示に従います。ただし、次の注意事項があります。
-
「エージェントの実行コマンド」(
orclodipAgentExeCommand)属性に値を設定しないでください。 -
「インタフェース・タイプ」(
orclodipDataInterfaceType)属性をDBに設定します。
12.4 例: リレーショナル・データベース表とバックエンド・ディレクトリの同期化
この項では、リレーショナル・データベース表とOracleバックエンド・ディレクトリを同期化する方法について説明します。
ノート:
Directory Integration Platformデータベース・プロファイルでは、削除操作はサポートされていません。ただし、行がデータベースで削除されたときに必ずOracleバックエンド・ディレクトリのエントリを直接削除する独立したトリガーを、DIPの外部に作成できます。そのようなトリガーの作成方法についての情報は、このドキュメントには含まれていません。
この項の内容は次のとおりです。
12.4.1 サンプル・シナリオについて
この例では、従業員データを含む次のリレーショナル・データベース表が、Oracleバックエンド・ディレクトリとどのように同期されるかを示します。
| EMPNO | ENAME | LAST_UPDATE_DATE | TELEPHONE | |
|---|---|---|---|---|
|
98357 |
JOHN DOE |
2-JAN-2000 |
JOHN.DOE@EXAMPLE.COM |
435-324-3455 |
|
98360 |
ROGER BECK |
3-JUL-2001 |
ROGER.BECK@EXAMPLE.COM |
435-324-3600 |
|
98365 |
JIMMY WONG |
4-MAR-2001 |
JIMMY.WONG@EXAMPLE.COM |
435-324-2390 |
|
98370 |
GEORGE TWINSLEY |
6-FEB-2002 |
GEORGE.TWINSLEY@EXAMPLE.COM |
435-324-9232 |
この例のサンプル・プロファイル(DBReader.properties)は、サンプルの構成ファイル、マッピング・ファイルとともに、$ORACLE_HOME/ldap/odi/confディレクトリにあります。
この例では、次のようになります。
-
表の名前は、
Employeeです。 -
プロファイル名は、
TESTDBIMPORTです。 -
データベース・レコードをディレクトリ・エントリと結合するには、従業員番号(
EMPNO)が使用されます。この番号は、『Oracle Identity Managementユーザー・リファレンス』の属性リファレンスに関する章に説明されている「OID一致フィルタ」(orclOdipOIDMatchingFilter)属性に指定されています。 -
この表は、データベース内の
testsync/testsyncpwdスキーマにあります。データベースはホストmachine.example.comに存在し、データベース・リスナー・ポートは1526で、serviceNameはias.example.comです。データベースURLは、machine.example.com:1526:ias.example.comです。 -
適切な読取り/書込み権限がこのプロファイル、つまり
orclodipagentname=testdbimport, cn=subscriber profile, cn=changelog subscriber, cn=oracle internet directoryに明示的に付与されています。 -
プロファイルは、構成設定1内に作成されます。
12.4.3 マッピング・ファイルの構成
この例のマッピング・ファイルの内容は次のとおりです。
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をマッピング・ルールに含め、マッピング後に値を持つようにする必要があります。存在しない場合、識別名の構成は失敗します。 -
cnとsnの両方の属性は、enameと同じ値である必要があります。 -
uid要素の値は、EMail接頭辞の値(電子メール・アドレス内のアット・マーク(@)文字より前の部分)になります。 -
empnum属性は、ディレクトリ・エントリ内のemployeenumberになります。 -
telephone属性は、ディレクトリ・エントリ内のtelephone numberになります。
12.4.4 ディレクトリ統合プロファイルの構成
この例のディレクトリ統合プロファイルには、表12-1に示す属性値が含まれます。これらの値が入ったサンプル統合プロファイルとそれに対応するマッピング・ファイルおよび構成ファイルが$ORACLE_HOME/ldap/odi/confディレクトリにあります。Oracle Enterprise Manager Fusion Middleware Controlを使用するか、「同期プロファイルの作成」の指示に従ってプロファイルを作成できます。
表12-1 TESTDBIMPORT用のディレクトリ統合プロファイル
| 属性 | 値 |
|---|---|
|
プロファイル名( |
|
|
同期モード( |
|
|
プロファイルのステータス( |
|
|
エージェントの実行コマンド( |
NULL |
|
拡張構成情報( |
LDAP属性で個々に保持されない構成の詳細を保持します。 |
|
接続されたディレクトリ・アカウント( |
|
|
接続されたディレクトリ・アカウントのパスワード( |
|
|
接続されたディレクトリURL( |
ここで、 |
|
インタフェース・タイプ( |
|
|
マッピング・ファイル( |
マッピング・ルールの格納用属性。 |
|
OID一致フィルタ( |
これは、一致を検索中、ディレクトリの検索に データベース行が取得されると、Oracle Directory Integration Platformでは、ドメイン・ルールに従って、 |
|
前回適用された変更番号( |
これは、プロファイルの最初の実行時に、4つすべての行を取得し同期することを意味します。その後は、表内の |
12.4.5 追加構成情報ファイルとマッピング・ファイルのアップロード
manageSyncProfilesコマンドのupdate操作を使用して、追加構成情報ファイルとマッピング・ファイルを更新します。
manageSyncProfilesコマンドを次のように実行します。
manageSyncProfiles update -h HOST -p PORT -D WLS_USER -pf PROFILE_NAME -file FILE_NAME
12.4.6 リレーショナル・データベース表とOracleバックエンド・ディレクトリの同期プロセスの理解
この項では、リレーショナル・データベース表とOracleバックエンド・ディレクトリの同期プロセスについて説明します。
この例では、同期プロセスのステップは、次のとおりです。
-
「スケジューリングの間隔」(
odip.profile.schedinterval)属性に指定された値が期限切れになるたびに、Oracle Directory Integration Platformは、TESTDBIMPORTプロファイル用に新しいプロファイル・スレッドを起動します。 -
プロファイル・スレッドは、追加構成情報を読み取ってSQLを準備し、実行します。
-
データベースから取得された行ごとに、マッピング・ルールがレコードに適用され、LDAP属性が作成されます。
-
「OID一致フィルタ」(
odip.profile.oidfilter)属性によって、Oracleバックエンド・ディレクトリ内に一致するエントリがあるかどうかをOracle Directory Integration Platformが判断します。一致するエントリがある場合は更新されます。ない場合は新しいエントリが作成されます。ディレクトリ操作の後、「前回適用された変更番号」(odip.profile.lastchgnum)属性が更新されます。
ノート:
「OID一致フィルタ」(odip.profile.oidfilter)属性は、Oracle Unified Directory、Oracle Directory Server Enterprise EditionおよびOracle Internet Directoryをサポートします。
12.4.7 リレーショナル・データベース表とバックエンド・ディレクトリの同期化の例に関する注意事項
このトピックでは、データベースから取得された後の行の形式について説明します。
EmpNum: 98357 EName: JOHN DOE UID: JOHN.DOE EMAIL: JOHN.DOE@EXAMPLE.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@EXAMPLE.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)