WebLogic Type 4 JDBC ドライバ ガイド

     前  次    新しいウィンドウで目次を開く   
ここから内容の開始

Oracle ドライバ (非推奨)

注意 : このドキュメントで説明する WebLogic Type 4 JDBC Oracle ドライバは、WebLogic Server リリース 10.3 で非推奨になりました。WebLogic Server の次のリリースで削除される予定です。この非推奨のドライバの代わりに、WebLogic Server では Oracle Thin Driver も提供されています。Oracle Thin Driver の詳細については、『WebLogic JDBC のコンフィグレーションと管理』の「WebLogic Server でのサードパーティ JDBC ドライバの使い方」を参照してください。

以下の節では、WebLogic Type 4 JDBC Oracle ドライバのコンフィグレーション方法と使用方法について説明します。

 


Oracle データベース バージョンのサポート

WebLogic Type 4 JDBC Oracle ドライバ (「Oracle ドライバ」) は次のバージョンをサポートします。

 


Oracle ドライバ クラス

WebLogic Type 4 JDBC Oracle ドライバのドライバ クラスは次のとおりです。

WebLogic Server ドメインに JDBC データ ソースをコンフィグレーションする場合に、これらのドライバ クラスを使用します。

 


Oracle URL

Oracle ドライバの接続 URL の形式は次のとおりです。

jdbc:bea:oracle://hostname:port[;property=value[;...]]

各要素の説明は次のとおりです。

次に例を示します。

jdbc:bea:oracle://server3:1521;ServiceName=ORCL;User=test;Password=secret

Oracle tnsnames.ora ファイルからの接続情報の取得方法については、「tnsnames.ora ファイルの使用」を参照してください。

 


Oracle 接続プロパティ

表 6-1 に、Oracle ドライバでサポートされる JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC データ ソースのコンフィグレーションでこれらの接続プロパティを使用できます。プロパティを指定するには、JDBC データ ソースのコンフィグレーションで次の形式を使用します。

   property=value

すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティかどうかが記載されています。

表 6-1 Oracle の接続文字列のプロパティ
プロパティ
説明
AuthenticationMethod
auto、kerberos、kerberosUIDPassword、ntlm、client、または userIDPassword。ドライバが接続を確立する際に使用する認証方法を指定する。
auto (デフォルト) に設定すると、ドライバは接続を確立する際にユーザ ID/パスワード、Kerberos 認証、または NTLM 認証を使用する。アプリケーションがユーザ ID を提供しているか、ドライバが Windows プラットフォームで実行されているか、ドライバが NTLM 認証に必要な DLL をロードできるかどうかなどの条件の組み合わせに基づいて、認証方法が選択される。この値の使用の詳細については、「AuthenticationMethod プロパティの使用」を参照。
kerberos に設定すると、Kerberos 認証が使用される。ユーザ ID やパスワードを指定しても無視される。
kerberosUIDPassword に設定すると、ドライバは最初に Kerberos を使用してユーザを認証する。次に、ユーザ ID/パスワード認証を使用してユーザを再認証する。ユーザ ID とパスワードが指定されていない場合は、ドライバから例外が送出される。Kerberos 認証かユーザ ID/パスワード認証が失敗した場合、接続の試行は失敗し、ドライバから例外が送出される。
ntlm に設定すると、NTLM 認証に必要な DLL をロードできる場合は NTLM 認証が使用される。DLL をロードできない場合は、ドライバから例外が送出される。ユーザ ID やパスワードを指定しても無視される。この値は Windows クライアントのみでサポートされる。
client に設定すると、ドライバを実行しているシステムにログインしたユーザのユーザ ID を使用して、データベースにアクセスするユーザが認証される。クライアントでのみ認証が実施され、Oracle サーバによる追加の認証は提供されない。ユーザ ID やパスワードを指定しても無視される。
userIdPassword に設定すると、ユーザ ID/パスワード認証が使用される。ユーザ ID とパスワードが指定されていない場合は、ドライバから例外が送出される。
注意 : type2 および none の値は非推奨となったが、下位互換性のために認識される。代わりに ntlm および userIdPassword の使用を推奨。
User プロパティはユーザ ID を提供する。Password プロパティはパスワードを提供する。
詳細については、「認証」を参照。
デフォルトは auto。
BatchPerformanceWorkaround
省略可能
true または false。バッチ処理の実行に使用されるメソッドを決定する。
true に設定すると、ネイティブの Oracle バッチ メカニズムが使用される。ネイティブの Oracle バッチ メカニズムでは、バッチ内の文やパラメータごとの更新件数は返さない。このため、ドライバは更新件数配列の各エントリの SUCCESS_NO_INFO (-2) の値を返す。アプリケーションが更新件数情報を受信できるようになっている場合は、このプロパティを true に設定することでパフォーマンスを大幅に向上させることができる。
false に設定すると、JDBC 3.0 に準拠したバッチ メカニズムが使用される。
デフォルトは false。
詳細については、「バッチ挿入とバッチ更新」を参照。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
CatalogIncludesSynonyms
非推奨
このプロパティは、既存のデータ ソースとの互換性を確保するためのものだが、結果セットにシノニムを含めるにはこのプロパティの代わりに CatalogOptions プロパティを使用することが推奨される。
CatalogOptions
省略可能
0、1、2、または 3。カタログ関数から返される結果セットに含める情報のタイプを指定する。
0 に設定すると、結果セットにはシノニムもアノテーション情報も含まれない。
1 に設定すると、結果セットには DatabaseMetaData の getTables() メソッドおよび getColumns() メソッドから返されるアノテーション情報が含まれる。
2 (デフォルト) に設定すると、結果セットには DatabaseMetaData の getColumns()、getImportedKeys()、getExportedKeys()、getPrimaryKey()、getProcedures()、getProcedureColumns()、および getIndexInfo() の各メソッドから返されるシノニムが含まれる。
3 に設定すると、結果セットにはアノテーション情報およびシノニムが含まれる (これらを返すメソッドは、値 1 および値 2 を設定した場合と同様)。
デフォルトは 2。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
CodePageOverride
UTF8、SJIS、ENHANCED_SJIS、ENHANCED_SJIS_ORACLE、または MS932。ドライバが文字データの変換に使用するコード ページ。指定したコード ページによって、デフォルトのデータベース コード ページまたはカラム照合がオーバーライドされる。データベースとやり取り (取得および書き込み) するすべての文字データは、指定したコード ページを使用して変換される。このオプションの設定は、ドライバが文字データを国別文字セットに変換する方法には影響しない。
デフォルトでは、文字データの変換に使用するコード ページが自動的に識別される。このプロパティは、ドライバのデフォルト動作を変更する必要がある場合にのみ使用する。
UTF8 に設定すると、ドライバは UTF-8 コード ページを使用して、Oracle サーバにデータを Unicode として指定する。UTF-8 コード ページでは、Java String フォーマットの UTF-16 から UTF-8 にデータが変換される。この値を指定した場合、WireProtocolMode プロパティの値は強制的に 2 に設定される。
SJIS に設定すると、ドライバは、SHIFT-JIS コード ページを使用して文字データを JA16SJIS 文字セットに変換する。
ENHANCED_SJIS に設定すると、ドライバは ENHANCED_SJIS コード ページを使用し、ICU 文字変換ライブラリの定義に従って、文字データを Java String フォーマットの UTF-16 から SJIS に変換する。また、次の MS-932 文字を対応する SJIS エンコーディングにマップする。
\UFF5E 波ダッシュ
\U2225 二重縦線
\UFFE0 セント記号
\UFF0D マイナス記号
\UFFE1 ポンド記号
\UFFE2 ノット記号
この値は下位互換性のために提供されている。Oracle データベースの文字セットが SHIFT_JIS に設定されている場合にのみこの値を使用する。
ENHANCED_SJIS_ORACLE に設定すると、ドライバは ENHANCED_SJIS_ORACLE コード ページを使用して、文字データを Java String フォーマットの UTF-16 から Oracle の SJIS の定義に変換する。JA16SJIS 文字セットが設定された Oracle データベースに接続する場合、ドライバはデフォルトでこのコード ページを使用する。ENHANCED_SJIS_ORACLE コード ページは MS932 コード ページのスーパー セット。Oracle データベースの文字セットが SHIFT_JIS に設定されている場合にのみこの値を使用する。
CodePageOverride (続き)
MS932 に設定すると、ドライバは Microsoft MS932 コード ページを使用して、文字データを Java String フォーマットの UTF-16 から SJIS に変換する。以前のバージョンのドライバでは文字データから JA16SJIS に変換するときに MS932 コード ページを使用していたため、この値は下位互換性のために提供されている。Oracle データベースの文字セットが SHIFT_JIS に設定されている場合にのみこの値を使用する。
CommitBehavior
serverDefault、waitImmediate、waitBatch、noWaitImmediate、または noWaitBatch。通常、更新トランザクションによって生じた REDO の変更は、トランザクションがコミットされるとすぐにディスクに書き込まれる。セッションはディスクへの書き込みが完了するのを待機してから、アプリケーションに制御を返す。Oracle 10g R2 では、ログライターが REDO の変更をすぐにディスクに書き込む代わりに、独自の時間に書き込み、ディスクへの書き込みが完了するのを待機する代わりに、完了前にアプリケーションに制御を返すことができる。このプロパティでは、Oracle COMMIT_WRITE セッション パラメータの値を設定することで、この動作を制御する。
以下の両方の特性を持つアプリケーションでは、ディスクへの書き込みを待機しないことでパフォーマンスが向上する。
  • 更新操作を実行するアプリケーション。
  • データの一貫性がそれほど重要でないアプリケーション。たとえば、ほとんどの銀行業務アプリケーションでは、REDO ログの変更をディスクに書き込む際にサーバで問題が発生したり、そのプロセス中に失敗したりした場合、データの消失を許容できないが、診断を目的とする多くのロギング アプリケーションでは、データの消失を許容できる。
