ナビゲーションをスキップ

WebLogic Type 4 JDBC ドライバ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

Oracle ドライバ

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

 


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

BEA WebLogic Type 4 JDBC Oracle ドライバ (「Oracle ドライバ」) は、Oracle 8i R3 (8.1.7)、Oracle9i R1 および R2、Oracle10g をサポートします。

 


Oracle ドライバ クラス

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

XA : weblogic.jdbcx.oracle.OracleDataSource

非 XA : weblogic.jdbc.oracle.OracleDriver

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

 


Oracle URL

Oracle データベースに接続するには、次の形式の URL を使用します。

jdbc:bea:oracle://dbserver:port

Oracle ドライバでも、接続のフェイルオーバの AlternateServers オプションがサポートされています。「Connection Failover with AlternateServers」を参照してください。

 


Oracle 接続プロパティ

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

property=value

注意 : すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。

表 6-1 Oracle の接続文字列のプロパティ

プロパティ

説明

BatchPerformanceWorkaround

省略可能

true または false。バッチ処理の実行に使用されるメソッドを決定する。

true に設定すると、ネイティブの Oracle バッチ メカニズムが使用される。ネイティブの Oracle バッチ メカニズムでは、バッチ内の文やパラメータごとの更新件数は返されない。このため、ドライバは更新件数配列の各エントリの SUCCESS_NO_INFO (-2) の値を返す。

false に設定すると、JDBC 3.0 に準拠したバッチ メカニズムが使用される。アプリケーションが更新件数情報を受信できるようになっている場合は、このプロパティを true に設定することでパフォーマンスをかなり向上できる。デフォルトは false。

詳細については、「バッチ挿入とバッチ更新」を参照。

CatalogIncludesSynonyms

非推奨

このプロパティは、既存のデータ ソースとの互換性を確保するためのものだが、結果セットにシノニムを含めるにはこのプロパティの代わりに CatalogOptions プロパティを使用することが推奨される。

CatalogOptions

省略可能

{0 | 1 | 2 | 3}. カタログ関数から返される結果セットに含める情報のタイプを指定する。

0 に設定すると、結果セットにはデフォルトの DatabaseMetaData メソッドの結果が含まれる。

1 に設定すると、結果セットには DatabaseMetaData の getTables メソッドおよび getColumns メソッドから返されるアノテーション情報が含まれる。

2 に設定すると、結果セットには DatabaseMetaData の getColumns、getProcedures、getProcedureColumns、および getIndexInfo の各メソッドから返されるシノニムが含まれる。

3 に設定すると、結果セットにはアノテーション情報およびシノニムが含まれる (これらを返すメソッドは、値 1 および値 2 を設定した場合と同様)。

デフォルトは 2。

ConnectionRetryCount

省略可能

ドライバがデータベース サーバ (プライマリおよび代替) への接続を確立できるまでに、データベース サーバのリストを再試行する回数。有効な値は、0 または正の整数。

0 に設定すると、リスト内のデータベース サーバへの試行が一巡して接続が確立できなかった場合でも接続は再試行されない。

デフォルトは 0。

プロパティを以下のように指定した場合の例を示す。

AlternateServers=(server2:1521,server3:1521,
server4:1521)

および

ConnectionRetryCount=1

この設定では、リスト内のデータベース サーバへの試行が一巡しても接続が確立できなかった場合は、もう一巡だけ接続が再試行される。

アプリケーションがログイン タイムアウト値を (たとえば DataSource.loginTimeout を使用して) 設定している場合は、このプロパティよりもログイン タイムアウト値が優先される。つまり、ログイン タイムアウトの期限が切れると、代替サーバへのすべての接続試行が停止する。

このプロパティとともに LoadBalancing プロパティを指定すると、ドライバはリスト内のサーバ (プライマリおよび代替) に毎回異なる順序で接続を試行する。

ConnectionRetryDelay プロパティは、再試行間の待機間隔を秒単位で指定する。

プライマリ サーバと代替サーバの接続情報の指定については、「Oracle ドライバによる接続のフェイルオーバ」を参照。

ConnectionRetryDelay

省略可能

ConnectionRetryCount に正の整数が設定されている場合に、データベース サーバ (プライマリおよび代替) のリストへの接続を再試行する前にドライバが待機する秒数。

