X/Open(R) XA インターフェースは、複数のリソースの変更を調整すると同時にこれらの変更の保全性を確保するさいの標準とされています。 トランザクション・プロセス・モニター として知られるソフトウェア製品は一般に XA インターフェースを使用し、 DB2 はこのインターフェースをサポートするので、そのような環境では資源として 1 つ以上の DB2 データベースに同時にアクセスできます。データベース・マネージャーで提供されている XA インターフェース・サポートの概念およびそのインプリメントについては、 管理の手引き: 計画 を参照してください。ご使用のプラットフォームが X/Open XA インターフェースをサポートしているかどうか判別するには、 アプリケーション構築の手引き を参照してください。
TP モニターから独立して実行されているアプリケーションと異なるモデルがトランザクション・プロセスに使用されるため、分散トランザクション処理 (DTP) 環境で操作を行う場合、 DB2 には特別な考慮が必要となります。このトランザクション・プロセスのモデルの特性を次に示します。
この環境の固有の性質により、ここで実行するようにコーディングされたアプリケーションに対する DB2 の動作および要件は、特殊なものとなります。
DTP 環境において、RM がグローバル・トランザクションの自らのブランチを終了させるためにロールバック (システム・エラーまたはデッドロックなどのため) を開始した場合、トランザクション・マネージャーが同期点要求を開始するまで、同アプリケーションのプロセスからの要求をそれ以上処理させないでください。これには、ストアード・プロシージャー中で発生したデッドロックも含まれます。データベース・マネージャーでは、CICS 環境で CICS SYNCPOINT ROLLBACK コマンドを使用するようなトランザクション・マネージャーの同期点サービスを利用して、グローバル・トランザクションをロールバックしなければならないことを通知する SQLCODE -918 (SQLSTATE 51021) を戻し、後に続く SQL 要求をすべて拒否することを意味します。何らかの理由で TM がトランザクションをコミットするように要求すると、RM は TM にそのロールバックについて通知し、TM が他の RM をロールバックするようにします。
WITH HOLD と宣言されたカーソルは、CICS トランザクション・プロセス・モニターの XA/DTP 環境でサポートされます。
WITH HOLD と宣言されたカーソルがサポートされない場合は OPEN ステートメントが拒否され、SQLCODE -30090 (SQLSTATE 25000)、理由コード 03 が戻されます。
トランザクションは、WITH HOLD と指定されるカーソルがもう必要なくなった場合に、明示的にクローズされるようにしなければなりません。クローズされない場合は他のトランザクションにより継承され、リソースの不必要な使用または衝突を引き起こす結果となります。
CONNECT DECLARE DESCRIBE EXECUTE IMMEDIATE (where the first token or keyword is SET but not SET CONSTRAINTS) OPEN CURSOR FETCH CURSOR CLOSE CURSOR PREPARE (where the first token or keyword that is not blank or left parenthesis is SET (other than SET CONSTRAINTS), SELECT, WITH, or VALUES) SELECT...INTO VALUES...INTO
他の処理はすべて SQLCODE -30090 (SQLSTATE 25000) が戻されて拒否されます。
PREPARE ステートメントは、SELECT ステートメントの作成時にのみ使用可能です。 EXECUTE IMMEDIATE ステートメントは、 DB2 ユニバーサル・データベース (OS/390 版) からの SET SQLID ステートメントのように、出力値を戻さない SQL SET ステートメントの実行が可能です。
データベースにおいて内部的にコミットを出し、2 フェーズ・コミット・プロセスを回避する API は、SQLCODE -30090 (SQLSTATE 25000) が戻されて拒否されます。これらの API のリストについては 複数サイト更新に関する制限を参照してください。これらの API は複数サイト更新ではサポートされません (Connect Type 2)。
マルチスレッド・アプリケーションを開発する場合、1 つのスレッドのみが SQL を使用するか、または代わりに多重プロセス設計を使用して、同じ作業単位内の異なるスレッドからの SQL ステートメントのインターリーブを避けるようにしてください。トランザクション・マネージャーが多重プロセスまたはマルチスレッドをサポートする場合、 1 つのスレッドが別のスレッドの前に同期点に対して実行されるように、スレッドが連続する構成にしてください。 例としては、AIX/CICS での all_operation の XASerialize オプションがあります。この情報を含む AIX/CICS XAD ファイルに関する詳細については、 管理の手引き: 計画 を参照してください。
上記の制限は、XA インターフェースを使用した TP モニター環境で実行されるアプリケーションに適用されることに注意してください。 DB2 データベースが XA インターフェースによる使用を定義されていない場合、これらの制限は適用されませんが、 DB2 が次のトランザクションの実行に悪影響を与えることのないようにトランザクションをコーディングする必要があることはいうまでもありません。
実行可能なアプリケーションを作成するには、アプリケーション・オブジェクトを、言語ライブラリー、オペレーティング・システム・ライブラリー、通常のデータベース・マネージャー・ライブラリー、および TP モニターとトランザクション・マネージャー製品のライブラリーとリンクする必要があります。