serverDefault (デフォルト) に設定すると、データベース サーバで設定されている REDO ログの動作が使用される。
waitImmediate に設定すると、コミット操作は REDO の変更がディスクに書き込まれるまで、アプリケーションに制御を返さない。REDO の変更はディスクに直ちに書き込まれる。アプリケーションで一度に複数の更新トランザクションを処理する場合は、この値を使用する。
waitBatch に設定すると、コミット操作は REDO の変更がディスクに書き込まれるまで、アプリケーションに制御を返さない。追加のトランザクションをディスクに書き込む用意ができるまで、書き込みタスクはサーバによって遅延される可能性がある。アプリケーションで同時に複数の更新トランザクションを処理する場合は、この値を使用する。アプリケーションで 2、3 個のトランザクションのみを実行する場合にこの値を使用すると、パフォーマンスが低下する。
CommitBehavior (続き)
noWaitImmediate に設定すると、REDO の変更はディスクに直ちに書き込まれるが、コミット操作では書き込み処理の完了を待機しないでアプリケーションに制御を返す。アプリケーションで一度に複数の更新トランザクションを処理し、データの一貫性がそれほど重要でない場合は、この値を使用する。
noWaitBatch に設定すると、追加のトランザクションをディスクに書き込む用意ができるまで、REDO の書き込みタスクはサーバによって遅延されるが、コミット操作では書き込み処理の完了を待機しないでアプリケーションに制御を返す。アプリケーションで同時に複数の更新トランザクションを処理し、データの一貫性がそれほど重要でない場合は、この値を使用する。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
ConnectionRetryCount
省略可能
データベース サーバへの正常な接続を確立できるまでに、ドライバで接続を再試行する回数。有効な値は、0 または正の整数。
0 に設定すると、最初の試行が失敗した場合でも再接続は試行されない。
アプリケーションによってログイン タイムアウト値 (たとえば、DataSource.loginTimeout や DriverManager.loginTimeout) が設定されている場合は、そのタイムアウトがこのプロパティよりも優先される。
試行の待機間隔は、ConnectionRetryDelay プロパティで秒単位で指定する。
デフォルトは 5。
ConnectionRetryDelay
省略可能
ConnectionRetryCount が正の整数に設定されている場合に、ドライバがデータベース サーバへの接続を再試行する前に待機する秒数。
ConnectionRetryCount プロパティでは、ドライバがデータベース サーバへの接続を試行する回数を指定する。
デフォルトは 1。
ConvertNull
1 または 0。データ変換における null 値の処理方法を制御する。
1 (デフォルト) に設定すると、要求されたデータ型と返されるデータのテーブル カラムのデータ型が照合される。要求された型とカラム型の間の変換が定義されていない場合は、カラム値に関係なく、「unsupported data conversion」例外が生成される。
0 に設定すると、カラムの値が null の場合でもデータ型の照合は実行されない。このように設定することで、要求された型とカラム型の間の変換が定義されていない場合でも null 値を返すことが可能になる。
デフォルトは 1。
EnableCancelTimeout
true または false。クエリがタイムアウトしたために送信されたキャンセル リクエストに、キャンセルする文と同じクエリ タイムアウト値を適用するかどうかを指定する。
true に設定した場合、キャンセル リクエストは、キャンセルする文に設定されているタイムアウト値と同じ時間でタイムアウトする。たとえば、ある文でアプリケーションが Statement.setQueryTimeout(5) を呼び出し、タイムアウトが経過したためにその文がキャンセルされた場合、送信されるキャンセル リクエストも実行時間が 5 秒を超えるとタイムアウトする。サーバ ダウン等の理由でキャンセル リクエストがタイムアウトすると、キャンセル リクエストがタイムアウトしたことを示す例外がドライバから送出され、その接続はそれ以降無効となる。
false に設定すると、キャンセル リクエストはタイムアウトしない。
EncryptionMethod
noEncryption または SSL。ドライバとデータベース サーバの間でネットワークを介して転送するデータの暗号化と復号化に、SSL 暗号化アルゴリズムを使用するかどうかを指定する。
noEncryption (デフォルト) に設定すると、データは暗号化/復号化されない。
注意 : ドライバが SSL を要求しないデータベース サーバへの接続を試行すると、接続のハングが発生する可能性がある。SSL を要求しないサーバに接続した場合に発生する問題を回避するには、LoginTimeout プロパティを使用してログイン タイムアウトを設定する。
SSL に設定すると、データが SSL で暗号化される。データベース サーバで SSL がサポートされていない場合は、接続に失敗して例外が送出される。SSL を有効にすると、以下のプロパティも適用される。
HostNameInCertificate
KeyStore (SSL クライアント認証用)
KeyStorePassword (SSL クライアント認証用)
KeyPassword (SSL クライアント認証用)
TrustStore
TrustStorePassword
ValidateServerCertificate
tnsnames.ora ファイルを使用して SSL 暗号化を有効にする方法については、「tnsnames.ora ファイルの使用」を参照。

注意 : ドライバが SSL をサポートしないデータベース サーバへの接続を試行すると、接続のハングが発生する可能性がある。SSL をサポートしていないサーバに接続した場合に発生する問題を回避するには、LoginTimeout プロパティを使用してログイン タイムアウトを設定する。