デフォルトは 3。

プロパティを以下のように指定した場合の例を示す。

AlternateServers=(server2:1521,server3:1521,
server4:1521)

および

ConnectionRetryCount=2

および

ConnectionRetryDelay=3

この設定では、リスト内のデータベース サーバへの試行が一巡しても接続が確立できなかった場合は、接続があと二巡再試行される。ドライバは、1 回目の再試行と 2 回目の再試行の間に 3 秒間待機する。

このプロパティとともに LoadBalancing プロパティを指定すると、ドライバはリスト内のサーバ (プライマリおよび代替) に毎回異なる順序で接続を試行する。

ConnectionRetryCount プロパティは、ドライバが代替サーバのリスト内のすべてのサーバに接続を試行する回数を指定する。

プライマリ サーバと代替サーバの接続情報の指定については、「Oracle ドライバによる接続のフェイルオーバ」を参照。

FetchTSWTZasTimestamp

省略可能

true または false。true に設定すると、TIMESTAMP WITH TIME ZONE データ型 (Oracle9i 以降) のカラム値を JDBC TIMESTAMP データ型として取得できる。

false に設定すると、TIMESTAMP WITH TIME ZONE データ型のカラム値は文字列として取得しなければならない。

デフォルトは false。

詳細については、「TIMESTAMP WITH TIME ZONE データ型」を参照。

InsensitiveResultSetBufferSize

省略可能

-1、0、または x。ドライバがインセンシティブな結果セット データのキャッシュに使用するメモリの量を指定する。以下のいずれかの値を指定する必要がある。

-1 に設定すると、ドライバはすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セットのサイズが利用できるメモリ容量を超えると、OutOfMemoryException 例外が生成される。結果セット データをディスクに書き込む必要がないため、データがより効率的に処理される。

0 に設定すると、ドライバは 2GB を限度としてすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セットのサイズが利用できるメモリ容量を超えると、結果セットがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。

x (正の整数) に設定すると、インセンシティブな結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) を指定したことになり、ドライバはすべての結果セット データをメモリにキャッシュする。結果セットのサイズがバッファ サイズを超えると、結果セットがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。バッファ サイズとして 2 の累乗を指定すると、メモリの使用がより効率的になる。

デフォルトは 2048 (KB)。

LoginTimeout

省略可能

データベース接続の作成の試行を待機する最大時間 (秒単位)。値 0 は、デフォルトのシステム タイムアウトがある場合はそのタイムアウトを使用し、それ以外の場合はタイムアウトがないことを指定する。

Password

Oracle データベースに接続する場合に使用するパスワード。大文字と小文字は区別されない。パスワードは、データベースでセキュリティが有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してパスワードを取得する。

PortNumber

省略可能

Oracle データベース サーバ上で動作する Oracle リスナの TCP ポート。デフォルトは 1521。これは、Oracle データベース ソフトウェアをインストールするときの Oracle のデフォルトのポート番号。

tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。tnsnames.ora ファイルを使用して Oracle リスナのポート番号を指定する方法については、「tnsnames.ora ファイルの使用」を参照。

ServerName

省略可能

Oracle サーバの IP アドレスまたはサーバ名 (ネットワークが名前付きのサーバをサポートしている場合) を指定する。たとえば、122.23.15.12 または OracleAppServer。

tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。

tnsnames.ora ファイルを使用してサーバ名を指定する方法については、「tnsnames.ora ファイルの使用」を参照。

ServerType

省略可能

Shared または Dedicated。接続を確立するにあたって、UNIX の場合は共有サーバ プロセスと専用サーバ プロセス、Windows の場合は共有サーバ スレッドと専用サーバ スレッドのどちらを使用するかを指定する。

Shared に設定すると、使用するサーバ プロセスはプールから取得される。クライアントとサーバのソケット接続は、サーバのディスパッチ プロセスに対して確立される。この設定では、接続の数よりも少ないプロセスで済むためサーバ リソースを節約できる。この値は、サーバにおいて数多くのユーザをより少ないサーバ リソースで処理しなければならない場合に使用する。

