3.3.6 SQLとグローバル・トランザクション
SQLおよびグローバル・トランザクションを使用する場合には、次のガイドラインに従ってください:
- グローバル・トランザクションのスコープ外でSQL文を実行する場合には注意が必要です。SQL標準では、ローカル・トランザクションは、トランザクション・コンテキストを必要とするSQL文を実行するときにアクティブなトランザクションがない場合に、データベース・リソース・マネージャによって暗黙的に開始する必要があると指定されています。また、データベース・リソース・マネージャによって暗黙的に開始されたトランザクションは、COMMITまたはROLLBACK SQL文を実行して、明示的に終了する必要があることも指定されています。これは、TPフレームワークが、リソース・マネージャによって開始されたトランザクションを終了しないからです。
ノート:
この点は、アプリケーションがXAライブラリを使用してOracleサーバーに接続している場合には問題になりません。こうしたアプリケーションはグローバル・トランザクションでしか処理を行えないからです。Oracleサーバーでは、XAを使用している場合にローカル・トランザクションが許可されません。 - SQL COMMITおよびROLLBACK文を使用して、
Current.begin()を明示的に使用して開始されたグローバル・トランザクションやシステムによって暗黙的に開始されたグローバル・トランザクションを終了することはできません。各データベース製品でグローバル・トランザクションを使用する場合のその他の制約については、データベース・ベンダーのマニュアルで確認してください。 - SQLカーソルは、トランザクションの終了時に閉じることができます。カーソルの処理規則については、お使いのデータベース製品のマニュアルを参照してください。アプリケーション・プログラマは、適切なアクティブ化ポリシーを設定したCORBAオブジェクトでのみ、かつ適切なトランザクション境界内で、カーソルを使用するよう注意する必要があります。
親トピック: トランザクション