データ暗号化のコンフィグレーションの詳細については、「データの暗号化」を参照。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
FetchTSWTZasTimestamp
省略可能
true または false。true に設定すると、TIMESTAMP WITH TIME ZONE データ型 (Oracle9i 以降) のカラム値を JDBC TIMESTAMP データ型として返信できる。
false に設定すると、TIMESTAMP WITH TIME ZONE データ型のカラム値は文字列として取得しなければならない。
デフォルトは false。
詳細については、「TIMESTAMP WITH TIME ZONE データ型」を参照。
HostNameInCertificate
host_name または #SERVERNAME#。SSL 暗号化と証明書の検証が有効になっている (EncryptionMethod=SSL および ValidateServerCertificate=true が指定されている) 場合に、証明書の検証に使用するホスト名を指定する。省略可能なこのプロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供する。
ホスト名が指定されている場合は、指定されたホスト名が、証明書内の SubjectAlternativeName の DNSName 値と照合される。DNSName 値が SubjectAlternativeName 内に存在しない場合や、証明書に SubjectAlternativeName が含まれていない場合、ホスト名は証明書のサブジェクト名の共通名 (CN) 部分と照合される。値が一致しない場合は、接続に失敗して例外が送出される。
#SERVERNAME# が指定されている場合は、接続 URL 内に指定されたサーバ名が、証明書内の SubjectAlternativeName の DNSName 値と照合される。DNSName 値が SubjectAlternativeName 内に存在しない場合や、証明書に SubjectAlternativeName が含まれていない場合、ホスト名は証明書のサブジェクト名の CN 部分と照合される。値が一致しない場合は、接続に失敗して例外が送出される。
注意 : 複数の CN 部分が存在する場合は、ホスト名がそれぞれの CN 部分と照合される。照合が 1 つでも一致すれば、接続が確立される。
指定されていない場合は、接続 URL 内に指定されたサーバ名または接続のデータ ソースを使用して証明書が検証される。
SSL 暗号化または証明書の検証が有効になっていない場合、このプロパティは無視される。
認証のコンフィグレーションの詳細については、「データの暗号化」を参照。
デフォルトは空の文字列。
InitializationString
ドライバがデータベースへの接続を確立し、その接続のすべての初期化を実行した後に実行する、1 つまたは複数の SQL コマンドを指定する。次に例を示す。
InitializationString=command
複数のコマンドを指定する場合はセミコロンで区切る必要がある。また、このプロパティを接続 URL 内に指定する場合、複数のコマンドを指定するには値全体を括弧で囲む必要がある。次に例を示す。
jdbc:bea:oracle://server1:1521;
ServiceName=ORCL;InitializationString=(
command1;
command2)
SQL コマンドの実行が失敗すると、接続の試行も失敗し、どの SQL コマンドが失敗したかを示す例外が送出される。
InsensitiveResultSetBufferSize
省略可能
-1、0、または x。ドライバがインセンシティブな結果セット データのキャッシュに使用するメモリの量を指定する。
-1 に設定すると、ドライバはすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セットのサイズが利用できるメモリ容量を超えると、OutOfMemoryException 例外が生成される。結果セット データをディスクに書き込む必要がないため、データがより効率的に処理される。
0 に設定すると、ドライバは 2GB を限度としてすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セット データのサイズが利用できるメモリ容量を超えると、その結果セット データがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。
x (正の整数) に設定すると、インセンシティブな結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) を指定したことになり、ドライバはすべての結果セット データをメモリにキャッシュする。結果セットのサイズがバッファ サイズを超えると、結果セットがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。バッファ サイズとして 2 の累乗を指定すると、メモリの使用がより効率的になる。
デフォルトは 2048 (KB)。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
JavaDoubleToString
true または false。double 値や float 値を string 値に変換する際に、ドライバの内部変換アルゴリズムと JVM 変換アルゴリズムのどちらを使用するかを指定する。
true に設定すると、double 値や float 値を string 値に変換する際に JVM 変換アルゴリズムが使用される。
false (デフォルト) に設定すると、double 値や float 値を string 値に変換する際にドライバの内部変換アルゴリズムが使用される。このプロパティを false に設定するとパフォーマンスは向上するが、JVM アルゴリズムを使用した変換との間で、丸めによる多少の誤差が生じる可能性がある。ただし、これらの誤差は double および float データ型の誤差としては許容範囲内。
デフォルトは false。
KeyStore
EncryptionMethod プロパティで SSL が有効になっており、データベース サーバで SSL クライアント認証が有効になっている場合に、使用するキーストア ファイルのディレクトリを指定する。キーストア ファイルには、サーバからの証明書リクエストへの応答としてクライアントからサーバに送信される証明書が格納されている。
この値によって、javax.net.ssl.keyStore Java システム プロパティに指定されたキーストア ファイルのディレクトリがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.keyStore Java システム プロパティに指定されたキーストア ファイルのディレクトリが使用される。
注意 : キーストア ファイルとトラストストア ファイルは同じファイルでも構わない。
KeyStorePassword
EncryptionMethod プロパティで SSL が有効になっており、データベース サーバで SSL クライアント認証が有効になっている場合に、キーストア ファイル内にアクセスするために使用するパスワードを指定する。キーストア ファイルには、サーバからの証明書リクエストへの応答としてクライアントからサーバに送信される証明書が格納されている。
この値によって、javax.net.ssl.keyStorePassword Java システム プロパティに指定されたキーストア ファイルのパスワードがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.keyStorePassword Java システム プロパティに指定されたキーストア ファイルのパスワードが使用される。
注意 : キーストア ファイルとトラストストア ファイルは同じファイルでも構わない。
KeyPassword
EncryptionMethod プロパティで SSL が有効になっており、データベース サーバで SSL クライアント認証が有効になっている場合に、キーストア ファイル内の個別のキーにアクセスするために使用するパスワードを指定する。このプロパティは、キーストア ファイル内のいずれかのキーに、キーストア ファイルとは異なるパスワードが保持されている場合に有用。
LoginTimeout
省略可能
ドライバが接続が確立されるのを待機する時間 (秒単位)。この時間が経過すると、制御がアプリケーションに返され、タイムアウト例外が送出される。
0 (デフォルト) に設定すると、接続リクエストはタイムアウトしない。
Password
Oracle データベースに接続する場合に使用するパスワード。大文字と小文字は区別されない。パスワードは、データベースでユーザ ID/パスワード認証が有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してパスワードを取得する。
認証のコンフィグレーションの詳細については、「認証」を参照。
PortNumber
省略可能
Oracle データベース サーバ上で動作する Oracle リスナの TCP ポート。デフォルトは 1521 (Oracle データベース ソフトウェアがインストール中に使用するデフォルトのポート番号)。
このプロパティは、データ ソース接続でのみサポートされる。
tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。tnsnames.ora ファイルを使用して Oracle リスナのポート番号を指定する方法については、「tnsnames.ora ファイルの使用」を参照。
QueryTimeout
整数、-1、または 0。接続によって作成されるすべての文のデフォルトのクエリ タイムアウトを秒単位で設定する。
正の整数に設定すると、その値が接続によって作成されるすべての文のデフォルト タイムアウトとして使用される。この接続オプションで設定したデフォルト タイムアウトをオーバーライドするには、Statement.setQueryTimeout() メソッドを呼び出して特定の文のタイムアウト値を設定する。
-1 に設定すると、クエリ タイムアウト機能が無効になる。ドライバは、通知なしで Statement.setQueryTimeout() メソッドを呼び出す。
0 (デフォルト) に設定すると、デフォルトのクエリ タイムアウトは無限大となる (クエリはタイムアウトしない)。
ResultSetMetaDataOptions
0 または 1。アプリケーションでテーブル名情報が必要な場合は、Select 文の ResultSet メタデータにテーブル名情報を含めて返すことができる。
0 (デフォルト) に設定した場合は、ResultSetMetaData.getTableName() メソッドが呼び出されても、結果セットの各カラムの正しいテーブル名を特定するための追加処理は実行されない。この場合、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性がある。
1 に設定した場合は、ResultSetMetaData.getTableName() メソッドが呼び出されると、結果セットの各カラムの正しいテーブル名を特定するための追加処理が実行される。ドライバは、ResultSetMetaData.getSchemaName() メソッドと ResultSetMetaData.getCatalogName() メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます (ドライバがこの情報を判別できる場合)。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは 0。
SendFloatParametersAsString
true または false。FLOAT、BINARY_FLOAT、および BINARY_DOUBLE パラメータがデータベース サーバに文字列として送信されるか、または浮動小数点数として送信されるかを決定する。
true に設定すると、FLOAT、BINARY_FLOAT、および BINARY_DOUBLE パラメータはデータベース サーバに文字列値として送信される。
false (デフォルト) に設定すると、FLOAT、BINARY_FLOAT、および BINARY_DOUBLE パラメータはデータベース サーバに浮動小数点数として送信される。Oracle のオーバーロードされたストアド プロシージャを使用する場合は、この値を設定すると、データベース サーバがパラメータのデータ型に基づいて、呼び出す適切なストアド プロシージャを決定できる。
注意 : 1.0E127 より大きな数または 1.0E-130 より小さな数は、浮動小数点数を使用して Oracle 9i データベース用の数値フォーマットに変換できない。1.0E127 より大きな数または 1.0E-130 より小さな数があると、ドライバから例外が送出される。アプリケーションで Oracle 9i データベースに対してこの範囲の数を使用している場合は、このプロパティを true に設定する。
デフォルトは false。
ServerName
省略可能
Oracle サーバの IPv4 または IPv6 形式の IP アドレスを指定するか、ネットワークで名前付きのサーバがサポートされている場合はサーバ名を指定する。たとえば、122.23.15.12 または OracleAppServer。
tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。
このプロパティは、データ ソース接続でのみサポートされる。
tnsnames.ora ファイルを使用してサーバ名を指定する方法については、「パフォーマンスに関する考慮事項」を参照。
ServerType
省略可能
Shared または Dedicated。接続を確立するにあたって、UNIX の場合は共有サーバ プロセスと専用サーバ プロセス、Windows の場合は共有サーバ スレッドと専用サーバ スレッドのどちらを使用するかを指定する。
Shared に設定すると、使用するサーバ プロセスはプールから取得される。クライアントとサーバのソケット接続は、サーバのディスパッチ プロセスに対して確立される。この設定では、接続の数よりも少ないプロセスで済むためサーバ リソースを節約できる。この値は、サーバにおいて数多くのユーザをより少ないサーバ リソースで処理しなければならない場合に使用する。
Dedicated に設定すると、その接続専用のサーバ プロセスが作成される。接続が切断されると、プロセス (UNIX) またはスレッド (Windows) も終了する。ソケット接続は、アプリケーションと専用サーバ プロセス (またはスレッド) との間で直接確立される。UNIX サーバへの接続では、専用サーバ プロセスを使用するとパフォーマンスが大幅に向上するが、より多くのサーバ リソースを使用することになる。Windows サーバへの接続では、リソースの使用量はそれほど多くない。ユーザが少ないバッチ環境であればこの値を使用する。
このプロパティを指定しない場合、ドライバはサーバのサーバ タイプ セットを使用する。
tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。
tnsnames.ora ファイルを使用してサーバ タイプを指定する方法については、「tnsnames.ora ファイルの使用」を参照。
tnsnames.ora ファイルを使用してサーバ タイプを指定する方法については、「パフォーマンスに関する考慮事項」を参照。
ServiceName
省略可能
接続に使用するデータベースを指定するデータベース サービス名。このプロパティは SID とは相互排他的である。サービス名は、グローバル データベース名を表す文字列。通常は、データベース名とドメイン名を含む。次に例を示す。
sales.us.acme.com
このプロパティは、特定の Oracle インスタンスへの接続ではなく、Oracle Real Application Clusters (RAC) システムへの接続を指定する場合に有用。これは、RAC システムのノードでは共通のサービス名が共有されるため。
tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。
tnsnames.ora ファイルを使用してデータベースのサービス名を指定する方法については、「パフォーマンスに関する考慮事項」を参照。
SID
省略可能
サーバ上で動作する Oracle データベースのインスタンスを表す Oracle システム識別子。このプロパティは ServiceName プロパティとは相互排他的である。
デフォルトは ORCL。これは、Oracle データベースのインストール時にコンフィグレーションされるデフォルトの SID。
tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。
tnsnames.ora ファイルを使用して Oracle SID を指定する方法については、「パフォーマンスに関する考慮事項」を参照。
SysLoginRole
sysdba または sysoper。ユーザが Oracle システム権限の SYSDBA と SYSOPER のどちらでデータベースにログオンするかを指定する。たとえば、データベースの作成や削除を行えるように、ユーザに SYSDBA 権限を付与することができる。
sysdba に設定すると、ユーザは Oracle システム権限 SYSDBA でデータベースにログオンする。
sysoper に設定すると、ユーザは Oracle システム権限 SYSOPER でデータベースにログオンする。
SYSDBA および SYSOPER システム権限で許可される操作の詳細については、Oracle のドキュメントを参照。
注意 : ドライバが接続を試行する前に、ユーザに SYSDBA または SYSOPER システム権限を付与する必要がある。付与されていない場合、ドライバは例外を送出し、接続の試行は失敗する。
このプロパティを空の文字列に設定するか指定しない場合、ユーザは SYSDBA または SYSOPER 特権なしでログインする。
デフォルトは空の文字列。
SupportLinks
true または false。Oracle リンク サーバがサポートされるかどうかを指定する。リンク サーバでは、ある Oracle サーバから別の Oracle サーバへのマッピングが定義される。
true に設定すると、Oracle リンク サーバがサポートされる。Oracle リンク サーバがサポートされている場合、分散トランザクションはサポートされない。
false (デフォルト) に設定すると、Oracle リンク サーバはサポートされない。また、分散トランザクションがサポートされる。ほとんどの場合、この値を false に設定するとパフォーマンスが最適になる。
TNSNamesFile
省略可能
接続情報の取得に使用する tnsnames.ora ファイルのパスおよびファイル名。tnsnames.ora ファイルには、Oracle ネット サービス名にマップされた接続情報が格納されている。tnsnames.ora ファイルを使用すると接続情報を一元化でき、変更が生じた場合の保守が容易になる。
このプロパティの値は、tnsnames.ora ファイルの有効なパスおよびファイル名でなければならない。
このプロパティを指定する場合は、TNSServerName プロパティも指定する必要がある。
このプロパティを指定したら、接続情報の衝突を防ぐため、以下のプロパティは指定しないこと。
PortNumber
ServerName
ServerType
ServiceName
SID
このプロパティが指定されているにもかかわらず、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を送出する。tnsnames.ora ファイルを使用した接続方法については、「tnsnames.ora ファイルの使用」を参照。
TNSServerName
省略可能
tnsnames.ora ファイルの接続情報を参照するために使用する Oracle ネット サービス名。このプロパティの値は、TNSNamesFile プロパティに指定した tnsnames.ora ファイルに記述されている有効なネット サービス名エントリでなければならない。
このプロパティを指定する場合は、TNSNamesFile プロパティも指定する必要がある。
このプロパティを指定したら、接続情報の衝突を防ぐため、以下のプロパティは指定しないこと。
PortNumber
ServerName
ServerType
ServiceName
SID
このプロパティが指定されているにもかかわらず、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を送出する。tnsnames.ora ファイルを使用した接続方法については、「tnsnames.ora ファイルの使用」を参照。
TrustStore
EncryptionMethod プロパティで SSL が有効になっており、サーバ認証を使用している場合に、使用するトラストストア ファイルのディレクトリを指定する。トラストストア ファイルには、クライアントが信頼する認証局 (CA) のリストが格納されている。
この値によって、javax.net.ssl.trustStore Java システム プロパティに指定されたトラストストア ファイルのディレクトリがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.trustStore Java システム プロパティに指定されたトラストストア ファイルのディレクトリが使用される。
このプロパティは、ValidateServerCertificate=false に設定されている場合は無視される。
TrustStorePassword
EncryptionMethod プロパティで SSL が有効になっており、サーバ認証を使用している場合に、トラストストア ファイルにアクセスするために使用するパスワードを指定する。トラストストア ファイルには、クライアントが信頼する認証局 (CA) のリストが格納されている。
この値によって、javax.net.ssl.trustStorePassword Java システム プロパティに指定されたトラストストア ファイルのパスワードがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.trustStorePassword Java システム プロパティに指定されたトラストストア ファイルのパスワードが使用される。
このプロパティは、ValidateServerCertificate=false に設定されている場合は無視される。
User
Oracle データベースに接続する場合に使用するデフォルトのユーザ名。大文字と小文字は区別されない。ユーザ名は、データベースでユーザ ID/パスワード認証が有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してユーザ名を取得する。
認証のコンフィグレーションの詳細については、「認証」を参照。
ValidateServerCertificate
true または false。SSL 暗号化が有効 (EncryptionMethod=SSL) になっている場合に、データベース サーバから送信された証明書を検証するかどうかを指定する。SSL サーバ認証を使用する場合、サーバから送信されるすべての証明書は、信頼性のある認証局 (CA) で発行されたものでなければならない。テスト環境においては、信頼性のある CA が発行した証明書でなくても、サーバから返されたすべての証明書をドライバが信頼するようにすることで、テスト環境内の各クライアントでトラストストア情報を指定する手間を省くことができる。
true (デフォルト) に設定すると、データベース サーバから送信された証明書が検証される。サーバから送信されるすべての証明書は、トラストストア ファイル内の信頼性のある CA によって発行されたものでなければならない。HostNameInCertificate プロパティを指定した場合は、ホスト名による証明書の検証も行われる。省略可能なこの HostNameInCertificate プロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供する。
false に設定すると、データベース サーバから送信された証明書は検証されない。TrustStore および TrustStorePassword プロパティ (または対応する Java システム プロパティ) に指定されたトラストストア情報は無視される。
トラストストア情報は、TrustStore および TrustStorePassword プロパティ (または対応する Java システム プロパティ) を使用して指定する。
認証のコンフィグレーションの詳細については、「データの暗号化」を参照。
デフォルトは true。
WireProtocolMode
1 または 2。一部またはすべてのカラムに繰り返しデータを含む結果セットや、画像、ピクチャ、長いテキスト、またはバイナリ データ (Blob および Clob データ) の挿入および更新に向けて、Oracle サーバヘのネットワーク トラフィックを最適化するかどうかを指定する。
1 (デフォルト) に設定すると、ドライバは通常の通信プロトコル モードで動作し、一部またはすべてのカラムに繰り返しデータを含む結果セットや、Blob および Clob データの挿入および更新に向けたネットワーク トラフィックの最適化は行わない。
2 に設定すると、ドライバは Oracle サーバへのネットワーク トラフィックを以下に向けて最適化する。
一部またはすべてのカラムに繰り返しデータを含む結果セット。特に、結果セット内の連続する複数の行にわたって同じカラムに同一のデータが含まれる場合、この値を設定するとパフォーマンスが向上する。単一行の結果セットや繰り返しデータを含まない結果セットの場合は、この値を設定するとパフォーマンスが低下する可能性がある。
Blob および Clob データの挿入および更新。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは 1。

 