Dedicated に設定すると、その接続専用のサーバ プロセスが作成される。接続が切断されると、プロセス (UNIX) またはスレッド (Windows) も終了する。ソケット接続は、アプリケーションと専用サーバ プロセス (またはスレッド) との間で直接確立される。UNIX サーバへの接続では、専用サーバ プロセスを使用するとパフォーマンスがかなり向上するが、より多くのサーバ リソースを使用することになる。Windows サーバへの接続では、リソースの使用量はそれほど多くない。ユーザが少ないバッチ環境であればこの値を使用する。

このプロパティを指定しない場合、ドライバはサーバのサーバ タイプ セットを使用する。

tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。

tnsnames.ora ファイルを使用してサーバ タイプを指定する方法については、「tnsnames.ora ファイルの使用」を参照。

ServiceName

省略可能

接続に使用するデータベースを指定するデータベース サービス名。サービス名は、グローバル データベース名を表す文字列。通常は、データベース名とドメイン名を含む。たとえば、以下のようになる。

sales.us.acme.com

このプロパティは、特定の Oracle インスタンスへの接続ではなく、Oracle Real Application Clusters (RAC) システムへの接続を指定する場合に便利。これは、RAC システムのノードでは共通のサービス名が共有されるため。

tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。

tnsnames.ora ファイルを使用してデータベースのサービス名を指定する方法については、「tnsnames.ora ファイルの使用」を参照。

SID

省略可能

サーバ上で動作する Oracle データベースのインスタンスを表す Oracle システム識別子。このプロパティは、ServiceName プロパティとは相互排他的である。

デフォルトは ORCL。これは、Oracle データベースのインストール時にコンフィグレーションされるデフォルトの SID。

tnsnames.ora ファイルを使用して接続情報を提供する場合は、このプロパティを指定しないこと。

tnsnames.ora ファイルを使用して Oracle SID を指定する方法については、「tnsnames.ora ファイルの使用」を参照。

TNSNamesFile

省略可能

接続情報の取得に使用する tnsnames.ora ファイルのパスおよびファイル名。tnsnames.ora ファイルには、Oracle ネット サービス名にマップされた接続情報が格納されている。tnsnames.ora ファイルを使用すると接続情報を一元化でき、変更が生じた場合の保守が容易になる。

このプロパティの値は、tnsnames.ora ファイルの有効なパスおよびファイル名でなければならない。

このプロパティを指定する場合は、TNSServerName プロパティも指定する必要がある。

このプロパティを指定したら、接続情報の衝突を防ぐため、以下のプロパティは指定しないこと。

AlternateServers

LoadBalancing

PortNumber

ServerName

ServerType

ServiceName

SID

このプロパティが指定されているにもかかわらず、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を生成する。tnsnames.ora ファイルを使用した接続方法については、「tnsnames.ora ファイルの使用」を参照。

TNSServerName

省略可能

tnsnames.ora ファイルの接続情報を参照するために使用する Oracle ネット サービス名。このプロパティの値は、TNSNamesFile プロパティに指定した tnsnames.ora ファイルに記述されている有効なネット サービス名エントリでなければならない。

このプロパティを指定する場合は、TNSNamesFile プロパティも指定する必要がある。

このプロパティを指定したら、接続情報の衝突を防ぐため、以下のプロパティは指定しないこと。

AlternateServers

LoadBalancing

PortNumber

ServerName

ServerType

ServiceName

SID

このプロパティが指定されているにもかかわらず、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を生成する。tnsnames.ora ファイルを使用した接続方法については、「tnsnames.ora ファイルの使用」を参照。

User

Oracle データベースに接続する場合に使用するデフォルトのユーザ名。大文字と小文字は区別されない。ユーザ名は、データベースでセキュリティが有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してユーザ名を取得する。オペレーティング システムの認証は現在 Oracle ドライバではサポートされていない。


 

 


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 データベースのインストール時にインストールされています。デフォルトでは、ORACLE_HOME\network\admin ディレクトリ (Windows の場合) または $ORACLE_HOME/network/admin ディレクトリ (UNIX) にあります。

データベースへの接続

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

jdbc:bea:oracle:TNSNamesFile=c:\oracle92\NETWORK\ADMIN\
tnsnames.ora;TNSServerName=FITZGERALD.SALES

この接続 URL では、接続に使用する tnsnames.ora ファイルのパスとファイル名 (TNSNamesFile=c:\oracle92\NETWORK\ADMIN\tnsnames.ora)、およびネット サービス名エントリ (TNSServerName=FITZGERALD.SALES) が指定されています。

