3.6.7 Oracleと接続する場合の前提条件と注意事項
ここでは,Oracleと接続する場合の前提条件と注意事項について説明します。
(1) 前提条件
-
使用できるJDBCドライバ
使用できるJDBCドライバはOracle JDBC Thin Driverとなります。
-
接続方法
次のどれかのRARファイルを使用します。
-
DBConnector_Oracle_CP.rar
-
DBConnector_Oracle_XA.rar
RARファイルの種類に応じて,指定できるトランザクションサポートレベルが異なります。また,ライトトランザクションを使用できるかどうかも異なります。
RARファイルごとに指定できるトランザクションサポートレベルを次の表に示します。
表3‒27 RARファイルごとに使用できるトランザクションサポートレベル 使用するDB Connector
(RARファイル)
トランザクションサポートレベル
ライトトランザクション
有効
無効
DBConnector_Oracle_CP.rar
NoTransaction
LocalTransaction
○
○
DBConnector_Oracle_XA.rar
XATransaction
−
○
-
(2) Oracleと接続する場合の注意事項
ここでは,Oracleに接続する場合の使用時の注意について説明します。
(a) 使用できるJ2EEコンポーネントの違い
Oracle JDBC Thin DriverでOracleに接続する場合に使用できるJ2EEコンポーネントを次に示します。
-
サーブレット/JSP
-
Stateless Session Bean
-
Stateful Session Bean
-
Entity Bean(BMP)
-
Message-driven Bean
(b) 日本語文字コード変換の相違点とOracle JDBC Thin Driverでの文字化けを回避するための設定
JDBCドライバでは,データをデータベースに格納するとき,およびデータベースからデータを取り出すときに,Unicodeとデータベース格納コードとの間で適宜,文字コードを変換します。ここでは,Oracle JDBC Thin Driverを使用する場合に文字コード変換が実施される場所を次の図に示します。
図中の場所ごとに実行される文字コード変換について,次の表に示します。
場所 |
実施される内容 |
---|---|
1 |
ネットワーク,ファイルなどの外部データをJ2EEサーバで読み込む時に,外部データコードからUnicodeに変換されます。 |
2 |
J2EEサーバで読み込んだデータをOracleサーバに格納する時に,UnicodeからUTF-8に変換されます。J2EEサーバ上のJDBCドライバ部分で実施されるコード変換です。 |
3 |
Oracleサーバのコンバータによって,UTF-8からデータベース格納コードへの変換が実施されます。Oracleサーバ上で実施されるコード変換です。 |
4 |
Oracleサーバのコンバータによって,データベース格納コードからUTF-8への変換が実施されます。 |
5 |
OracleサーバからJ2EEサーバが格納したデータを取得する時に,UTF-8からUnicodeに変換されます。 |
6 |
J2EEサーバで取得したデータをネットワークやファイルなどに書き出す時に,Unicodeから外部データコードに変換されます。 |
Oracle JDBC Thin Driverを使用する場合,JavaVMとOracleサーバのコンバータがサポートしているマッピング規則の相違から,文字化けが発生することがあります。文字化けは,外部データの文字コードとデータベース格納コードの組み合わせや,文字コード変換を行うコンバータの組み合わせによって発生します。
文字化けを回避するためには,外部データの文字コードと,データベース格納コードを,次に示す組み合わせで使用してください。
-
外部データの文字コードがシフトJIS(CP932)の場合
データベース格納コードに「AL32UTF8」または「JA16SJISTILDE」を指定してください。なお,データベース格納コードに「JA16SJIS」を指定した場合,「〜」の文字で文字化けが発生しますのでご注意ください。
-
外部データの文字コードがSJISの場合
データベース格納コードに「AL32UTF8」を指定してください。なお,データベース格納コードに「JA16SJIS」を指定した場合,「¢」「£」「¬」「‖」「−」で文字化けが発生しますのでご注意ください。
-
外部データの文字コードがEUCの場合
データベース格納コードに「AL32UTF8」を指定してください。なお,データベース格納コードに「JA16EUC」を指定した場合,「¢」「£」「¬」で文字化けが発生しますのでご注意ください。
(c) 専用サーバ接続
専用サーバ接続の場合,次の機能は使用できません。次の機能を使用する場合は共有サーバ接続にしてください。詳細については,オラクルのサポートサービスにお問い合わせください。
-
ステートメントキャンセル
-
クエリータイムアウト
(d) JTAトランザクション決着処理中のselect文の戻り値
XAトランザクションでOracleを利用した場合に,JTAトランザクションの決着処理中に,トランザクション内で更新処理を実施した複数のデータベースに対し,Oracleのselect文を発行すると,各select文の戻り値が異なることがあります。これは,Oracleの分散読取り一貫性の制限に起因しています。
(e) Oracle12c以降のJDBCドライバ使用時の設定
Oracle12c以降のJDBCドライバを使用する場合,以下のプロパティをusrconf.properties(J2EEサーバ用ユーザプロパティファイル)に設定してください。プロパティの詳細については,Oracleのドキュメントを参照してください。
-
oracle.jdbc.autoCommitSpecCompliant=false
(3) Oracle RACを使用する場合
(a) Oracle RACとの接続方法
Oracle RACへの接続は,Oracle用のDB Connectorが使用できます。接続できるトランザクションの種類はローカルトランザクションです。次のDB Connectorが使用できます。
-
DBConnector_Oracle_CP.rar
-
DBConnector_Oracle_CP_Cosminexus_RM.rar
負荷分散の設定については,Oracleのマニュアルを参照してください。
(b) データベース障害発生時と回復時の動作
データベース障害が発生した場合,Oracle RAC機能によって障害が発生したインスタンスが切り離され,残っているインスタンスで処理が続行されます。
アプリケーションサーバのコネクションプールを使用している場合,データベース回復時には次のどちらかの操作を実行してください。コネクションプールがクリアされ,これ以降のアクセスが正常に分散されます。
-
cjclearpoolコマンドの実行
-
J2EEサーバの再起動