パフォーマンスに関する考慮事項

以下に示す Oracle ドライバの接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。

BatchPerformanceWorkaround

ドライバは JDBC 3.0 に準拠したバッチ メカニズムまたはネイティブの Oracle バッチ メカニズムを使用して、バッチ処理を実行できます。アプリケーションが更新件数情報を使用しない場合は、ネイティブの Oracle バッチ環境を使用するとパフォーマンスが向上します。JDBC 3.0 に準拠したメカニズムでは、JDBC 3.0 仕様で求められているように、バッチ内の文やパラメータごとの更新件数が返されます。ネイティブの Oracle バッチ メカニズムでは、バッチ内の文やパラメータごとの更新件数は返されません。このため、ネイティブの Oracle バッチ メカニズムを使用する場合は、更新件数配列で SUCCESS_NO_INFO (-2) の値が返されます。

CatalogOptions

Oracle では、シノニムおよびアノテーション情報の取得は非常に負荷の高い処理です。アプリケーションでこれらの情報を返す必要がない場合は、ドライバのパフォーマンスを向上させることができます。JDBC における標準の動作では、DatabaseMetaData メソッドの getColumns()getProcedures()getProcedureColumns()、および getIndexInfo() から返される結果セットにシノニムが含まれます。ドライバはこれに加えて、DatabaseMetaData メソッドの getTables() および getColumns() から返される結果セットにアノテーション情報を含めることができます。

CommitBehavior

通常、更新トランザクションによって生じた REDO の変更は、トランザクションがコミットされるとすぐにディスクに書き込まれます。セッションはディスクへの書き込みが完了するのを待機してから、アプリケーションに制御を返します。Oracle 10g R2 では、ログライターが REDO の変更をすぐにディスクに書き込む代わりに、独自の時間に書き込み、ディスクへの書き込みが完了するのを待機する代わりに、完了前にアプリケーションに制御を返すことができます。更新操作を実行するアプリケーションで、データの一貫性がそれほど重要でない場合は、ディスクへの書き込みを待機しないことで、パフォーマンスが向上します。たとえば、ほとんどの銀行業務アプリケーションでは、REDO の変更をディスクに書き込む際にサーバで問題が発生したり、そのプロセス中に失敗したりした場合、データの消失を許容できませんが、診断を目的とする多くのロギング アプリケーションでは、データの消失を許容できます。

EncryptionMethod

データの暗号化と復号化により余分なオーバーヘッド (主に CPU の使用率) がかかるため、パフォーマンスが低下する場合があります。

InsensitiveResultSetBufferSize

スクロールインセンシティブな結果セットを使用する場合のパフォーマンスを向上させるため、ドライバは結果セット データをディスクに書き込む代わりに、メモリにキャッシュできます。デフォルトでは、ドライバはインセンシティブな結果セット データを 2 MB までメモリにキャッシュし、残りの結果セット データをディスクに書き込みます。パフォーマンスを向上させるには、ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込めないようにします。最大キャッシュ サイズの設定は 2 GB です。

ResultSetMetaDataOptions

デフォルトでは、ResultSetMetaData.getTableName() メソッドが呼び出された場合、Oracle ドライバは、結果セット内の各カラムの正しいテーブル名を返すために必要な追加の処理を省略します。このため、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。アプリケーションでテーブル名情報が必要ない場合は、この設定によって最適なパフォーマンスが得られます。

ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。

ServerType

専用サーバ接続を使用する場合、UNIX のサーバ プロセス (Windows におけるスレッド) は、そのアプリケーション接続専用として作成されます。このプロセスは、接続を切断すると終了します。ソケット接続は、アプリケーションと、この専用サーバ プロセスとの間で直接確立されます。これにより、パフォーマンスは大幅に向上しますが、消費される UNIX サーバのリソースも著しく増加します。Windows プラットフォームで動作する Oracle サーバの場合、UNIX のプロセスに該当するのはスレッドであるため、サーバ上で追加消費されるリソース量は UNIX に比べて大幅に低く抑えられます。ServerType プロパティを Dedicated に設定する必要があるのは、バッチ環境で接続数が比較的少ない場合か、最大の負荷がかかっている状態でも Oracle サーバの処理能力とメモリ容量に余裕がある場合か、または Oracle リソースを他のアプリケーションと共有するとパフォーマンスが低下するパフォーマンス重視のアプリケーションを使用している場合です。

WireProtocolMode

以下の場合には、このプロパティを 2 に設定します。

どちらの場合にも、このプロパティを 2 に設定するとパフォーマンスを向上させることができます。

2 に設定した場合、Oracle サーバへのネットワーク トラフィックは、繰り返しデータや長いデータに向けて最適化されます。

アプリケーションが以下の場合には、

このプロパティを 1 に設定してください。1 に設定しないとパフォーマンスが低下する可能性があります。

 


tnsnames.ora ファイルの使用

tnsnames.ora ファイルは、各 Oracle サービスの接続情報を論理エリアスにマップするために使用します。Oracle ドライバを使用すると、tnsnames.ora ファイルから以下のような基本的な接続情報を取得できます。

tnsnames.ora ファイルでは、Oracle サービスの接続情報がエリアス (Oracle ネット サービス名) に関連付けられています。ネット サービス名の各エントリには、リスナやサービスの情報を定義する記述子が含まれています。コード リスト 6-1 に、ネット サービス名エントリである FITZGERALD.SALES および ARMSTRONG.ACCT をコンフィグレーションした tnsnames.ora ファイルの接続情報の例を示します。

コード リスト 6-1 tnsnames.ora の例
FITZGERALD.SALES =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
(CONNECT_DATA =
(SID = ORCL)
)
)
ARMSTRONG.ACCT =
(DESCRIPTION =
(ADDRESS_LIST=
(FAILOVER = on)
(LOAD_BALANCE = on)
(ADDRESS= (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = server2)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = server3)(PORT = 1521))
)
(CONNECT_DATA=
(SERVICE_NAME = acct.us.yourcompany.com)
)
)

この例では、Oracle ドライバが Oracle ネット サービス名エントリ FITGERALD.SALES を参照する場合、ドライバは Oracle SID ORCL (SID=ORCL) に指定されている Oracle データベース インスタンスに接続します。同様に、Oracle ドライバが ARMSTRONG.ACCT を参照する場合は、サービス名 acct.us.yourcompany.com (SERVICE_NAME=acct.us.yourcompany.com) に指定されている Oracle データベースに接続します。また、ドライバにより接続のフェイルオーバ (FAILOVER=on) とクライアントのロード バランシング (LOAD_BALANCE=on) が有効になります。

tnsnames.ora ファイルは、通常は Oracle データベースのインストール時にインストールされています。デフォルトでは、tnsnames.ora ファイルは、ORACLE_HOME\network\admin ディレクトリ (Windows の場合) または $ORACLE_HOME/network/admin ディレクトリ (UNIX の場合) にあります。

データベースへの接続