注意 :

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

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

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

AlternateServers
LoadBalancing
ServerName
ServiceName

PortNumber
ServerType
SID


 

TNSNamesFile および TNSServerName プロパティに加えてこれらのプロパティが指定されていると、ドライバで例外が生成されます。たとえば次の例に示すように、ネット サービス名エントリ ARMSTRONG.ACCT に LOAD_BALANCE パラメータを指定するとします。

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))
)   

この場合、次の例のようにドライバの接続 URL で LoadBalancing プロパティを指定すると、ドライバによって例外が生成されます。

jdbc:bea:oracle:TNSNamesFile=c:\\oracle92\\NETWORK\\ADMIN\\
tnsnames.ora;TNSServerName=FITZGERALD.SALES;LoadBalancing=true

表 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 データベースのインストール時のデフォルト ポート番号) が指定されている。

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 属性と相互排他的であり、特定の Oracle インスタンスへの接続ではなく Oracle Real Application Clusters (RAC) システムへの接続を指定する場合に便利。

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 データベース

Oracle のデータ型

JDBC のデータ型

Oracle8i 以降


BFILE

BLOB

BLOB

BLOB

CHAR

CHAR

CLOB

CLOB

DATE

TIMESTAMP

FLOAT(n)

DOUBLE

LONG

LONGVARCHAR

long raw

LONGVARBINARY

NCHAR

CHAR

NCLOB

CLOB

NUMBER (p, s)

DECIMAL

NUMBER

DOUBLE

NVARCHAR2

VARCHAR

RAW

VARBINARY

Oracle9i 以降

TIMESTAMP

TIMESTAMP

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP

TIMESTAMP WITH TIME ZONE

VARCHAR

VARCHAR2

VARCHAR

XMLType

CLOB

Oracle10g のみ

BINARY_FLOAT

REAL

BINARY_DOUBLE

DOUBLE


 

データ型の詳細については、「GetTypeInfo」を参照してください。

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

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

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

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

セッション パラメータ

説明

TIME_ZONE

Oracle セッションのタイム ゾーン。Java 仮想マシンから報告された現在のタイム ゾーンに設定される。

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 を使用する) 場合、その値は、タイム ゾーン情報を含むタイムスタンプの文字列表現として返されます。文字列情報の形式は、Oracle の NLS_TIMESTAMP_TZ_FORMAT セッション パラメータで指定された形式になります。

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

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

XMLType データ型

Oracle ドライバは、Oracle9i 以降で XMLType として指定されたカラムを含むテーブルをサポートします。Oracle の XMLType データ型は JDBC CLOB データ型にマップされます。XMLType カラムは他のカラム型と同様にクエリで使用できます。XMLType カラムのデータは String、Clob、CharacterStream、または AsciiStream として取得できます。XMLType カラムを挿入または更新する場合、挿入または更新されるカラムは XMLType データ型の形式でなければなりません。

Oracle には、XMLType データ オブジェクトを作成するための xmltype() 関数があります。xmltype() 関数の xmlData 引数は、文字列リテラルまたはパラメータ マーカとして指定できます。パラメータ マーカを使用する場合、パラメータ値は setString、setClob、setCharacterStream、または setAsciiStream メソッドを使用して設定できます。

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

//  xml データをリテラルとして挿入する
String sql = "insert into XMLTypeTbl values (1, xmltype('" +
"<emp><empNo>123</empNo><empName>Mark</empName></emp>'))";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);

次のコードでは、Prepared Statement を使用して XMLType カラムにデータを挿入します。

// xml データを文字列パラメータとして挿入する
String xmlStr = "<emp><empNo>234</empNo><empName>Trish</empName></emp>";
String sql = "insert into XMLTypeTbl values (?, xmltype(?))";
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setInt(1, 2);
prepStmt.setString(2, xmlStr);
prepStmt.executeUpdate();

XMLType カラムのデータを Clob として取得する場合、その Clob オブジェクトを使用して XMLType データを更新することはできません。XMLType カラムから返された Clob オブジェクトの setString、setCharacterStream、または setAsciiStream メソッドを呼び出すと、SQLException が生成されます。

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;

