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

前
 
次
 

9 Oracle Databaseの表との同期

Oracle Enterprise Managerユーザー・インタフェースまたはWLSTコマンドライン・ユーティリティを使用して、Oracle Databaseインポートおよびエクスポート・プロファイルを構成できます。

この章では、Oracle Database表に格納されているデータをOracleバックエンド・ディレクトリと同期するためにコマンドラインから変更できる、DBReader構成ファイルについて説明します。同期は、増分(たとえば、データベース表の行単位)またはすべてのデータベース表を一括で実行できます。

この章では、Oracleバックエンド・ディレクトリをOracle Databaseと同期するエクスポート・プロファイルを作成する場合に、コマンドラインから変更できるdbexport構成ファイルについても説明します。


注意:

データベースからOracleバックエンド・ディレクトリへの複数値属性の同期はサポートされません。

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


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


注意:

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

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

Oracle DatabaseのデータをOracleバックエンド・ディレクトリと同期するインポート・プロファイルを作成するには、$ORACLE_HOME/ldap/odi/confディレクトリにあるサンプル・ファイルDBReader.cfg.masterを開き、仕様に合わせて編集します。

Oracleバックエンド・ディレクトリのデータをOracle Databaseと同期するエクスポート・プロファイルを作成するには、$ORACLE_HOME/ldap/odi/confディレクトリにあるサンプル・ファイルdbexport.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構成ファイルについて

Oracle DatabaseからOracleバックエンド・ディレクトリへの同期の間、データベースからのデータの取得はDBReader.cfg.masterファイルによって管理されます。Oracle Directory Integration Platformに次の情報が提供されます。

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バックエンド・ディレクトリにコピーするには、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は、プロファイルを再実行する場合、常に、すでに格納された値を使用します。

dbexport.cfg.master構成ファイルについて

dbexport.cfg.masterファイルでは、Oracle Databaseの構造が記述されます。Oracle Directory Integration Platformに次の情報が提供されます。

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で、エラーの原因である変更がすべてスキップされます。すべての障害が、$ORACLE_HOME/ldap/odi/log/profilename.aud監査ログ・ファイルに記録されます。SkipErrorToSyncNextChangeパラメータにtrueの値を割り当てる場合は、必ず定期的に監査ログで障害を確認してください。

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

DBReader.map.master構成ファイル

マッピング・ルールの構成の詳細は、「マッピング・ルールとその形式」の手順に従ってください。

dbexport.map.master構成ファイル

「マッピング・ルールとその形式」の説明を確認してください。次に、$ORACLE_HOME/ldap/odi/confディレクトリにあるサンプル・ファイルdbexport.map.masterを開き、仕様に合わせて編集します。

dbexport.map.master構成ファイルのマッピング・ルールの形式では、宛先オブジェクト・クラスおよび宛先属性のかわりに、宛先表の名前および宛先列の名前を指定します。

たとえば、サンプル・マップ・ルールは次のようになります。

uid:1::inetorgperson:id::table2:

この例では、uidがソース属性、inetorgpersonがソース・オブジェクト・クラスです。次に、idが宛先列、table2が宛先表の名前です。マップ・ファイルには、主キーとして指定されているすべての列を含める必要があり、それが必須の属性であることを指定する必要もあります。このマッピング・ルールの例では、uidソース属性の後にある:1によって、uidが必須の属性であることが示されています。

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

ディレクトリ統合プロファイルは、Oracle Enterprise Manager Fusion Middleware Controlユーザー・インタフェースを使用して作成できます。手順は、第7.1項「Fusion Middleware Controlを使用した同期プロファイルの管理」を参照してください。

Oracle Enterprise Manager Fusion Middleware Controlを使用する際には、manageSyncProfilesコマンドのupdate操作を使用して、追加構成情報ファイルとマッピング・ファイルをアップロードする必要があります。manageSyncProfilesコマンドの使用の詳細は、第7.2項「manageSyncProfilesを使用した同期プロファイルの管理」を参照してください。

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

9.4 例: リレーショナル・データベース表とバックエンド・ディレクトリの同期化

この項では、リレーショナル・データベース表とOracleバックエンド・ディレクトリを同期化する方法について説明します。


注意:

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

この項の内容は次のとおりです。

この例では、従業員データを含む次のリレーショナル・データベース表がOracleバックエンド・ディレクトリと同期化されます。

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バックエンド・ディレクトリ内に一致するエントリがあるかどうかをOracle Directory Integration Platformが判断します。一致するエントリがある場合は更新されます。ない場合は新しいエントリが作成されます。ディレクトリ操作の後、「前回適用された変更番号」(odip.profile.lastchgnum)属性が更新されます。


注意:

「OID一致フィルタ」(odip.profile.oidfilter)属性は、Oracle Unified Directory、Oracle Directory Server Enterprise EditionおよびOracle Internet Directoryをサポートします。

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)