Oracle ドライバで Oracle tnsnames.ora ファイルから接続情報を取得するには、どの tnsnames.ora ファイル (TNSNamesFile プロパティで指定) と、どの Oracle サービス名エントリ (TNSServerName プロパティで指定) を使用して接続情報を参照するかを指定する必要があります。次に例を示します。

   <JDBCConnectionPool 
   DriverName="weblogic.jdbc.oracle.OracleDriver"
   Name="myDriver"
   PasswordEncrypted="{3DES}r8a+P5qIVJzgiWQDTAN/OA=="
   Properties="TNSServerName=myTNSServerName;user=user;TNSNamesFile=/usr/local/network/admin/tnsnames.ora"
   Targets="myserver" 
   TestConnectionsOnReserve="true"
   TestTableName="SQL SELECT 1 FROM DUAL"
   URL="jdbc:bea:oracle:TNSNamesFile=/usr/local/network/admin/tnsnames.ora"
   XAPasswordEncrypted="" />

この URL では、接続に使用する tnsnames.ora ファイルのパスとファイル名 (jdbc:bea:oracle:TNSNamesFile=/usr/local/network/admin/tnsnames.ora)、およびネット サービス名エントリ (TNSServerName=myTNSServerName) が指定されています。

注意 :

tnsnames.ora ファイルと Java 2 のセキュリティ マネージャを併用する場合は、tnsnames.ora ファイルに読み込みパーミッションを付与する必要があります。例については、「Oracle tnsnames.ora ファイルへのアクセス パーミッションの付与」を参照してください。

tnsnames.ora ファイルのコンフィグレーション

tnsnames.ora ファイルを使用して接続情報を取得する場合は、接続情報の衝突を防ぐため、以下の接続プロパティは指定しないようにしてください。

TNSNamesFile および TNSServerName プロパティに加えて、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を送出します。

表 6-2 に、Oracle ドライバ プロパティと tnsnames.ora 接続記述子パラメータの対応を示します。tnsnames.ora ファイルを使用する場合は、接続情報の衝突を防ぐため、表に示すドライバ プロパティは使用しないでください。

表 6-2 Oracle ドライバ プロパティと tnsnames.ora 接続記述子パラメータの対応表
Oracle ドライバ プロパティ
tnsnames.ora 属性
PortNumber = port
PORT = port
ADDRESS_LIST パラメータには、1 つまたは複数のサーバの接続情報が含まれる。ADDRESS パラメータを使用して、プライマリ サーバと代替サーバを指定できる。PORT パラメータは、ADDRESS パラメータ内で各サーバ エントリのポート番号を指定するために使用する。次に例を示す。
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(HOST = server1)
(PORT = 1521))
...
)
server1 にポート 1521 (Oracle データベースのインストール時のデフォルト ポート番号) が指定されている。
EncryptionMethod={noEncryption | SSL}
PROTOCOL={TCP | TCPS}
ADDRESS_LIST パラメータには、1 つまたは複数のサーバの接続情報が含まれる。ADDRESS パラメータを使用して、プライマリ サーバと代替サーバを指定できる。PROTOCOL パラメータは ADDRESS パラメータ内で使用し、使用するネットワーク プロトコルを指定する。ドライバとサーバの間でネットワークを介してデータを転送する際に、そのデータを暗号化/復号化するかどうかの指定にも使われる。
たとえば、以下のエントリでは、TCP/IP プロトコルを暗号化なしで使用することを指定する。
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(HOST = server1)
(PORT = 1521))
...
)
server1 にポート 1521 (Oracle データベースのインストール時のデフォルト ポート番号) が指定されている。
以下のエントリでは、TCP/IP プロトコルを SSL 暗号化とともに使用することを指定する。
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCPS)(HOST = server1)
(PORT = 2484))
...
)
server1 にポート 2484 (Oracle で SSL の場合に推奨されるポート番号) が指定されている。
注意 : TrustStore および TrustStorePassword プロパティ、または Java システム プロパティを使用してトラストストア情報を指定する必要がある。必要に応じて、ValidateServerCertificate および HostNameInCertificate プロパティを指定できる。
ServerName = server_name
HOST = server_name
ADDRESS_LIST パラメータには、1 つまたは複数のサーバの接続情報が含まれる。ADDRESS パラメータを使用して、プライマリ サーバと代替サーバを指定できる。HOST パラメータは、ADDRESS パラメータ内で各サーバ エントリのサーバ名を指定するために使用する。サーバ エントリは、IP アドレスでもサーバ名でも指定できる。次に例を示す。
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(HOST = server1)
(PORT = 1521))
...
)
1 番目のサーバ エントリでは、サーバ名 server1 が指定されている。
ServerType = {shared | dedicated}
SERVER = {shared | dedicated}
tnsnames.ora ファイルの CONNECT_DATA パラメータで SERVER=shared と指定した場合は、プールから取得したサーバ プロセス (UNIX の場合) またはサーバ スレッド (Windows の場合) が使用される。次に例を示す。
(CONNECT_DATA=
(SERVER=shared)
)
SERVER=shared と指定した場合は、接続の数よりも少ないプロセスで済むためサーバ リソースを節約できる。
SERVER=dedicated と指定した場合は、その接続専用のサーバ プロセスが作成される。接続が切断されると、プロセス (UNIX) またはスレッド (Windows) も終了する。
ServiceName = service_name
SERVICE_NAME = service_name
接続に使用するデータベースを指定するデータベース サービス名。サービス名は、グローバル データベース名を表す文字列。通常は、データベース名とドメイン名を含む。次に例を示す。
sales.us.acme.com
サービス名は、CONNECT_DATA パラメータで指定する。次に例を示す。
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
)
このパラメータは、SID 属性とは相互排他的。
SID = SID
SID = SID
サーバ上で動作する Oracle データベースのインスタンスを表す Oracle システム識別子 (SID)。Oracle データベース ソフトウェアのインストール時にコンフィグレーションされるデフォルトの Oracle SID は ORCL。SID は、CONNECT_DATA パラメータで指定する。次に例を示す。
(CONNECT_DATA=
(SID=ORCL)
)
このパラメータは、SERVICE_NAME 属性とは相互排他的。

tnsnames.ora ファイルのコンフィグレーションの詳細については、Oracle のドキュメントを参照してください。

 


データ型

表 6-3 に、Oracle ドライバでサポートされるデータ型と、それらが JDBC データ型へどのようにマップされるかを示します。

表 6-3 Oracle データ型
Oracle のデータ型
JDBC のデータ型
BFILE
BLOB
BINARY_DOUBLE1
DOUBLE
BINARY_FLOAT1
REAL
BLOB
BLOB
CHAR
CHAR
CLOB
CLOB
DATE
TIMESTAMP
FLOAT(n)
DOUBLE
LONG
LONGVARCHAR
LONG RAW
LONGVARBINARY
NCHAR
CHAR
NCLOB
CLOB
NUMBER
DECIMAL
NUMBER (p, s)
DECIMAL
NVARCHAR2
VARCHAR
RAW
VARBINARY
TIMESTAMP2
TIMESTAMP
TIMESTAMP WITH LOCAL TIME ZONE2
TIMESTAMP
TIMESTAMP WITH TIME ZONE2
TIMESTAMP
UROWID2
VARCHAR
VARCHAR22
VARCHAR
XMLType2
CLOB

1 Oracle 10g でのみサポートされる。

2 Oracle 9i 以上でのみサポートされる。

XMLType データ型の詳細については、「返される XML データとその挿入/更新」を参照してください。getTypeInfo() メソッドによって返されるデータ型については、「getTypeInfo」を参照してください。

Oracle の日付および時刻データ型の使用

Oracle9i 以降では、日付および時刻のデータ型である TIMESTAMP、TIMESTAMP WITH LOCAL TIME ZONE、および TIMESTAMP WITH TIME ZONE がサポートされます。Oracle ドライバがこれらのデータ型をどのようにサポートしているかを理解するには、まず、Oracle ドライバが Oracle の日付および時刻のセッション パラメータに割り当てている値を理解しておく必要があります。

日付および時刻のセッション パラメータ

接続時には、Oracle ドライバが以下の日付および時刻のセッション パラメータを設定します。

セッション パラメータ
説明
TIME_ZONE
Oracle セッションのタイム ゾーン。JVM から報告された現在のタイム ゾーンに設定される。
NLS_TIMESTAMP_FORMAT
デフォルトのタイムスタンプの形式。Oracle ドライバは JDBC タイムスタンプ エスケープ形式を使用する。
YYYY-MM_DD HH24:MI:SS.FF
NLS_TIMESTAMP_TZ_FORMAT
タイム ゾーンを含むタイムスタンプのデフォルトの形式。Oracle ドライバは、タイム ゾーン フィールドが付加された JDBC タイムスタンプ エスケープ形式を使用する。
YYYY-MM_DD HH24:MI:SS.FF TZH:TZM

TIMESTAMP データ型

Oracle の TIMESTAMP データ型は JDBC の TIMESTAMP データ型にマップされます。

TIMESTAMP WITH LOCAL TIME ZONE データ型

Oracle の TIMESTAMP WITH LOCAL TIME ZONE データ型は TIMESTAMP JDBC データ型にマップされます。

TIMESTAMP WITH LOCAL TIME ZONE のカラムを取得する場合、ユーザに返される値は TIME_ZONE セッション パラメータで指定されるタイム ゾーンに変換されます。

TIMESTAMP WITH LOCAL TIME ZONE のカラムを設定する場合、

TIMESTAMP WITH TIME ZONE データ型

デフォルトでは、Oracle の TIMESTAMP WITH TIME ZONE データ型は VARCHAR JDBC データ型にマップされます。

TIMESTAMP WITH TIME ZONE 値を文字列として取得する (たとえば、resultSet.getString を使用する) 場合、その値は、タイム ゾーン情報を含むタイムスタンプの文字列表現として返されます。文字列表現の形式は次のとおりです。

'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM'

各要素の説明は次のとおりです。

データベースに格納されたタイム ゾーン情報は、データがタイムスタンプに変換されるときに失われるため、デフォルトでは、TIMESTAMP WITH TIME ZONE 値をタイムスタンプとして取得する (たとえば、resultSet.getTimeStamp を使用する) ことはサポートされていません。既存のアプリケーションとの下位互換性を保つために、FetchTSWTZasTimestamp プロパティを使用して、TIMESTAMP WITH TIME ZONE 値をタイムスタンプとして返すことができます。FetchTSWTSasTimestamp プロパティのデフォルト値は false です。false の場合は TIMESTAMP WITH TIME ZONE 値をタイムスタンプとして取得できません。

TIMESTAMP WITH TIME ZONE のカラムを設定する場合、

 


返される XML データとその挿入/更新