コード リスト 6-2 REF Cursor の例 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();
}

コード リスト 6-3 REF Cursor の例 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();
}

 


SQL エスケープ シーケンス

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

 


アイソレーション レベル

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

 


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

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

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

 


Oracle の JTA のサポート

JDBC 分散トランザクションを JTA 経由で使用するには、Oracle8.1.7 以降が必要となります。

 


バッチ挿入とバッチ更新

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

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

 


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

Oracle ドライバは、以下の形式の SQL のパラメータ メタデータを返すことができます。

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

 


自動生成キーのサポート

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

値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。

アプリケーションは Statement.getGeneratedKeys メソッドを使用して、生成されたキーの値をドライバから取得します。

 


Oracle ドライバによる接続のフェイルオーバ

Oracle ドライバでは、プライマリ サーバが接続を受け付けない場合に接続を試行する代替データベース サーバのリストを指定できます。接続の試行は、接続が正常に確立されるか、リスト内のすべてのデータベース サーバが指定した回数試されるまで続きます。

プライマリ サーバと代替サーバの指定

プライマリ サーバと代替サーバの接続情報は、接続 URL を使用して指定できます。たとえば、次に示す Oracle ドライバの接続 URL では、プライマリ サーバと代替サーバの接続情報を指定しています。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3)

この例の各要素について説明します。

...server1:1521;ServiceName=TEST...

この部分は、プライマリ サーバの接続情報を指定する接続 URL です。代替サーバは AlternateServers プロパティを使用して指定します。次に例を示します。

...;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3)

tnsnames.ora ファイルを使用してプライマリ サーバや代替サーバの接続情報を指定する方法については、「tnsnames.ora ファイルの使用」を参照してください。

AlternateServers プロパティの使用

代替サーバの接続情報は、接続 URL の AlternateServers プロパティを使用して指定します。AlternateServers プロパティの値は、次のような形式の文字列です。

(servername1[:port1][;property=value],servername2[:port2]
[;property=value],...)

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

servername1 は、1 番目の代替データベース サーバのサーバ名です。servername2 2 番目の代替データベース サーバのサーバ名です。3 番目以降も同様です。サーバ名は、代替サーバのエントリごとに必ず指定する必要があります。

port1 は、1 番目の代替データベース サーバがリスンするポート番号です。port2 は、2 番目の代替データベース サーバがリスンするポート番号です。3 番目以降も同様です。各代替サーバ エントリのポート番号は省略可能です。省略した場合は、プライマリ サーバに指定されているポート番号が使用されます。プライマリ サーバのポート番号が指定されていない場合は、デフォルトのポート番号 (1521) が使用されます。

property=value は、接続プロパティである ServiceName または SID のいずれかです。各代替サーバ エントリの接続プロパティは省略可能かつ相互排他的です。次に例を示します。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521)

または

jdbc:bea:oracle://server1:1521;SID=ORCL;User=test;Password=secret;
AlternateServers=(server2:1521;SID=ORCL2,server3:1521)

代替サーバ エントリの接続プロパティを省略した場合、その代替サーバへの接続にはプライマリ サーバに指定されているプロパティが使用されます。たとえば、次の URL のようにプライマリ サーバに SID=ORCL を指定し、代替サーバ エントリで SID を指定しない場合、ドライバはプライマリ サーバに指定されている SID を使用して、代替サーバの ORCL データベースへの接続を試行します。

jdbc:bea:oracle://server1:1521;SID=ORCL;User=test;Password=secret;
AlternateServers=(server2:1521,server3:1521)

接続の再試行の指定

接続の再試行を指定すると、Oracle ドライバはデータベース サーバ (プライマリおよび代替) への接続を確立できるまでリスト内のデータベース サーバへの接続を再試行します。接続の再試行を有効にして制御するには、ConnectionRetryCount プロパティと ConnectionRetryDelay プロパティを使用します。次に例を示します。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3);ConnectionRetryCount=2;
ConnectionRetryDelay=5

この例では、Oracle ドライバがリスト内のデータベース サーバ (プライマリおよび代替) への試行を一巡しても接続が確立できない場合は、リスト内のサーバを同じ順序であと 2 回再試行します (ConnectionRetryCount=2)。つまり、再試行の一巡目で接続が確立できない場合は、サーバのリストをもう一巡再試行するということです。接続再試行の遅延が 5 秒 (ConnectionRetryDelay=5) に設定されているので、ドライバは再試行と再試行の間に 5 秒間待機します。

