Oracle® Fusion Middleware Oracle WebLogic Server JTA プログラマーズ ガイド 11g リリース 1 (10.3.1) B55540-01 |
|
戻る |
次へ |
この章では次の内容について説明します。
この節では、分散トランザクションにおける WebLogic Server でのサード パーティ JDBC ドライバの使い方について説明します。これらのドライバは、WebLogic Server 接続プールと DBMS の間の接続を提供します。分散トランザクションで使用するドライバは、後に「/XA」が続くドライバ名 (Oracle Thin/XA Driver など) によって指定されます。
WebLogic Server にバンドルされた Oracle Thin Driver 10g は事前にコンフィグレーションされ、そのまま使用できる状態になっています。ドライバを更新する場合や異なるバージョンを使用する場合は、『Oracle Fusion Middleware Oracle WebLogic Server JDBC プログラマーズ ガイド』の「Oracle 拡張機能と Oracle Thin Driver の使用」を参照してください。
WebLogic Server で Oracle Thin/XA Driver を使用するための情報を以下の節で示します。
Oracle Thin/XA Driver のソフトウェア要件は次のとおりです。
Java 2 SDK 1.4.x 以降。
注意 : Java 2 SDK 1.4.X で使用できるバージョンは、Oracle Thin Driver 10g および 9.2 (ojdbc14.jar ) のみです。 |
XA 機能を使用するようにコンフィグレーションされた Oracle サーバ (非 XA での使用には制限は適用されない)。
以下の節では、Oracle Thin/XA Driver の環境を設定する方法について説明します。
『Oracle Fusion Middleware Oracle WebLogic Server JDBC プログラマーズ ガイド』の「Oracle 拡張機能と Oracle Thin Driver の使用」を参照してください。
XA 用のデータベースを準備するには、以下の操作を実行します。
システム ユーザとして sqlplus にログオンします (sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME>
など)。
次のコマンドを実行します。@xaview.sql
スクリプト xaview.sql
は、$ORACLE_HOME/rdbms/admin
ディレクトリにあります。
以下のパーミッションを与えます。
grant select on v$xatrans$ to public (or <user>);
grant select on pending_trans$ to public;
grant select on dba_2pc_pending to public;
grant select on dba_pending_transactions to public;
(Oracle Thin driver 10.1.0.3 以降をお使いの場合)
grant execute on dbms_system to <user>;
上の手順をデータベース サーバ上で実行しない場合、通常の XA データベース クエリと更新は正常に動作できます。ただし、クラッシュ後の再起動に続き、WebLogic Server トランザクション マネージャが回復を行うときに、Oracle リソースの回復は XAER_RMERR
になり失敗します。クラッシュの回復は、XA リソースに対する標準的な処理です。
Sybase jConnect 5.5 および 6.0/XA Driver を使用する場合の重要なコンフィグレーション情報とパフォーマンス問題を以下の節で示します。
データベース サーバで環境を設定するには、以下の説明に従います。
sp_configure "enable DTM",1
を実行して、トランザクションを有効にする。
sp_configure "enable xact coordination",1
を実行する。
grant role dtm_tm_role to <USER_NAME>
を実行する。
SYBASE_INSTALL
\OCS-12_0\sample\xa-dtm
サブディレクトリにあるサンプルの xa_config
ファイルを、3 レベル上位の SYBASE_INSTALL
へコピーする。SYBASE_INSTALL
は、Sybase サーバのインストール ディレクトリです。次に例を示します。
$ SYBASE_INSTALL\xa_config
xa_config
ファイルを編集する。最初の [xa
] セクションで、サンプル サーバ名を適切なサーバ名に変更します。
トランザクションを実行するときのデッドロックを防ぐために、デフォルトで低レベル ロックを有効にします。
sp_configure "lock scheme",0,datarows
を実行する。
注意 : 現在、jConnect.jar 、jconn2 、および jconn3.jar は、WebLogic Server の付属ファイルではありません。ただし、Sybase ドライバは、Sybase から直接ダウンロードできます。 |
XA 接続が適切にサポートされているのは、Sybase Adaptive Server Enterprise 12.0 以降のバージョンのみになります。WebLogic Server との XA 接続は Sybase Adaptive Server 11.5 および 11.9 ではサポートされていません。
Adaptive Server 12.0 より前のバージョンでは、トランザクションのすべてのリソースが、サーバ上の単一のタスクによって非公開で所有されていました。サーバは、トランザクションを開始したタスク以外のタスクとはトランザクションを共有できませんでした。Adaptive Server バージョン 12.x には、XA 準拠のトランザクション マネージャ (WebLogic Server など) によって使用されるサスペンドおよび結合のセマンティクスに対するサポートが含まれています。トランザクションは異なる実行スレッド間で共有できます。つまり、1 つの実行スレッドに関連付けることはできません (デタッチ状態)。
Sybase サーバでは、dtm detach timeout period
を設定することで、分散トランザクション ブランチがデタッチ状態 (関連付けられた実行スレッドがない状態) のままでいる時間 (分単位) を設定できます。この時間が経過すると、DBMS は自動的にトランザクションをロールバックします。dtm detach timeout period
は、データベース サーバ上のすべてのトランザクションに適用されます。個々のトランザクションに対しては設定できません。
たとえば、10 分のデタッチ状態が経過した後、自動的にトランザクションをロールバックするには、次のコマンドを使用します。
sp_configure 'dtm detach timeout period', 10
WebLogic Server でトランザクションがタイムアウトする前にデータベース サーバによってトランザクションがロールバックされないように、dtm detach timeout period
はトランザクションのタイムアウトより大きい値に設定する必要があります。
dtm detach timeout period
の詳細については、Sybase のドキュメントを参照してください。
Sybase サーバでグローバル トランザクションが開始されているが、完了していない場合、そのトランザクションの結果は、破棄される前のトランザクションの状態によって異なります。
xa.end
呼び出しの前にクライアントが終了した場合、トランザクションはロールバックされる。
xa.end
呼び出しの後にクライアントが終了した場合、トランザクションはデータベース サーバ上に残る (すべての関連するロックを保持する)。
アプリケーションが xa.start
を呼び出したが、xa.end
をまだ呼び出していないときに不意に終了した場合は、データベース サーバが即座にトランザクションをロールバックし、トランザクションによって保持されていたロックを解放する。
アプリケーションが xa.start
および xa.end
を呼び出し、不意に終了した場合は、データベース サーバは、dtm detach timeout period
で指定した時間が経過した後でトランザクションをロールバックし、トランザクションによって保持されていたロックを解放する。「デタッチされたトランザクションに対するタイムアウトの設定」を参照してください。
アプリケーションが xa.start
および xa.end
を呼び出し、トランザクションの準備が完了していたときに、アプリケーションが不意に終了した場合は、正常に回復できるようにトランザクションは存続する。トランザクション マネージャは rollback または commit を呼び出し、トランザクションを完了する必要があります。
Java クライアントを実行する場合の以下のコンフィグレーション プロパティを設定します。
表 10-3 Sybase jConnect 5.5/XA Driver : Java クライアント接続プロパティ
プロパティ名 | プロパティ値 |
---|---|
ds.setPassword |
<password>
|
ds.setUser |
<username>
|
ds.setNetworkProtocol |
Tds |
ds.setDatabaseName |
<database-name>
|
ds.setResourceManagerName |
<Lrm name in xa_config file>
|
ds.setResourceManagerType |
2 |
ds.setServerName |
<machine host name>
|
ds.setPortNumber |
|
次に、確認済みの問題と Oracle の回避策を示します。
表 10-4 Sybase jConnect 5.5 および 6.0 の確認済みの問題と回避策
説明 | Sybase のバグ | 説明/WebLogic Server の回避策 |
---|---|---|
java.sql.SQLException: JZ0S3: The inherited method setAutoCommit(true) cannot be used in this subclass. |
10726192 |
回避策はなし。jConnect 6.0 で修正済み。 |
分散トランザクションでドライバを使用する場合、 |
10727617 |
WebLogic Server では、このバグに対する内部的な回避策を提供している。 データ ソースの接続プールのプロパティを ベンダによる修正が要求されている。 |
その他のサード パーティ製 XA 準拠 JDBC ドライバを使用するためには、ドライバ クラス ライブラリのパスを CLASSPATH で指定した上で、ベンダの説明に従って操作を行う必要があります。