Oracle 9i 以上の場合、Oracle ドライバは Oracle XMLType データ型をサポートします。Oracle の XMLType データ型は JDBC CLOB データ型にマップされます。

返される XML データ

ドライバは XML データを文字データとして返すことができます。たとえば、あるデータベース テーブルを次のように定義したとします。

CREATE TABLE xmlTable (id int, xmlCol XMLType NOT NULL)

ドライバは以下のコードを使用して、XML データを文字データとして返すことができます。

String sql="SELECT xmlCol FROM xmlTable"; 
ResultSet rs=stmt.executeQuery(sql)
String charXML=rs.getString(1)

結果セット カラムは、カラム型の CLOB で表現され、カラム型名は xmlType となります。

アプリケーションで次のメソッドを使用することで、XML カラムに文字データとして格納されているデータを返すことができます。

ResultSet.getString()
ResultSet.getCharacterStream()
ResultSet.getClob()
CallableStatement.getString()
CallableStatement.getClob()

データベース サーバから返された XML データは、データベース サーバで使用する文字セット エンコーディングから、UTF-16 Java Stirng エンコーディングに変換されます。

アプリケーションで次のメソッドを使用することで、XML カラムに ASCII データとして格納されているデータを返すことができます。

ResultSet.getAsciiStream()

データベース サーバから返された XML データは、データベース サーバで使用する文字セット エンコーディングから、ISO-8859-1 (latin1) エンコーディングに変換されます。

注意 : getAsciiStream() メソッドを使用して変換を行う場合に、コンテンツ エンコーディングがデフォルト エンコーディングではなく、コンテンツ エンティティを指定する XML 宣言が含まれていないと、整形式でない XML が作成される場合があります。アプリケーションで整形式の XML が必要になる場合は、getAsciiStream() メソッドを使用しないようにしてください。

XML データの挿入と更新

XMLType カラムを挿入または更新する場合、挿入または更新されるカラムは XMLType データ型でなければなりません。Oracle には、XMLType データ オブジェクトを作成するための xmltype() 関数があります。xmltype() 関数の xmlData 引数は、文字列リテラルまたはパラメータ マーカとして指定できます。パラメータ マーカとして指定された場合、パラメータ値は以下のメソッドを使用して設定できます。

PreparedStatement.setString()
PreparedStatement.setCharacterStream()
PreparedStatement.setClob()
PreparedStatement.setAsciiStream()

データの文字表現がデータベース サーバで使用する XML 文字セットに変換され、変換後の XML データがサーバに送信されます。XML 処理手順が、ドライバによって解析されたり削除されたりすることはありません。

次のコードでは、xmltype() 関数の xmlData 引数として文字列リテラルを指定した文を使用して、XMLType カラムにデータを挿入します。

//  xml データをリテラルとして挿入
String sql = "INSERT INTO XMLTable VALUES (1, xmltype('" +
"<emp><empNo>123</empNo><empName>Mark</empName></emp>'))";

Statement stmt = con.createStatement();
stmt.executeUpdate(sql);
The following code inserts data into an XMLType column using a prepared statement:
// xml データを String パラメータとして挿入
String xmlStr = "<emp><empNo>234</empNo><empName>Trish</empName></emp>";
String sql = "INSERT INTO XMLTable VALUES (?, xmltype(?))";

PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setInt(1, 2);
prepStmt.setString(2, xmlStr);
prepStmt.executeUpdate();

REF CURSOR データ型

REF CURSOR は、カーソル変数用の Oracle データ型です。JDBC はカーソル変数データ型をサポートしていないため、Oracle ドライバでは REF CURSOR 出力パラメータを返し、値を結果セットとしてアプリケーションに返します。Oracle ドライバは、REF CURSOR データを自動的に結果セットに変換します。結果セットは、getResultSet または getMoreResults で返されます。REF CURSOR データが出力パラメータではなく結果セットとして返されるため、DatabaseMetaData.getProcedureColumns() 呼び出しの結果には REF CURSOR 出力パラメータは含まれません。

作成するアプリケーションでは、以下の例に示すように、REF CURSOR のパラメータ マーカは省略し、REF CURSOR の出力パラメータを宣言しないようにしてください。これらの例では、次のストアド プロシージャ定義を参照しています。

CREATE PACKAGE foo_pkg AS
TYPE EmpCurTyp IS REF CURSOR RETURN fooTbl%ROWTYPE;
PROCEDURE selectEmployeeManager(empId IN INT, empCursor OUT EmpCurTyp,
mgrCursor out EmpCurTyp);
FUNCTION selectEmployee2 (empId IN INT) return EmpCurTyp;
END foo_pkg;
例 1 : 単一の REF CURSOR を返すストアド プロシージャを呼び出す
// 入力パラメータを受け付け、戻り値として REF CURSOR を
// 返す関数を呼び出す。
// refcursor 戻り値パラメータのプレースホルダは省略する。
// REF CURSOR は結果セットとして返される
sql = "{call foo_pkg.selectEmployee2(?)}";

callStmt = con.prepareCall(sql);
callStmt.setInt(1, 2);
moreResults = callStmt.execute();

while (true) {

if (moreResults) {

// REF CURSOR を表す結果セットを取得する
resultSet = callStmt.getResultSet();
displayResults(resultSet);

resultSet.close();
resultSet = null;

System.out.println();
}
else {

updateCnt = callStmt.getUpdateCount();
if (updateCnt == -1) {
break;
}
System.out.println("Update Count: " + updateCnt);
}
moreResults = callStmt.getMoreResults();
}
例 2 : 複数の REF CURSOR を返すストアド プロシージャを呼び出す
// 入力パラメータを受け付け、2 つの REF CURSOR を返す
// ストアド プロシージャを呼び出す。
// REF CURSOR パラメータのプレースホルダは省略する。
// REF CURSOR は結果セットとして返される
sql = "{call foo_pkg.selectEmployeeManager(?)}";

callStmt = con.prepareCall(sql);
callStmt.setInt(1, 2);
moreResults = callStmt.execute();

while (true) {

if (moreResults) {

// REF CURSOR を表す結果セットを取得する
resultSet = callStmt.getResultSet();
displayResults(resultSet);
resultSet.close();
}
else {

updateCnt = callStmt.getUpdateCount();
if (updateCnt == -1) {
break;
}
}

moreResults = callStmt.getMoreResults();
}

 


認証

認証では、ユーザの識別情報を保護することで、悪意のあるハッカーが転送中のユーザ資格を傍受できないようになっています。概要については「認証」を参照してください。

Oracle ドライバでは、以下の認証方法がサポートされます。

NTLM 認証 (Windows クライアントの認証のみを提供) を除いて、ドライバがサポート対象のプラットフォームで実行されている場合、これらの認証方法で認証が提供されます。

AuthenticationMethod 接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを指定するために使用します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。

AuthenticationMethod プロパティの使用

AuthenticationMethod 接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを指定するために使用します。AuthenticationMethod=auto (デフォルト) の場合、ドライバは以下の条件に基づいて、接続を確立する際にユーザ ID/パスワード認証、Kerberos 認証、または NTLM 認証を使用します。

AuthenticationMethod=kerberos に設定すると、接続を確立する際に Kerberos 認証が使用されます。User プロパティと Password プロパティに指定された値は無視されます。

AuthenticationMethod=kerberosUIDPassword に設定すると、接続を確立する際に最初に Kerberos 認証が使用されます。次に、ユーザ ID/パスワード認証を使用してユーザを再認証します。User プロパティはユーザ ID を提供します。Password プロパティはパスワードを提供します。ユーザ ID とパスワードが指定されていない場合は、ドライバから例外が送出されます。Kerberos 認証かユーザ ID/パスワード認証が失敗した場合、接続の試行は失敗し、ドライバから例外が送出されます。

AuthenticationMethod=ntlm の場合は、ドライバが NTLM 認証に必要な DLL をロードできる場合、ドライバは接続を確立する際に NTLM 認証を使用します。DLL をロードできない場合は、ドライバから例外が送出されます。User プロパティと Password プロパティに指定された値は無視されます。

AuthenticationMethod=client に設定すると、接続を確立する際にクライアント認証が使用されます。クライアントでのみ認証が実施され、Oracle データベース サーバによる追加の認証は提供されません。User プロパティと Password プロパティに指定された値は無視されます。

AuthenticationMethod=userIdPassword に設定すると、接続を確立する際にユーザ ID/パスワード認証が使用されます。User プロパティはユーザ ID を提供します。Password プロパティはパスワードを提供します。ユーザ ID が指定されていない場合は、ドライバから例外が送出される。

ユーザ ID/パスワード認証のコンフィグレーション

  1. AuthenticationMethod プロパティを auto または userIdPassword に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. User プロパティにユーザ ID を設定します。
  3. Password プロパティにパスワードを設定します。

Kerberos 認証のコンフィグレーション

この節では、Oracle ドライバに Kerberos 認証をコンフィグレーションする場合の要件と手順について説明します。

製品要件

ドライバに Kerberos 認証をコンフィグレーションする前に、使用している環境が 表 6-4 の要件を満たしていることを確認してください。

表 6-4 Oracle ドライバに Kerberos 認証をコンフィグレーションする場合の要件
コンポーネント
要件
データベース サーバ
データベース サーバはクライアントを管理している同じドメイン コントローラによって管理され、以下のいずれかのデータベースを実行している必要がある。
  • Oracle 10g (R1 および R2)
  • Oracle 9i (R2)
Kerberos サーバ
Kerberos サーバは、認証に使用するユーザ ID を管理する。Kerberos KDC も Kerberos サーバで管理する。
ネットワーク認証を、以下のいずれかの方法で提供する必要がある。
  • 以下のいずれかのオペレーティング システム上の Windows Active Directory
    • Windows Server 2003
    • Windows 2000 Server Service Pack 3 以上
  • MIT Kerberos 1.4.2 以上
クライアント
クライアントはデータベース サーバを管理している同じドメイン コントローラによって管理される必要がある。また、J2SE 1.4.2 以上がインストールされている必要がある。

ドライバをコンフィグレーションする

インストール時に、Kerberos 認証で必要となる以下のファイルが WebLogic Server インストール ディレクトリの server/lib サブディレクトリにインストールされます。