接続フェイルオーバ プロパティ

表 6-4 に、Oracle ドライバでの接続のフェイルオーバを制御するための接続プロパティをまとめます。各プロパティのコンフィグレーションの詳細については、表 6-1 を参照してください。

表 6-4 まとめ : Oracle ドライバの接続フェイルオーバ プロパティ

プロパティ

特性

AlternateServers

代替データベース サーバのリスト。各サーバを特定するための IP アドレスまたはサーバ名は必須。ポート番号と、ServiceName または SID 接続プロパティは省略可能。ポート番号を指定しない場合は、プライマリ サーバに指定したポートが使用される。プライマリ サーバのポート番号が指定されていない場合は、デフォルトのポート番号 (1521) が使用される。

ConnectionRetryCount

ドライバがデータベース サーバ (プライマリおよび代替) への接続を確立できるまでに、データベース サーバのリストを再試行する回数。デフォルトは 0 (接続再試行を使用しない)。

ConnectionRetryDelay

ConnectionRetryCount プロパティに正の整数が指定されている場合に、データベース サーバ (プライマリおよび代替) のリストへの接続を再試行する際の待機間隔 (秒単位)。デフォルトは 3。

LoadBalancing

ドライバがデータベース サーバ (プライマリおよび代替) のリストに接続を試行する際に、クライアントのロード バランシングを使用するかどうかを指定する。クライアントのロード バランシングを有効にすると、リスト内の順番ではなくランダムな順序で接続が試行される。デフォルトは false (クライアントのロード バランシングは無効)。

PortNumber

プライマリ データベース サーバの接続をリスンするポート。デフォルトは 1521。

ServerName

プライマリ データベース サーバの IP アドレスまたはサーバ名。

ServiceName

接続に使用するデータベースを指定するデータベース サービス名。このプロパティは、SID プロパティとは相互排他的。

SID

サーバ上で動作する Oracle データベースのインスタンスを表す Oracle システム識別子。デフォルトは ORCL。このプロパティは、ServiceName プロパティとは相互排他的。


 

「Connection Failover with AlternateServers」および「Client Load Balancing」で、接続フェイルオーバとクライアントのロード バランシングの概要について参照してください。

 


Oracle ドライバによる接続のフェイルオーバ

Oracle ドライバでは、プライマリ サーバが接続を受け付けない場合に接続を試行する代替データベース サーバのリストを指定できます。接続の試行は、接続が正常に確立されるか、リスト内のすべてのデータベース サーバが指定した回数試されるまで続きます。

プライマリ サーバと代替サーバの指定

プライマリ サーバと代替サーバの接続情報は、接続 URL を使用して指定できます。たとえば、次に示す Oracle ドライバの接続 URL では、プライマリ サーバと代替サーバの接続情報を指定しています。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3)

この例の各要素について説明します。

...server1:1521;ServiceName=TEST...

この部分では、プライマリ サーバの接続情報を指定しています。代替サーバは AlternateServers プロパティを使用して指定します。次に例を示します。

...;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3)

tnsnames.ora ファイルを使用してプライマリ サーバや代替サーバの接続情報を指定する方法については、「tnsnames.ora ファイルの使用」を参照してください。

AlternateServers プロパティの使用

代替サーバの接続情報は、接続 URL の AlternateServers プロパティを使用して指定します。AlternateServers プロパティの値は、次のような形式の文字列です。

(servername1[:port1][;property=value],servername2[:port2]
[;property=value],...)

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

servername1 は、1 番目の代替データベース サーバのサーバ名です。servername2 2 番目の代替データベース サーバのサーバ名です。3 番目以降も同様です。サーバ名は、代替サーバのエントリごとに必ず指定する必要があります。

port1 は、1 番目の代替データベース サーバがリスンするポート番号です。port2 は、2 番目の代替データベース サーバがリスンするポート番号です。3 番目以降も同様です。各代替サーバ エントリのポート番号は省略可能です。省略した場合は、プライマリ サーバに指定されているポート番号が使用されます。プライマリ サーバのポート番号が指定されていない場合は、デフォルトのポート番号 (1521) が使用されます。

