A Oracle Data Integrator Driver for LDAPの参照情報
この付録の内容は次のとおりです。
A.1 Oracle Data Integrator Driver for LDAPの概要
Oracle Data Integrator Driver for LDAP (LDAPドライバ), とともにOracle Data Integrator使用すると、複雑なLDAPツリーを標準のSQL問合せで操作できます。
LDAPドライバでは次がサポートされます。
-
LDAPエントリ、そのオブジェクト・クラスおよび属性の操作
-
標準のSQL (Structured Query Language)構文
-
相関サブ問合せ、内部および外部結合
-
ORDER BYおよびGROUP BY
-
COUNT、SUM、MIN、MAX、AVGおよびその他のファンクション
-
すべての標準SQLファンクション
-
参照整合性(外部キー)
-
ディレクトリへの持続的変更
A.2 LDAPの処理の概要
LDAPドライバは次のように機能します。
-
ドライバは、LDAPからリレーショナルへのマッピングを使用して、(接続時に)LDAP構造およびデータをリレーショナル・スキーマにロードします。
-
ユーザーは、通常のSQL文を介してデータを操作して、リレーショナル・スキーマを使用します。リレーショナル・スキーマ・データで実行されたすべての変更(挿入/更新)は、ドライバによって、ただちにLDAPデータに反映されます。
A.2.1 LDAPからリレーショナルへのマッピング
LDAPからリレーショナルへのマッピングは、複雑ですが自動化されたプロセスで、リレーショナル構造の生成に使用されます。LDAPサーバーでは標準の方法でメタデータ情報が提供されないため、LDAPツリーからデータのイントロスペクションを使用して、このマッピングが実行されます。したがって、自動マッピングは、このプロセスのソースとして使用されるLDAPツリーのコンテンツで実行されます。
この項では、次の項目について説明します。
A.2.1.1 一般原理
LDAPドライバでは、次の方法で、LDAP要素がリレーショナル・スキーマにマップされます。
-
各LDAPクラスまたはクラスの組合せは、1つの表にマップされます。LDAPツリーの各エントリは、表内の1つのレコードにマップされます。
-
クラス・インスタンスの各属性は、1つの列にマップされます。
-
エントリ間の階層関係は、外部キーを使用してマップされます。階層レベルを表す表は、
<tablename>PK
と呼ばれる主キーを使用して作成されます。レコードは、<parent_level_tablename>FK column
を介してその親表を参照します。LDAPツリー構造のルートは、一意のレコードのROOTPK
列を含む、ROOT
と呼ばれる表にマップされます。 -
1つのエントリに対して複数の値が設定されている属性(たとえば、複数のemail属性が設定されているPersonエントリ)は、
<parent_tablename><attribute_name>
と呼ばれるサブ表としてマップされます。各サブ表には、親表とリンクするための<parent_tablename>FK column
が含まれます。
図A-1は、PersonインスタンスとリンクされているOrganizationalUnitエントリを含むLDAPツリーを示しています。ここでは、特定のPersonエントリに複数の電子メール・アドレスが設定されています。
このLDAPツリーは、次のリレーショナル構造にマップされます。
-
ROOT
表は階層のルートを表し、1つのROOTPK
列が含まれます。 -
ORGANIZATIONALUNIT
表は、ツリーの様々なorganizationalUnitインスタンスを表します。ここには、ORGANIZATIONALUNITPK
主キー列およびorganizationalUnitインスタンスの属性(cn、telephoneNumberなど)が含まれます。ROOTFK
外部キー列によってROOT
表にリンクされます。 -
PERSON
表は、personクラスのインスタンスを表します。ここには、PERSONPK
主キー列、ORGANIZATIONALUNIT
表にリンクするためのORGANIZATIONALUNITFK
およびPERSON
インスタンスの属性(telephoneNumber、description、cn)が含まれます。 -
email属性は
PERSON_EMAIL
表として表示され、EMAIL
列、およびemail属性のリストをPERSON
レコードにリンクするPERSONFK
が含まれます。
図A-2は、生成されるリレーショナル構造を示しています。
A.2.1.2 グループ化係数
LDAPディレクトリでは、複数のクラス定義から属性を継承することでクラス・エントリが指定されることがよくあります。リレーショナル・マッピングの手順では、この状態を変換するために、LDAPドライバによってLDAPエントリ内のクラスの組合せがそれぞれ結合され、新しい表が生成されます。
たとえば、Personクラスの一部のエントリは、ManagerまたはBoardMemberクラスのどちらか(もしくは両方)のインスタンスでもある可能性があります。この場合、マッピング手順でPERSON
表(Personのインスタンス用)が作成されますが、さらに、LDAPツリーに存在するクラスの組合せに応じてMANAGER_PERSON
、BOARDMEMBER_PERSON
、BOARDMEMBER_MANAGER_PERSON
などの表が生成されます。
生成される表を不必要に増加させないために、この動作をパラメータ化できます。これを行うには、グループ化係数パラメータを使用して、同じ表にインスタンスがグループ化された状態で残る分岐クラスの数を定義します。生成される表には、IS_<classname>という名前のフラグ列が含まれ、この列の値によって、インスタンスの所属先となるクラスのサブセットが決まります。たとえば、 IS_<classname>
が1
に設定された場合、レコードが表すインスタンスは<classname>
に属します。
クラスの組合せごとに1つの表が作成される動作は、グループ化係数が0の場合に相当します。グループ化係数が1の場合、分岐クラスが1つのみのインスタンスが同じ表に残ります。
この例では、グループ化係数が2以上の場合、社内のすべてのPersonインスタンス(Person、ManagerおよびBoardMemberクラス・インスタンスを含む)がPERSON
表にグループ化されます。IS_MANAGER
およびIS_BOARDMEMBER
列によって、ManagerクラスまたはBoardMemberクラス(もしくは両方)にも含まれるPERSONレコードが決定します。
A.2.1.3 マッピング例外
この項では、マッピング処理の特定の状況について説明します。
-
表名の長さ制限および競合: 状況によっては、名前の長さ制限によってオブジェクト名の競合が発生する可能性があります。このような状況を回避するために、LDAPドライバでは、オブジェクト名の3桁の接尾辞が自動生成されます。
-
キー列: 現在のレコード(元のLDAPクラス・インスタンス)の識別子として使用できる相対識別名(RDN)を含む追加の
SNPSLDAPKEY
列を、ドライバで自動的に作成できます。これを行うには、key_column
URLプロパティをtrueに設定します。LDAPツリーのコンテンツを更新するDMLコマンドを実行する場合は、このSNPSLDAPKEY
列をロードする必要があります。この列は、LDAPインスタンスに基づく表のみに作成されます。複数値のインスタンス属性に対応する表には、これらの列は作成されません。 -
大/小文字の区別: これは、RDBMSおよびLDAPサーバーに対して大/小文字の区別を強制する
case_sens
URLプロパティで設定します。 -
特殊文字: LDAPでは、属性またはクラス名に英数字以外の文字が含まれる可能性があります。これらの文字は、マップ時にアンダースコア(
_
)に変換されます。例外: 最初の文字が英数字以外の場合、その文字はx
に変換されます。 -
予約済SQLキーワード: リレーショナル構造で、表名または列名とSQLキーワードとの間の名前の競合を回避するために、SQLキーワードと名前が一致する生成済の表および列の名前が自動的に変更されます(名前の後にアンダースコアが追加されます)。たとえば、
SELECT
という名前のクラスはSELECT_
という名前の表にマップされます。
A.2.1.4 参照LDAPツリー
LDAPサーバーでは標準の方法でメタデータ情報が提供されないため、LDAPツリーからデータのイントロスペクションを使用して、LDAPからリレーショナルへのマッピング・プロセスがデフォルトで実行されます。
LDAPドライバでは、LDAPからリレーショナルへのマッピング・プロセスに対して、実際のデータを含むLDAPツリーのかわりに参照LDAPツリーを使用することもできます。
この参照LDAPツリーは、ドライバURLのldap_metadata
プロパティを使用して構成します。このプロパティにより、運用LDAPツリーの階層構造を厳密に反映しながらも付随するデータ量は伴わないLDAPツリーへの接続情報を含む、.properties
ファイルが指定されます。
この手法には次の利点があります。
-
ディレクトリ管理者は、参照LDAPツリーを運用LDAPツリーの不変の定義として使用できます。
-
参照LDAPツリーには実際のLDAPツリーのスケルトンを構成する少数のインスタンスが含まれ、この小さい参照ツリーでは、LDAPからリレーショナルへのマッピング・プロセスがより速く実行されます。これは大規模な運用LDAPディレクトリにとって特に重要であり、手順を実行するための処理時間とリソースが削減されます。
一方、参照LDAPツリーの正確な構造を設計する上で、この手法の使用には次の制約があります。
-
オプションのLDAPインスタンス属性を、参照エントリ内ですべてインスタンス化する必要があります。これらの属性が運用LDAPディレクトリ・エントリにない場合でも、後で使用するためには、参照LDAPツリー内で宣言する必要があります。
-
運用LDAPディレクトリに存在するすべての複数値属性は、参照LDAPツリーでも同様にインスタンス化する必要があります。たとえば、運用LDAPディレクトリのいずれかのPersonインスタンスに2つのtelephoneNumber属性がある場合は、参照LDAPツリーでも、この汎用Personクラスで少なくとも2つのtelephoneNumber属性をインスタンス化する必要があります。
ノート:
複数の属性フィールドをマップするための追加の表および列が強制的に作成されるため、生成されるリレーショナル構造は、これらの問題による直接的な影響を受けます。そのため、参照LDAPツリーの設計時には、これらの問題を考慮する必要があります。
A.2.2 リレーショナル・スキーマの管理
この項では、次の項目について説明します。
A.2.2.1 リレーショナル・スキーマの格納
LDAPからリレーショナルへのマッピングによって生成されたリレーショナル構造は、仮想マッピングで管理されるか、外部データベースに格納されます。
仮想マッピングでは、ランタイム・エージェントのメモリーにリレーショナル構造が格納されるため、その他のコンポーネントは不要です。リレーショナル構造は、ドライバによってLDAPツリー構造に透過的にマップされます。LDAPドライバに使用できるSQLコマンドおよびファンクションのリストは、「SQL構文」を参照してください。
ノート:
大規模なLDAPツリー構造に対する仮想マッピングでは、大量のメモリーが必要になります。
外部データベースには、任意のリレーショナル・データベース管理システムを使用できます。ドライバは、JDBCを介してこのエンジンに接続し、リレーショナル・スキーマの格納に使用します。この方法には次の利点があります。
-
選択した外部データベース・エンジンの処理および格納能力の利用。
-
外部データベース・エンジンの特定のSQL文、プロシージャおよびファンクションへのアクセス。
-
リレーショナル構造の柔軟な持続性。このスキーマ・コンテンツは、LDAPドライバへの接続のクローズ後も持続可能です。
外部記憶域の設定方法の詳細は、「外部データベースを使用したデータの格納」を参照してください。
A.2.2.2 リレーショナル構造内のデータへのアクセス
リレーショナル内の表でのDML操作は、標準のSQL文で実行されます。
リレーショナル・データへの変更は、選択した記憶域に応じて、次のようにディレクトリに伝播されます。
-
仮想マッピングを使用する場合は、挿入、更新および削除のすべての要求が自動的に元のLDAPサーバーに自動コミット・モードで伝播されます。明示的なCOMMITまたはROLLBACK文は、Oracle Data Integrator driver for LDAPにはまったく影響しません。
-
外部データベースを使用してリレーショナル構造を格納する場合は、あらゆるタイプのDML文をドライバで使用できます。ただし、変更は元のLDAPサーバーに伝播されないため、注意が必要です。
A.3 インストールおよび構成
Oracle Data Integrator driver for LDAPは、Oracle Data Integratorのインストール時に自動的にインストールされます。次の各項では、拡張構成の説明および参照情報を示します。
この項では、次の項目について説明します。
ノート:
JNDIを使用して、LDAPディレクトリへの接続に必要なライブラリおよびドライバをOracle Data Integratorのクラスパスに追加する必要があります。
ノート:
外部データベース・エンジンを使用する場合は、さらに、外部データベースへの接続に使用するJDBCドライバおよび.properties
ファイルをクラスパスに含めておく必要があります。
A.3.1 ドライバの構成
ノート:
ODI LDAPドライバのLDAPサーバーに対するサポートには制限があります。LDAPサーバーの任意のインスタンスで、ドライバのすべての機能を使用できます。ODIはJava JNDI APIを使用してLDAPサーバーと通信します。LDAP仕様に完全に準拠しているLDAPサーバーであれば、ドライバのすべての機能は動作します。そうでない場合、一部の機能が動作しないことがあります。この項ではドライバの構成について説明します。
-
ドライバ名:
com.sunopsis.ldap.jdbc.driver.SnpsLdapDriver
-
ドライバでサポートされる2つのURL書式:
-
jdbc:snps:ldap?<property=value>[&...]
-
jdbc:snps:ldap2?<property=value>[&...]
最初のURLでは、LDAPディレクトリのパスワードをエンコードする必要があります。2番目のURLでは、LDAPディレクトリのパスワードをエンコードせずに指定できます。
ノート:
最初のURLを使用して、LDAPディレクトリのパスワードを保護することをお薦めします。
LDAPドライバでは、確立された接続に応じて様々なプロパティを使用します。図A-3に、使用されるプロパティとその状況を示します。
LDAPドライバはLDAPディレクトリに接続します。この接続は、先頭が
ldap_
のプロパティを使用して構成できます。たとえば、ldap_basedn
LDAPディレクトリにドライバURLでプロパティを渡すかわりに、LDAPディレクトリへの接続を構成するためのプロパティ・ファイルを使用できます。このプロパティ・ファイルは、ドライバURLのldap_props
プロパティで指定する必要があります。付随するデータ量を伴わないLDAPツリーの階層構造を使用する場合は、参照LDAPツリーを使用できます。参照LDAPツリーへの接続は、先頭が
lm_
のプロパティを使用して構成します。たとえば、lm_basedn
ドライバURLでlm_
プロパティを渡すかわりに、プロパティ・ファイルを使用できます。このプロパティ・ファイルは、ドライバURLのldap_metadata
プロパティで指定する必要があります。詳細は、参照LDAPツリーを参照してください。LDAPドライバの外部データベースへの接続を構成するには、先頭が
db_
のプロパティを使用します。たとえば、db_url
外部データベースにドライバURLでプロパティを渡すかわりに、外部データベースへの接続を構成するためのプロパティ・ファイルを使用できます。このプロパティ・ファイルは、ドライバURLのdb_props
プロパティで指定する必要があります。詳細は、「外部データベースを使用したデータの格納」を参照してください。 -
表A-1に、ドライバURLで渡すことができるプロパティを示します。
表A-1 URLプロパティ
プロパティ | 必須 | タイプ | デフォルト | 説明 |
---|---|---|---|---|
db_propsまたはdp |
いいえ |
文字列(ファイルの場所) |
空の文字列 |
外部データベースの接続構成を含む ノート: このプロパティには、.propertiesファイルの名前をファイル拡張子なしで含める必要があります。 ノート: この ノート: この表にリストされているすべての |
ldap_propsまたはlp |
いいえ |
文字列(ファイルの場所) |
該当なし |
ディレクトリの接続構成を含む ノート: このプロパティには、.propertiesファイルの名前をファイル拡張子なしで含める必要があります。 ノート: この ノート: この表にリストされているすべての |
ldap_metadataまたはlm |
いいえ |
文字列(ファイルの場所) |
該当なし |
参照LDAPツリーのディレクトリの接続構成を含む ノート: このプロパティには、.propertiesファイルの名前をファイル拡張子なしで含める必要があります。 ノート: この ノート: この表に後出するすべての |
case_sensまたはcs |
いいえ |
ブール値(true|false) |
false |
LDAPおよびRDBMSの両方の管理オブジェクトについて、大/小文字を区別するモードを有効または無効にします。 |
alias_bundleまたはab |
いいえ |
文字列(ファイルの場所) |
空の文字列 |
プロパティ・ファイルへの絶対パスとファイル拡張子の両方を含むプロパティ・ファイルのフルネーム。プロパティ・ファイルは、LDAPからリレーショナルへのマッピングの別名のリストが含まれているファイルです。このファイルが存在しない場合は、ドライバによって作成されます。詳細は、「表の別名の構成」を参照してください。 ノート: ファイル拡張子は |
alias_bundle_encodingまたはabe |
いいえ |
文字列(エンコーディング・コード) |
デフォルトのエンコーディング |
別名バンドル・ファイル・エンコーディング。このエンコーディングは、alias_bundleファイルの読取りおよび上書き時に使用されます。定義されていない場合は、デフォルトのエンコーディングが使用されます。 サポートされているエンコーディングのリストは、次のURLにあります。https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html。 |
grouping_factorまたはgf |
いいえ |
整数 |
2 |
単一のリレーショナル表マッピングを設定するためにグループ化されるオブジェクト・クラスの数を決定します。詳細は、「グループ化係数」を参照してください。 |
key_columnまたはkc |
いいえ |
ブール値(true|false) |
false |
trueに設定すると、 |
numeric_idsまたはni |
いいえ |
ブール値(true|false) |
true |
trueに設定すると、すべての内部の主キーおよび外部キーがNUMERIC型になります。それ以外の場合はVARCHAR型になります。 |
id_lengthまたはil |
いいえ |
整数 |
10 / 30 |
内部の主キーおよび外部キーの列の長さ。デフォルトは、列型がNUMERICの場合は10、VARCHARの場合は30です。 |
table_prefixまたはtp |
いいえ |
文字列 |
該当なし |
現在の接続のリレーショナル表に追加される接頭辞。 |
ldap_auth |
いいえ |
文字列 |
simple |
LDAPディレクトリの認証方式。「LDAPディレクトリの接続構成」の |
ldap_url |
はい |
文字列 |
該当なし |
LDAPディレクトリのURL。「LDAPディレクトリの接続構成」の |
ldap_user |
いいえ |
文字列 |
空の文字列 |
LDAPディレクトリのユーザー名。「LDAPディレクトリの接続構成」の |
ldap_password |
いいえ |
文字列 |
空の文字列 |
LDAPディレクトリ・ユーザーのパスワード。「LDAPディレクトリの接続構成」の |
ldap_basedn |
いいえ |
文字列 |
該当なし |
LDAPディレクトリのベースDN。「LDAPディレクトリの接続構成」の |
lm_auth |
いいえ |
文字列 |
simple |
参照LDAPの認証方式。「LDAPディレクトリの接続構成」の |
lm_url |
はい |
文字列 |
該当なし |
参照LDAP URL。「LDAPディレクトリの接続構成」の |
lm_user |
いいえ |
文字列 |
空の文字列 |
参照LDAPディレクトリのユーザー名。「LDAPディレクトリの接続構成」の |
lm_password |
いいえ |
文字列 |
空の文字列 |
参照LDAPディレクトリ・ユーザーのパスワード。「LDAPディレクトリの接続構成」の |
lm_basedn |
いいえ |
文字列 |
該当なし |
参照LDAPディレクトリのベースDN。「LDAPディレクトリの接続構成」の |
db_driver |
はい |
文字列 |
該当なし |
外部データベースのJDBCドライバ。「外部データベースを使用したデータの格納」の |
db_url |
はい |
文字列 |
該当なし |
外部データベースのJDBC URL。「外部データベースを使用したデータの格納」の |
db_user |
いいえ |
文字列 |
空の文字列 |
外部データベース・ユーザー。「外部データベースを使用したデータの格納」の |
db_password |
いいえ |
文字列 |
空の文字列 |
外部データベースのパスワード。「外部データベースを使用したデータの格納」の |
db_schema |
いいえ |
文字列 |
空の文字列 |
外部データベースのスキーマ。「外部データベースを使用したデータの格納」の |
db_catalog |
いいえ |
文字列 |
空の文字列 |
外部データベース・カタログ。「外部データベースを使用したデータの格納」の |
db_drop_on_disconnectまたはdb_dod |
いいえ |
ブール値(true|false) |
true |
切断時に外部データベースから表をドロップします。「外部データベースを使用したデータの格納」の |
db_load_modeまたはdb_lm |
いいえ |
文字列 |
ci |
外部データベースのロード方法。「外部データベースを使用したデータの格納」の |
page_size |
いいえ |
整数 |
0 |
このページ・サイズ制限を適用してLDAPサーバーからデータを読み取ります。検索結果にページ区切りを強制するLDAPドライバを使用している場合、このプロパティを正の値に設定すると、すべての結果がページ区切りを使用して取得されます。
ノート: page_sizeに設定する値は、LDAPサーバーに設定されている最大ページ・サイズ(結果の最大数)と一致している必要があります。 |
transform_nonasciiまたはtna |
いいえ |
ブール値(true|false) |
true |
非ASCIIを変換します。非ASCII文字を保持するにはfalseに設定します。 |
URLの例
ここにURLの例をリストします。
-
jdbc:snps:ldap?lp=ldap_mir&ldap_basedn=o=tests&gf=10&lf=
ldap_mir
.properties
ファイルで指定されているLDAPディレクトリに接続し、ldapバンドルのbasednプロパティをオーバーライドしてグループ化係数10を使用します。一般情報(重要)が標準の出力に送信されます。 -
jdbc:snps:ldap?lp=ldap_ours&lm=generic&ab=c:/tmp/aliases.txt&gf=10&kc=true
ldap_ours
.properties
ファイルを使用してLDAPディレクトリに接続します。リレーショナル・モデルの作成には、lmプロパティで指定されている汎用ディレクトリ・ツリーを使用します。リレーショナル構造の作成には別名バンドル・ファイルを使用します。最大グループ化係数10を使用します。SNPSLDAPKEYフィールドに対するキー列の作成を有効にして、リレーショナル・モデルでの更新要求を可能にします。 -
jdbc:snps:ldap?lp=ldap_mir&dp=mysql_mir_ldap&ldap_basedn=dc=tests&lm=ldap_mir&lm_basedn=dc=model&ab=d:/temp/mapldap.txt&
ldap_mir
.properties
ファイルを使用してLDAPディレクトリに接続します。ldap basednプロパティをオーバーライドします。同じディレクトリのdc=modelサブツリーを使用してマッピングを実行します。別名バンドルを使用します。lmデータベース・プロパティ(ロード・モード)をオーバーライドします。グループ化係数0を指定して、グループ化しない(グループ化を無効にする)ことを示します。完全なトレース・ロギングをアクティブにします。 -
hydraroidマシンのLDAPディレクトリに接続します。LDAPサーバーの接続情報(URL、ベースDN、ユーザーおよびパスワード)は、URL内でldap_xxxという書式で指定されています。
jdbc:snps:ldap?ldap_url=ldap://hydraroid:389/dc=localhost,dc=localdomain&ldap_password=KPLEKFMJKCLFJMDFDDGPGPDB&ldap_user=cn=orcladmin&ldap_basedn=ou=applications
A.3.2 外部データベースを使用したデータの格納
LDAPからリレーショナルへのマッピングによって生成されたLDAPツリーのリレーショナル構造は、ランタイム・エージェントのメモリーまたは外部データベースに格納されます。
ノート:
外部記憶域がサポートされるテクノロジのリストには、次のOracle Technical Network (OTN)からアクセスできます。
http://www.oracle.com/technology/software/products/ias/files/fusion_certification.html
外部記憶域は、表A-2に示す一連のプロパティで構成されます。
外部記憶域プロパティは、次の複数の方法で渡すことができます。
A.3.2.1 ドライバURLでのプロパティの受渡し
ドライバURLでプロパティを直接設定できます。この方法を使用する場合は、プロパティに接頭辞としてdb_
を付ける必要があります。たとえば、Oracleデータベースに接続する場合は、driver
パラメータでOracle JDBCドライバ名を次のように指定します。
db_driver=oracle.jdbc.OracleDriver
.
A.3.2.2 ODI Studioでのプロパティの設定
プロパティは、トポロジ・ナビゲータのデータ・サーバー・エディタの「プロパティ」タブで指定できます。この方法を使用する場合は、プロパティに接頭辞としてdb_
を付ける必要があります。たとえば、driver
パラメータを設定するとします。
- 「キー」列に
db_driver
と入力します。 - Oracleデータベースに接続している場合は、「値」列に
oracle.jdbc.OracleDriver
と入力します。
A.3.2.3 プロパティ・ファイルでのプロパティの設定
外部データベース・プロパティ・ファイルでプロパティを設定できます。プロパティ・バンドルとも呼ばれるこのプロパティ・ファイルは、.properties
拡張子を持つテキスト・ファイルであり、ここに含まれる一連の行には、それぞれ、<property>=<value>
のペアがあります。この外部データベース・プロパティ・ファイルには、リレーショナル・データベース・スキーマへのJDBC接続のプロパティが含まれています。このプロパティ・ファイルは、JDBC URLのdb_props
プロパティを使用して参照されます。
ノート:
LDAPドライバによって外部プロパティ・バンドル・ファイルがロードされるのは、ランタイム起動時の1回のみであることを理解することが重要です。これらのファイルでエラーが発生した場合は、Oracle Data Integratorを終了して再ロードしてから、再テストすることをお薦めします。
この方法を使用する場合は、次のことに注意してください。
-
プロパティ・ファイルのプロパティには接頭辞は付けず、表A-2に示すように使用します。
-
db_props
プロパティはプロパティ・ファイルの名前に設定し、.properties
拡張子は付けません。たとえば、クラスパスにprod_directory.properties
ファイルがある場合は、このファイルをdb_props=prod_directory
のように参照する必要があります。db_props
プロパティは、外部データベース・プロパティ・ファイルに接続情報が格納されているデータベース・スキーマに、スキーマをロードする必要があることを示します。 -
プロパティ・ファイルはLDAP接続を使用してエージェントによってデプロイする必要があります。プロパティ・ファイルの場所は、使用するエージェントによって異なります。
-
ローカル・エージェント(Studio): 外部DBプロパティ・ファイルを
<user.dir>/odi/oracledi/userlib
フォルダに配置します。 -
スタンドアロン・エージェント: 外部DBプロパティ・ファイルを
oracledi/agent/drivers
フォルダに配置します。 -
JavaEEエージェント: 外部DBプロパティ・ファイルをJARまたはZIPファイルに圧縮し、Java EEエージェントによって生成されたテンプレートに追加する必要があります。詳細は、『Oracle Data Integratorの管理』のJava EEアプリケーション・サーバー(Oracle WebLogic Server)でのエージェントのデプロイに関する項を参照してください。
-
-
プロパティ・バンドル・ファイルを使用する場合は、Oracle Data Integratorのクラスパスにそのプロパティ・バンドルが存在することを確認する必要があります。通常は、このバンドルをdriversディレクトリにインストールする必要があります。
ノート:
LDAPドライバでは、外部データベースへの接続時にJDBC接続が使用されます。この外部データベースにアクセスするためのJDBCドライバも、必ずODIクラスパスに配置してください。
外部データベースのプロパティをURLで設定またはオーバーライドできます。これらのプロパティには、接頭辞として文字列db_
を付ける必要があります。たとえば:
jdbc:snps:ldap?ldap_url=ldap://localhost:389/&ldap_basedn=o=company&db_driver=oracle.jdbc.OracleDriver
&db_url=<external_db_url>
外部記憶域を構成するためのプロパティを、表A-2に示します。
表A-2 外部記憶域構成のプロパティ
プロパティ | 必須 | タイプ | デフォルト | 説明 |
---|---|---|---|---|
driver |
はい |
文字列 |
該当なし |
JDBCドライバ名 |
url |
はい |
文字列 |
該当なし |
JDBC URL |
user |
いいえ |
文字列 |
空の文字列 |
データベースへの接続に使用するログイン。 |
password |
いいえ |
文字列 |
空の文字列 |
暗号化されたデータベース・ユーザー・パスワード。 ノート: パスワードを暗号化するには、 |
schema |
いいえ |
文字列 |
空の文字列 |
LDAPツリーを格納するデータベース・スキーマ。Microsoft SQLServerにはこのプロパティを使用せず、かわりにカタログ・プロパティを使用してください。 |
catalog |
いいえ |
文字列 |
空の文字列 |
LDAPツリーを格納するデータベース・カタログ。Microsoft SQL Server専用です。このプロパティをschemaプロパティと同時に使用しないでください。 |
drop_on_disconnectまたはdod |
いいえ |
ブール値(true|false) |
true |
trueの場合は、切断時に外部データベースから表がドロップされます。falseに設定すると、表がデータベース内に保持されます。 |
load_modeまたはlm |
いいえ |
文字列 |
ci |
ロード方法。次の値を使用できます。
|
unicode |
いいえ |
ブール値(true|false) |
MS SQL Serverの場合: unicode = trueの場合はNVARCHARが使用されます。 unicode = falseまたは未設定の場合は、VARCHARが使用されます。 |
|
varchar_lengthまたはvl |
いいえ |
整数 |
255 |
文字列データの格納に使用されるリレーショナル構造のすべての列のサイズ。 |
次に、外部のOracleデータベースに接続するための外部データベース.properties
ファイルの例を示します。
driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@hydraro:1521:SNPTST1 user=LDAP_T_1 password=ENCODED_PASSWORD schema=LDAP_T_1
A.3.3 LDAPディレクトリの接続構成
Oracle Data Integrator driver for LDAPは、表A-3に示すプロパティを使用して、LDAPデータまたは参照LDAPツリーを含むディレクトリ・サーバーに接続します。これらのプロパティは、プロパティ・バンドル・ファイルまたはドライバURLで指定できます。
ディレクトリ接続を構成するためのプロパティの詳細を、表A-3に示します。
表A-3 ディレクトリ接続のプロパティ
プロパティ | 必須 | タイプ | デフォルト | 説明 |
---|---|---|---|---|
auth |
いいえ |
文字列 |
simple |
認証方式 |
url |
はい |
文字列 |
該当なし |
ディレクトリに接続するためのURL。LDAP URL。 ノート: このドライバでは、LDAPS (LDAP over SSL)プロトコルがサポートされます。LDAPS URLは、ldaps://で始める必要があります。LDAPSを使用してサーバーに接続するには、javaマシンに証明書を手動でインストールする必要があります。詳細は、JVMで提供されるkeytoolプログラムを参照してください。 |
user |
いいえ |
文字列 |
空の文字列 |
LDAPサーバーのユーザー・ログイン名。authが設定されている場合のみ必須です。 ノート: JDBC Driver for LDAPとの接続を作成するためにuserおよびpasswordプロパティを指定した場合は、LDAPディレクトリの接続にこれらのプロパティが使用されます。 |
password |
いいえ |
文字列 |
空の文字列 |
LDAPサーバーのユーザー・ログイン・パスワード。authが設定されている場合のみ必須です。 ノート: URL構文のjdbc:snps:ldap2以外では、パスワードを暗号化する必要があります。 ノート: パスワードを暗号化するには、 |
basedn |
いいえ |
文字列 |
該当なし |
LDAPツリーへの接続に使用するベースDN。ベースDNは、LDAPディレクトリ・ツリーの最上位レベルです。指定されていない場合は、LDAP URLで指定されたベースDNが使用されます。 |
LDAPプロパティ・ファイルの内容の例を次に示します。
url=ldap://ours:389 user=cn=Directory Manager password=ENCODED_PASSWORD basedn=dc=oracle,dc=com
A.3.4 表の別名の構成
LDAPドライバでは、表の別名を使用することで、Oracle Data Integratorでのモデル表名の定義をある程度柔軟に行えます。これは特に、LDAPツリーのナビゲートに使用されるアルゴリズムによって、LDAPオブジェクト・クラス階層に基づく長い複合名が生成される場合に役立ちます。RDBMS固有のオブジェクト名の長さの制約に関連する問題を回避するために、LDAPドライバでは別名を設定して使用できます。
ノート:
「物理アーキテクチャ」アコーディオンにあるテクノロジ・エディタの「その他」タブで、「最大表名長」および「最大列名長」のデフォルト値を変更することもできます。
表の別名のファイルを作成するには:
例A-1 別名ファイル
INETORGPERSON_ORGANIZATIONALPERSON_PERSON_BISOBJECT_MAIL = PERSONMAIL ORGANIZATIONALUNIT_RFC822MAILMEMBER = ORG_228MAIL INETORGPERSON_ORGANIZATIONALPERSON_PERSON = ORG_PERSON ORGANIZATIONALUNIT_MEMBER = ORG_UN_MEMBER ORGANIZATIONALUNIT = ORG_UNIT ROOT = ROOT ....
ノート:
LDAPディレクトリのオブジェクト・クラス構造または属性セットになんらかの変更が適用されている場合は、ドライバによってこのファイルが再書込みされ、表名リストには新規または変更されたエントリが含まれます。
A.4 SQL構文
「SQL文」に示すSQL文は、Oracle Data Integrator driver for LDAPを使用する場合に使用できます。これらの文を使用すると、標準のSQL文を介してリレーショナル・データ構造およびデータを管理できます。
ノート:
-
外部データベースを使用する場合は、後出のコマンドのかわりに専用の問合せエンジン構文を使用できます。
-
LDAPドライバは、自動コミット・モードで独自に動作します。COMMITまたはROLLBACKコマンドによる明示的なトランザクション管理は許可されません。
-
外部データベースを使用してLDAPツリーのデータを格納する場合、DDL文は一時表のみで実行できます。
表A-4は、リストされているDML操作を特定のキー・フィールドで実行する場合に適用される推奨事項をまとめたものです。
表A-4 キー・フィールドでのDML操作
列のタイプ | 挿入 | 更新 | 削除 |
---|---|---|---|
外部キー |
マスター表の参照制約および順序付きの表の移入操作に注意します。 |
不可 |
マスター表の参照制約および順序付きの削除要求に注意します。 |
主キー |
スレーブ表の参照制約および順序付きの表の移入操作に注意します。 |
不可 |
スレーブ表の参照制約および順序付きの削除要求に注意します。 |
IS_xxx |
元のオブジェクト・クラスに正しいフラグ値を関連付けるように注意します。 |
不可 |
OK |
Key_Column |
正しいLDAP構文でRDN値を設定するように注意します。 |
不可 |
OK |
A.4.1 SQL文
任意の数のコマンドを組み合せることができます。セミコロン(;)を使用して各コマンドを区切ることができますが、使用しなくても構いません。
A.4.1.1 DISCONNECT
DISCONNECT
この接続を終了します。
備考
-
JDBCインタフェースを使用している場合は、このコマンドをコールする必要はありません。接続が閉じる際に自動的にコールされます。
-
切断後は、この接続で他の問合せを実行することはできません。
A.4.1.2 INSERT INTO
1つ以上の新しいデータ行を表に挿入します。
INSERT INTO <table_name> [ ( <column_name> [,...] ) ]
{ VALUES (<expression> [,...]) | <SELECT Statement> }
A.4.1.3 SELECT
スキーマ内の1つ以上の表から情報を取得します。
SELECT [DISTINCT] { <select_expression> | <table_name>.* | * } [, ... ] [ INTO <new_table> ] FROM <table_list> [ WHERE <expression> ] [ GROUP BY <expression> [, ...] ] [ ORDER BY <order_expression> [, ...] ] [ { UNION [ALL] | {MINUS|EXCEPT} | INTERSECT } <select_statement> ]
<table_list> ::=
<table_name> [ { INNER | LEFT [OUTER] } JOIN <table_name> ON <expression> ]
[, ...]
<select_expression> ::=
{ <expression> | COUNT(*) | {COUNT | MIN | MAX | SUM | AVG}
(<expression>) <column_alias>}
<order_expression> ::=
{ <column_number> | <column_alias> | <select_expression> } [ ASC | DESC ]
A.4.1.4 UPDATE
データベース内の表のデータを変更します。
UPDATE table SET column = <expression> [, ...] [WHERE <expression>]
A.4.1.5 式、条件および値
<expression> ::=
[NOT] <condition> [ { OR | AND } <condition>
]
<condition> ::= { <value> [ || <value> ] | <value> { = | < | <= | > | >= | <> | != | IS [NOT] } <value> | EXISTS(<select_statement>) | <value> BETWEEN <value> AND <value> | <value> [NOT] IN ( {<value> [, ...] | selectStatement } ) | <value> [NOT] LIKE <value> [ESCAPE] value }
<value> ::= [ + | - ] { term [ { + | - | * | / } term ] | ( condition ) | function ( [parameter] [,...] ) | selectStatement giving one value
<term> ::=
{ 'string' | number | floatingpoint | [table.]column | TRUE | FALSE | NULL }
<string> ::=
-
開始および終了には、単一の「'」を使用します。「'」で開始した文字列内に「'」を作成するには、「''」を使用します。
-
LIKEでは、任意の数(0を含む)の文字と一致させる場合は%を使用し、1つの文字と完全に一致させる場合は_を使用します。%自体の検索には\%、_自体の検索には\_を使用するか、ESCAPE句を使用してその他の任意のエスケープ文字を設定できます。
<name> ::=
-
名前の先頭は文字で、後に任意の数の文字または数字が続きます。文字列および引用符で囲まれた識別子以外の小文字は、大文字に変換されます。名前では大/小文字は区別されません。
-
識別子(表または列など)を引用符で囲んで、名前として使用できます。引用符で囲まれた識別子は、「"」で始まり「"」で終わります。引用符で囲まれた識別子の中に「"」を作成するには、「""」を使用します。引用符で囲まれた識別子を使用することで、大/小文字が混在する表および表名を作成できます。例: CREATE TABLE "Address" ("Nr" INTEGER,"Name" VARCHAR); SELECT * FROM "Address"。引用符で囲まれた識別子は文字列ではありません。
<values> ::=
-
日付値は「'」で始まり「'」で終わります。書式はyyyy-mm-ddです(java.sql.Dateを参照)。
-
時間値は「'」で始まり「'」で終わります。書式はhh:mm:ssです(java.sql.Timeを参照)。
-
バイナリ・データは「'」で始まり「'」で終わります。書式は16進値です。たとえば'0004ff'は、最初が0、2番目が4、最後が255 (0xff)の3バイトです。
A.4.2 SQLファンクション
表A-5に数値ファンクションを示します。
表A-5 数値ファンクション
ファンクション | 説明 |
---|---|
ABS(d) |
double値の絶対値を戻します。 |
ACOS(d) |
角度のアーク・コサインを戻します。 |
ASIN(d) |
角度のアーク・サインを戻します。 |
ATAN(d) |
角度のアーク・タンジェントを戻します。 |
ATAN2(a,b) |
a/bのタンジェントを戻します。 |
BITAND(a,b) |
a & bを戻します |
BITOR(a,b) |
a | bを戻します |
CEILING(d) |
d以上の最小整数を戻します。 |
COS(d) |
角度のコサインを戻します。 |
COT(d) |
角度のコタンジェントを戻します。 |
DEGREES(d) |
ラジアンを角度に変換します。 |
EXP(d) |
e (2.718...)のd乗を戻します。 |
FLOOR(d) |
d以下の最大整数を戻します。 |
LOG(d) |
eを底とする自然対数を戻します。 |
LOG10(d) |
10を底とする対数を戻します。 |
MOD(a,b) |
aをbで割った剰余を戻します。 |
PI() |
円周率(3.1415...)を戻します |
POWER(a,b) |
aのb乗を戻します。 |
RADIANS(d) |
角度をラジアンに変換します。 |
RAND() |
0.0以上1.0未満の乱数xを戻します。 |
ROUND(a,b) |
aを小数点以下b桁に丸めます。 |
SIGN(d) |
dが0未満の場合は-1、dが0の場合は0、dが0より大きい場合は1を戻します。 |
SIN(d) |
角度のサインを戻します。 |
SQRT(d) |
平方根を戻します。 |
TAN(d) |
角度の三角関数タンジェントを戻します。 |
TRUNCATE(a,b) |
aを小数点以下b桁に切り捨てます。 |
表A-6に文字列ファンクションを示します。
表A-6 文字列ファンクション
ファンクション | 説明 |
---|---|
ASCII(s) |
sの左端の文字のASCIIコードを戻します。 |
BIT_LENGTH(s) |
文字列の長さをビット数で戻します。 |
CHAR(c) |
ASCIIコードがcの文字を戻します。 |
CHAR_LENGTH(s) |
文字列の長さを文字数で戻します。 |
CONCAT(str1,str2) |
str1とstr2を連結して戻します |
DIFFERENCE(s1,s2) |
s1とs2の発音の差を戻します。 |
HEXTORAW(s1) |
16進数からRAWに変換された文字列を戻します。 |
INSERT(s,start,len,s2) |
startからlen文字分をs2に置き換えて、文字列を戻します。 |
LCASE(s) |
sを小文字に変換します。 |
LEFT(s,count) |
sの左端からcount文字分を戻します。 |
LENGTH(s) |
sの文字数を戻します。 |
LOCATE(search,s,[start]) |
startから開始して、s内でsearchが検出された最初の索引(1=左、0=見つからない)を戻します。 |
LTRIM(s) |
sの先頭の空白をすべて削除します。 |
OCTET_LENGTH(s) |
文字列の長さをバイト数で戻します。 |
RAWTOHEX(s) |
変換された文字列を戻します |
REPEAT(s,count) |
sをcount回分繰り返して戻します。 |
REPLACE(s,replace,s2) |
sに出現するすべてのreplaceをs2に置き換えます。 |
RIGHT(s,count) |
sの右端からcount文字分を戻します。 |
RTRIM(s) |
末尾の空白をすべて削除します。 |
SOUNDEX(s) |
sの発音を表す4文字のコードを戻します。 |
SPACE(count) |
count個分のスペースで構成される文字列を戻します。 |
SUBSTR(s,start[,len]) |
(SUBSTRINGの別名) |
SUBSTRING(s,start[,len]) |
start (1=左)からlen文字分のサブストリングを戻します。 SUBSTRING(s FROM start [FOR len])という構文もあります。 |
TRIM |
TRIM([{LEADING | TRAILING | BOTH}] FROM s): 先頭または末尾(もしくは両方)のスペースをsから削除します。 |
UCASE(s) |
sを大文字に変換します。 |
LOWER(s) |
sを小文字に変換します。 |
UPPER(s) |
sを大文字に変換します。 |
表A-7に、日時ファンクションを示します。
表A-7 日時ファンクション
ファンクション | 説明 |
---|---|
CURDATE() |
現在の日付を戻します。 |
CURTIME() |
現在の時間を戻します。 |
CURRENT_DATE |
現在の日付を戻します。 |
CURRENT_TIME |
現在の時間を戻します。 |
CURRENT_TIMESTAMP |
現在のタイムスタンプを戻します。 |
DATEDIFF(s, d1,d2) |
日時d1から日時d2までの経過時間を、sで指定された単位で戻します。sには次の値を使用できます。'ms'='ミリ秒'、'ss'='秒','mi'='分','hh'='時間'、'dd'='日'、'mm'='月'、'yy' = '年'。 |
DAYNAME(date) |
曜日の名前を戻します。 |
DAYOFMONTH(date) |
月の日付(1から31)を戻します。 |
DAYOFWEEK(date) |
週の曜日(1は日曜日)を戻します。 |
DAYOFYEAR(date) |
その年の何日目か(1から366)を戻します。 |
EXTRACT |
EXTRACT ({YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} FROM <datetime>): <datetime>値から適切な部分を抽出します。 |
HOUR(time) |
時間(0から23)を戻します |
MINUTE(time) |
分(0から59)を戻します |
MONTH(date) |
月(1から12)を戻します |
MONTHNAME(date) |
月の名前を戻します。 |
NOW() |
現在の日時をタイムスタンプとして戻します。 |
QUARTER(date) |
四半期(1から4)を戻します |
SECOND(time) |
秒(0から59)を戻します |
WEEK(date) |
その年の何週目か(1から53)を戻します。 |
YEAR(date) |
年を戻します |
日付値は「'」で始まり「'」で終わります。書式はyyyy-mm-ddです(java.sql.Dateを参照)。時間値は「'」で始まり「'」で終わります。書式はhh:mm:ssです(java.sql.Timeを参照)。
表A-8にシステム・ファンクションを示します。
表A-8 システム・ファンクション
ファンクション | 説明 |
---|---|
IFNULL(exp,value) |
expがNULLの場合はvalueを戻し、NULLでない場合はexpを戻します。 |
CASEWHEN(exp,v2,v2) |
expがtrueの場合はv1を戻し、trueでない場合はv2を戻します。 |
CONVERT(term,type) |
expを別のデータ型に変換します。 |
COALESCENCE(e1,e2,e3,...) |
e1がNULLでない場合はe1を戻し、そうでない場合はe2を評価します。e2がNULLの場合はe2を戻し、そうでない場合はe3を評価し、以降、同様に続きます。 |
NULLIF(v1,v2) |
v1がv2と等しくない場合はv1を戻し、等しい場合はNULLを戻します。 |
CASE WHEN |
CASE WHEN文には次の2つの構文があります。 CASE v1 WHEN v2 THEN v3 [ELSE v4] END: v1がv2と等しい場合はv3を戻し、等しくない場合はv4またはNULL (ELSEが指定されていない場合)を戻します。 CASE WHEN e1 THEN v1[WHEN e2 THEN v2] [ELSE v4] END: e1がtrueの場合はv1を戻します。それ以外にも条件と値が設定されている場合は、これを繰り返します。いずれの条件とも一致しない場合は、v4またはNULL (ELSEが指定されていない場合)を戻します。 |
CAST(term AS type) |
expを別のデータ型に変換します。 |
表A-9に、システムおよび接続ファンクションを示します。
表A-9 システムおよび接続ファンクション
ファンクション | 説明 |
---|---|
DATABASE() |
この接続のデータベース名を戻します。 |
USER() |
この接続のユーザー名を戻します。 |
IDENTITY() |
この接続によって挿入された最後のID値を戻します。 |
A.5 実装されるJDBC API機能
表A-10に、Oracle Data Integrator driver for LDAPのJDBC API機能をリストします。
表A-10 JDBC APIの機能
機能グループ | JDBCのバージョン | サポート |
---|---|---|
バッチ更新 |
2.0コア |
はい |
Blob/Clob |
2.0コア |
いいえ |
JNDIデータソース |
2.0 オプション |
いいえ |
フェイルオーバー・サポート |
- |
いいえ |
トランザクション・セーブポイント |
3.0 |
いいえ |
Unicodeサポート |
- |
いいえ |
分散トランザクション |
2.0 オプション |
いいえ |
接続プーリング |
2.0 オプション |
いいえ |
クラスタ・サポート |
- |
いいえ |
次の表に、Oracle Data Integrator driver for LDAPでサポートされているJDBCクラスを示します。
表A-11 JDBCクラス
JDBCクラス | JDBCのバージョン | サポート |
---|---|---|
Array |
2.0コア |
いいえ |
Blob |
2.0コア |
いいえ |
Clob |
2.0コア |
いいえ |
CallableStatement |
1.0 |
はい |
Connection |
1.0 |
はい |
ConnectionPoolDataSource |
2.0 オプション |
いいえ |
DatabaseMetaData |
1.0 |
はい |
DataSource |
2.0 オプション |
いいえ |
Driver |
1.0 |
はい |
PreparedStatement |
1.0 |
はい |
Ref |
2.0コア |
いいえ |
RowSet |
2.0 オプション |
いいえ |
ResultSet |
1.0 |
はい |
ResultSetMetaData |
1.0 |
はい |
Statement |
1.0 |
はい |
Struct |
2.0コア |
いいえ |
XAConnection |
2.0 オプション |
いいえ |
XADataSource |
2.0 オプション |
いいえ |