ドライバをコンフィグレーションするには
  1. ドライバの AuthenticationMethod プロパティを auto (デフォルト) または kerberos に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. krb5.conf ファイルをテキスト エディタで編集するか、java.security.krb5.realm and java.security.krb5.kdc システム プロパティを指定して、Kerberos レルム名とその KDC 名を指定します。
  3. 注意 : Windows Active Directory では、Kerberos レルム名は Windows ドメイン名、KDC 名は Windows ドメイン コントローラ名となります。

たとえば、Kerberos レルム名が XYZ.COM、KDC 名が kdc1 である場合、krb5.conf ファイルは次のようになります。

[libdefaults] 
default_realm = XYZ.COM

[realms]
XYZ.COM = {
kdc = kdc1
}

krb5.conf ファイルに有効な Kerberos レルム名と KDC 名が指定されていない場合は、次の例外が送出されます。

Message:[BEA][Oracle JDBC Driver]Could not establish a connection using integrated security: No valid credentials provided

java.security.krb5.conf システム プロパティで別の Kerberos コンフィグレーション ファイルをロードするように設定されていない限り、WebLogic Server と一緒にインストールされた krb5.conf ファイルが自動的にロードされます。

  1. Java 2 プラットフォームのセキュリティ マネージャで Kerberos 認証を使用する場合は、アプリケーションとドライバにセキュリティ パーミッションを付与する必要があります。詳細については、「Kerberos 認証のためのパーミッション」を参照してください。

Kerberos 認証のユーザ資格の指定 (資格の委託)

Kerberos 認証を使用する場合、デフォルトでは、オペレーティング システムに保持されているユーザ ID とパスワードを使用して、データベースにアクセスするユーザの認証が行われます。オペレーティング システムで使用されているユーザ名とパスワードをデータベースでも使用できるため、有効なオペレーティング システム アカウントにログインしているユーザであれば、ユーザ名とパスワードを入力せずにデータベースにログインできます。

オペレーティング システムのユーザ名とパスワード以外のユーザ資格セットを使用したい場合もあります。たとえば、アプリケーション サーバや Web サーバの多くは、サーバ ユーザとしてではなく、アプリケーションが実行されているマシンにログオンしたクライアント ユーザの代理として処理を実行します。

オペレーティング システムのユーザ名とパスワード以外のユーザ資格セットを使用する場合は、次のようなコードをアプリケーションに追加し、認証に使用する javax.security.auth.Subject を取得してドライバに渡します。

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import java.sql.*;

// ここでは、認証に使用する javax.security.auth.Subject
// インスタンスを作成する。LoginContext を使用して
// Subject を取得する方法の詳細については、JAAS (Authentication and
// Authorization Service) のドキュメントを参照。

LoginContext lc = null;
Subject subject = null;

try {

lc = new LoginContext("JaasSample", new TextCallbackHandler());
lc.login();
subject = lc.getSubject();
}
catch (Exception le) {
... // ログイン エラーを表示する。
}

// このアプリケーションは、ドライバ コードをサブジェクトとして実行することで、
// javax.security.auth.Subject をドライバに渡す。

Connection con =
(Connection) Subject.doAs(subject, new PrivilegedExceptionAction() {

public Object run() {

Connection con = null;
try {

Class.forName("com.ddtek.jdbc.oracle.OracleDriver");
String url = "jdbc:bea:oracle://myServer:1521";
con = DriverManager.getConnection(url);
}
catch (Exception except) {

... // 接続エラーをログに記録する。
Return null;
}

return con;
}
});

// これで、このアプリケーションで使用する接続がサブジェクトを使用して
// 認証されたことになる。これにより、アプリケーションで接続を使用できるようになる。
Statement stmt = con.createStatement();
String sql = "select * from employee";
ResultSet rs = stmt.executeQuery(sql);

... // 結果に基づいて処理を行う。

Kerberos チケット認可チケットの取得

アプリケーション ユーザが Kerberos 認証を使用する場合は、まず Kerberos サーバから Kerberos チケット認可チケット (TGT) を取得する必要があります。Kerberos サーバでは、TGT に格納されている資格を使用して、ユーザの識別情報を検証し、サービスへのアクセスを制御します。

Windows クライアント上のアプリケーションから Kerberos 認証を使用し、Kerberos 認証が Windows Active Directory から提供されている場合は、アプリケーション ユーザが Kerberos サーバにログオンして明示的に TGT を取得する必要はありません。ユーザの TGT は、Windows Active Directory によって自動的に取得されます。

アプリケーション ユーザは以下の場合に TGT を明示的に取得する必要があります。

ユーザが TGT を明示的に取得するには、kinit コマンドを使用して Kerberos サーバにログインする必要があります。たとえば、次に示すコマンドは、有効期間が 10 時間で 5 日間更新可能な TGT をサーバに要求しています。

kinit -l 10h -r 5d user

ここで、user はアプリケーション ユーザです。

kinit コマンドの使用とユーザの TGT の取得については、Kerberos ドキュメントを参照してください。

NTLM 認証のコンフィグレーション

この節では、Oracle ドライバに NTLM 認証をコンフィグレーションする場合の要件と手順について説明します。

製品要件

ドライバに NTLM 認証をコンフィグレーションする前に、使用している環境が 表 6-5 の要件を満たしていることを確認してください。

表 6-5 Oracle ドライバに NTLM 認証をコンフィグレーションする場合の要件
コンポーネント
要件
データベース サーバ
データベース サーバはクライアントを管理している同じドメイン コントローラによって管理され、以下のいずれかのデータベースを実行している必要がある。
  • Oracle 10g (R1 および R2)
  • Oracle 9i (R1 および R2)
ドメイン コントローラ
ドメイン コントローラはデータベース サーバとクライアントの両方を管理している必要がある。以下のいずれかのオペレーティング システム上の NTLM がネットワーク認証を提供する必要がある。
  • Windows Server 2003
  • Windows 2000 Server Service Pack 3 以上
クライアント
クライアントはデータベース サーバを管理している同じドメイン コントローラによって管理され、以下のいずれかのオペレーティング システムで実行されている必要がある。
  • Windows Vista
  • Windows Server 2003
  • Windows XP Service Pack 1 以上
  • Windows 2000 Service Pack 4 以上
  • Windows NT 4.0
また、J2SE 1.3 以上がインストールされている必要がある。

ドライバをコンフィグレーションする

WebLogic Type 4 JDBC ドライバは以下の NTLM 認証 DLL を提供しています。

xx は 2 桁の数字です。

DLL は WL_HOME/server/lib ディレクトリにあります (WL_HOME は WebLogic Server のインストール先ディレクトリ)。NTLM 認証を使用するアプリケーションが 32 ビット JVM で実行されている場合は、自動的に DDJDBCAuthxx.dll が使用されます。同様に、アプリケーションが 64 ビット JVM で実行されている場合は、DDJDBC64Authxx.dll または DDJDBCx64Authxx.dll が使用されます。

ドライバをコンフィグレーションするには
  1. AuthenticationMethod プロパティを auto または ntlm に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. デフォルトでは、ドライバは PATH 環境変数で定義されている Windows システム パスのディレクトリで NTLM 認証 DLL を検索する。Windows システム パスにないディレクトリにドライバをインストールした場合は、以下のいずれかの手順を行ってドライバが DLL をロードできるようにします。
    • Windows システム パスに WL_HOME/server/lib ディレクトリを追加する。WL_HOME は WebLogic Server のインストール先ディレクトリ。
    • WL_HOME/server/lib から Windows システム パス上のディレクトリに NTLM 認証 DLL をコピーする。WL_HOME は WebLogic Server のインストール先ディレクトリ。
    • LoadLibraryPath プロパティを指定して、NTLM 認証 DLL の場所を指定する。たとえば、Windows システム パスにない「DataDirect」というディレクトリにドライバをインストールした場合、LoadLibraryPath プロパティを使用して NTLM 認証 DLL を含むディレクトリを指定できます。
    • jdbc:datadirect:oracle://server3:1521;
      ServiceName=ORCL;LoadLibraryPath=C:\DataDirect\lib;
      User=test;Password=secret
  3. Java 2 プラットフォームのセキュリティ マネージャで NTLM 認証を使用する場合は、ドライバが接続を確立できるようにセキュリティ パーミッションを付与する必要があります。例については、「接続を確立するためのパーミッション」を参照してください。

クライアント認証のコンフィグレーション

AuthenticationMethod プロパティを client に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。

 


データの暗号化

Oracle ドライバでは、データ暗号化で SSL がサポートされます。SSL が提供する暗号化と認証によって、データの整合性を確保できます。詳細については、「ネットワーク上でのデータの暗号化」を参照してください。

SSL 暗号化用に tnsnames.ora ファイルをコンフィグレーションする方法については、「tnsnames.ora ファイルの使用」を参照してください。

注意 : ドライバが SSL 用にコンフィグレーションされているのにデータベース サーバで SSL がサポートされていないと、接続のハングが発生する可能性があります。SSL をサポートしていないサーバに接続した場合に発生する問題を回避するには、LoginTimeout プロパティを使用してログイン タイムアウトを設定する。
SSL 暗号化をコンフィグレーションするには
  1. EncryptionMethod プロパティを SSL に設定します。
  2. SSL サーバ認証に使用するトラストストア ファイルの場所とパスワードを指定します。TrustStore および TrustStorePassword プロパティ、またはそれぞれに対応する Java システム プロパティ (javax.net.ssl.trustStore および javax.net.ssl.trustStorePassword) を設定します。
  3. データベース サーバから送信された証明書を検証する場合は、ValidateServerCertificate プロパティを true に設定します。
  4. 必要に応じて、証明書の検証に使用するホスト名を HostNameInCertificate プロパティに設定します。HostNameInCertificate プロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供します。
  5. データベース サーバが SSL クライアント認証用にコンフィグレーションされている場合は、使用するキーストア情報をコンフィグレーションします。
    1. キーストア ファイルの場所とパスワードを指定します。KeyStore および KeyStorePassword プロパティ、またはそれぞれに対応する Java システム プロパティ (javax.net.ssl.keyStore および javax.net.ssl.keyStorePassword) を設定します。
    2. キーストア ファイル内のいずれかのキー エントリがパスワードで保護されている場合は、KeyPassword プロパティにキー パスワードを設定します。

 


SQL エスケープ シーケンス

Oracle ドライバでサポートされている SQL エスケープ シーケンスについては、「JDBC の SQL エスケープ シーケンス」を参照してください。

 


アイソレーション レベル