property=value は、接続プロパティである ServiceName または SID のいずれかです。各代替サーバ エントリの接続プロパティは省略可能かつ相互排他的です。次に例を示します。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521)

または

jdbc:bea:oracle://server1:1521;SID=ORCL;User=test;Password=secret;
AlternateServers=(server2:1521;SID=ORCL2,server3:1521)

代替サーバ エントリの接続プロパティを省略した場合、その代替サーバへの接続にはプライマリ サーバに指定されているプロパティが使用されます。たとえば、次の URL のようにプライマリ サーバに SID=ORCL を指定し、代替サーバ エントリで SID を指定しない場合、ドライバはプライマリ サーバに指定されている SID を使用して、代替サーバの ORCL データベースへの接続を試行します。

jdbc:bea:oracle://server1:1521;SID=ORCL;User=test;Password=secret;
AlternateServers=(server2:1521,server3:1521)

接続の再試行の指定

接続の再試行を指定すると、Oracle ドライバはデータベース サーバ (プライマリおよび代替) への接続を確立できるまでリスト内のデータベース サーバへの接続を再試行します。接続の再試行を有効にして制御するには、ConnectionRetryCount プロパティと ConnectionRetryDelay プロパティを使用します。次に例を示します。

jdbc:bea:oracle://server1:1521;ServiceName=TEST;User=test;
Password=secret;AlternateServers=(server2:1521;ServiceName=TEST2,
server3:1521;ServiceName=TEST3);ConnectionRetryCount=2;
ConnectionRetryDelay=5

この例では、Oracle ドライバがリスト内のデータベース サーバ (プライマリおよび代替) への試行を一巡しても接続が確立できない場合は、リスト内のサーバを同じ順序であと 2 回再試行します (ConnectionRetryCount=2)。つまり、再試行の一巡目で接続が確立できない場合は、サーバのリストをもう一巡再試行するということです。接続再試行の遅延が 5 秒 (ConnectionRetryDelay=5) に設定されているので、ドライバは再試行と再試行の間に 5 秒間待機します。

接続フェイルオーバ プロパティ

表 6-5 に、Oracle ドライバでの接続のフェイルオーバを制御するための接続プロパティをまとめます。各プロパティのコンフィグレーションの詳細については、表 6-1 を参照してください。

表 6-5 まとめ : Oracle ドライバの接続フェイルオーバ プロパティ

プロパティ

特性

AlternateServers

代替データベース サーバのリスト。各サーバを特定するための IP アドレスまたはサーバ名は必須。ポート番号と、ServiceName または SID 接続プロパティは省略可能。ポート番号を指定しない場合は、プライマリ サーバに指定したポートが使用される。プライマリ サーバのポート番号が指定されていない場合は、デフォルトのポート番号 (1521) が使用される。

ConnectionRetryCount

ドライバがデータベース サーバ (プライマリおよび代替) への接続を確立できるまでに、データベース サーバのリストを再試行する回数。デフォルトは 0 (接続再試行を使用しない)。

ConnectionRetryDelay

ConnectionRetryCount プロパティに正の整数が指定されている場合に、データベース サーバ (プライマリおよび代替) のリストへの接続を再試行する際の待機間隔 (秒単位)。デフォルトは 3。

LoadBalancing

ドライバがデータベース サーバ (プライマリおよび代替) のリストに接続を試行する際に、クライアントのロード バランシングを使用するかどうかを指定する。クライアントのロード バランシングを有効にすると、リスト内の順番ではなくランダムな順序で接続が試行される。デフォルトは false (クライアントのロード バランシングは無効)。

PortNumber

プライマリ データベース サーバの接続をリスンするポート。デフォルトは 1521。

ServerName

プライマリ データベース サーバの IP アドレスまたはサーバ名。

ServiceName

接続に使用するデータベースを指定するデータベース サービス名。このプロパティは、SID プロパティとは相互排他的。

SID

サーバ上で動作する Oracle データベースのインスタンスを表す Oracle システム識別子。デフォルトは ORCL。このプロパティは、ServiceName プロパティとは相互排他的。


 

「Connection Failover with AlternateServers」および「Client Load Balancing」で、接続フェイルオーバとクライアントのロード バランシングの概要について参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次