Oracle ドライバは、アイソレーション レベルとして Read Committed および Serializable をサポートしています。デフォルトは Read Committed です。

 


スクロール可能なカーソルの使用

Oracle ドライバは、スクロールセンシティブな結果セット、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。

注意 : Oracle ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。

 


バッチ挿入とバッチ更新

Oracle ドライバは、バッチ処理をサポートするための 2 つのメカニズムを備えています。

BatchPerformanceWorkaround プロパティによって、使用するバッチ メカニズムが決まります。BatchPerformanceWorkaround プロパティの値が true の場合はネイティブの Oracle バッチ メカニズムが使用されます。それ以外の場合は JDBC に準拠したメカニズムが使用されます。BatchPerformanceWorkaround プロパティのデフォルト値は false です。

 


パラメータ メタデータのサポート

Oracle ドライバでは、この節で説明するようにパラメータ メタデータを返すことができます。

Insert 文および Update 文

Oracle ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。

ここで、operator は SQL 演算子 (=、<、>、<=、>=、または <>) です。

Select 文

Oracle ドライバでは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) にパラメータを含んでいる Select 文に対してパラメータ メタデータを返すことができます。詳細な構文については、ANSI SQL リファレンスを参照してください。

以下のいずれかの条件に該当する場合は、Select 文に対してパラメータ メタデータを返すことができます。

以下の Select 文では、パラメータ メタデータを返すことができる例をさらに示しています。

   SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ?
   SELECT ... WHERE colname = (SELECT col2 FROM t2 WHERE col3 = ?)
   SELECT ... WHERE colname LIKE ?
   SELECT ... WHERE colname BETWEEN ? and ?
   SELECT ... WHERE colname IN (?, ?, ?)
   SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)

GROUP BY、HAVING、または ORDER BY を含む WHERE 句で ANSI SQL 92 エントリレベルの述語を使用する文がサポートされます。次に例を示します。

   SELECT * FROM t1 WHERE col = ?ORDER BY 1

結合がサポートされます。次に例を示します。

   SELECT * FROM t1,t2 WHERE t1.col1 = ?

完全修飾名とエリアスがサポートされます。次に例を示します。

   SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ? and B.b = ?"

精度やスケールの引数を指定しない NUMBER 型として定義されたカラムに対してパラメータ メタデータを要求した場合は、カラムの精度とスケールが不明であることを示すために精度 0、スケール 0 が返されます。

ストアド プロシージャ

Oracle ドライバでは、ストアド プロシージャの引数に対してパラメータ メタデータを返すことはできません。

 


ResultSet メタデータのサポート

アプリケーションでテーブル名情報が必要な場合、Oracle ドライバは Select 文の ResultSet メタデータに含めてテーブル名情報を返すことができます。ResultSetMetaDataOptions プロパティを 1 に設定した場合、ResultSetMetaData.getTableName() メソッドが呼び出されたとき、Oracle ドライバは結果セット内の各カラムの正しいテーブル名を決定する追加の処理を実行します。それ以外の場合、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。

ResultSetMetaDataOptions プロパティが 1 に設定されていて、ResultSetMetaData.getTableName() メソッドが呼び出された場合、Oracle ドライバが返すテーブル名情報は、結果セット内のカラムがデータベース テーブル内のカラムにマップされているかどうかによって異なります。結果セット内の各カラムがデータベース テーブル内のカラムにマップされている場合、Oracle ドライバはそのカラムに関連付けられているテーブル名を返します。結果セット内の各カラムがテーブル内のカラムにマップされていない場合 (集約やリテラルなど)、Oracle ドライバは空の文字列を返します。

ResultSet メタデータが返される Select 文には、エリアス、結合、および完全修飾名を含めることができます。以下のクエリは、ResultSetMetaData.getTableName() メソッドによって Select リスト内の各カラムの正しいテーブル名が返される、Select 文の例です。

   SELECT id, name FROM Employee
   SELECT E.id, E.name FROM Employee E 
   SELECT E.id, E.name AS EmployeeName FROM Employee E
   SELECT E.id, E.name, I.location, I.phone FROM Employee E, EmployeeInfo I
      WHERE E.id = I.id
   SELECT id, name, location, phone FROM Employee, EmployeeInfo WHERE id =
      empId
   SELECT Employee.id, Employee.name, EmployeeInfo.location, 
      EmployeeInfo.phone FROM Employee, EmployeeInfo WHERE Employee.id =
      EmployeeInfo.id

生成されたカラムの場合、ドライバによって返されるテーブル名は空の文字列です。以下のクエリは、生成されたカラム (「upper」という名前のカラム) を含む結果セットを返す Select 文の例です。

   SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)} 
      AS upper FROM Employee E

Oracle ドライバは、ResultSetMetaData.getSchemaName() メソッドと ResultSetMetaData.getCatalogName() メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます (ドライバがこの情報を判別できる場合)。たとえば、以下の文の場合、Oracle ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。

   SELECT * FROM test.test1.foo 

テーブル名、スキーマ名、およびカタログ名の情報を返すために必要な追加の処理は、ResultSetMetaData.getTableName()ResultSetMetaData.getSchemaName()、または ResultSetMetaData.getCatalogName() メソッドが呼び出された場合にのみ実行されます。

 


RETURNING 句を使用した Insert/Update/Delete 文の実行

Oracle 8.1.6 以降の場合、Oracle ドライバでは RETURNING 句を使用した Insert、Update、および Delete 文の実行がサポートされます。アプリケーションは、ある行で挿入、更新、または削除された値を変数に入れて返すことができるので、この情報を返すために追加の文を実行する必要がありません。

ドライバは RETURNING 句で指定された各カラムの値を出力パラメータとして返します。アプリケーションでは CallableStatement オブジェクトを使用して、RETURNING 句と一緒に Insert、Update、または Delete 文を実行する必要があります。また、CallableStatement.registerOutParameter() メソッドを使用して、各戻り値のデータ型を指定する必要があります。登録する戻り値のデータ型はデータベース カラムのデータ型と一致していなければなりません。たとえば、データベース カラムで JDBC の CHAR 型が定義されている場合、そのカラムの戻り値のデータ型は Types.CHAR として登録する必要があります。

RETURNING 句では単一行または複数行を返すことができます。以下のサンプルで示すように、カラムの戻り値を取得する際にアプリケーションで使用されるメソッドは、RETURNING 句が返す行の数によって異なります。

サンプル A : 単一行の Insert/Update/Delete 文から結果値を取得する

次のように定義されたテーブルがあるとします。

CREATE TABLE employees (id int, name varchar(30))

次のように Insert 文と RETURNING 句を使用すると、Smith の更新された ID が返されます。

String sql = "INSERT INTO employees VALUES(100, 'Smith') 
RETURNING id INTO ?";
CallableStatement callStmt = con.prepareCall(sql);
callStmt.registerOutParameter(1, Types.INTEGER);
int updateCnt = callStmt.executeUpdate();
int newId = callStmt.getInt(1);
System.out.println("The id of the inserted row is: " + newId);

データベース サーバは要求されたカラムの単一の結果値を返します。アプリケーションは getInt()、getString()、getObject() などの CallableStatement メソッドを使用して結果値を取得できます。getObject() から返されるオブジェクトの型は、返されるカラムについての registerOutParameter() 呼び出しで指定されたデータ型に基づきます。JDBC のデータ型と Java オブジェクトのマッピングの詳細については、JDBC 仕様を参照してください。

サンプル B : 複数行の Insert/Update/Delete 文から結果値を取得する

次のように定義されたテーブルがあるとします。

CREATE TABLE employees (id int, name varchar(30))

次のように Update 文と RETURNING 句を使用すると、ID 値が更新されたすべての行が返されます。

String sql = "UPDATE employees SET id = id + 1000" +
"RETURNING id INTO ?";
CallableStatement callStmt = con.prepareCall(sql);
callStmt.registerOutParameter(1, Types.INTEGER);
int updateCnt = callStmt.executeUpdate();
Integer[] newIds = (int []) callStmt.getArray(1).getArray();
for (int index = 0; index < newIds.length; index++) {
System.out.println("New Id value: " + newIds[index]);
}

データベース サーバは要求されたカラムの複数の結果値を返します。アプリケーションは CallableStatement.getArray() を使用して結果値を取得できます。

注意 : CallableStatement.getxxx() メソッドを使用して結果値を取得する場合、ドライバは要求されたカラムの最初の結果値のみを返します。

返される配列のデータ型や配列要素のデータ型は、返されるカラムについての registerOutParameter() 呼び出しで指定されたデータ型と一致しています。配列の要素は 1 つのオブジェクト型になります。たとえば、アプリケーションで戻り値のデータ型を Types.INTEGER として登録した場合、配列の要素は Integer オブジェクトとして返されます。CallableStatement.getArray() メソッドで生成されるのは前方専用の結果セットで、結果セットの同時実効性は読み取り専用です。この結果セットには 1 つの列が格納され、配列内の各エントリごとに 1 つの行があります。

 


Rowset のサポート

Oracle ドライバは、以下のような RowSet インタフェースの JSR 114 実装をサポートします。

ドライバで RowSet を使用するには、J2SE 1.4 以上が必要です。

JSR 114 の詳細については、http://www.jcp.org/en/jsr/detail?id=114 を参照してください。

 


自動生成キーのサポート

Oracle ドライバは自動生成キーの値の取得をサポートします。Oracle ドライバから返される自動生成キーは、ROWID 擬似カラムの値です。

自動生成キーの値を返すことができるのは、アプリケーションで Insert 文を実行するときです。値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。

自動生成キーの値は、Statement.getGeneratedKeys メソッドを使用して取得できます。このメソッドは、各自動生成キーのカラムとともに ResultSet オブジェクトを返します。

 


サーバ結果セットのキャッシング

Oracle ドライバでは、サーバの結果セットのキャッシングがサポートされるようになりました。クエリ結果をメモリにキャッシュできる機能で、Oracle 11g で導入されたものです。クエリ結果をメモリにキャッシュするよう指定するには、クエリで結果セット キャッシュのヒントを使用します。次に例を示します。

SELECT /*+ result_cache */ * FROM employees

サーバの結果セットのキャッシングの詳細については、Oracle 11g のドキュメントを参照してください。

 


XQuery のサポート

Oracle ドライバは Oracle 11g でサポートされている XQuery 関数をサポートします。

Oracle の XQuery サポートの詳細については、Oracle のドキュメントを参照してください。


ページの先頭       前  次