9.1 グローバル・トランザクションとは
グローバル・トランザクションとは、複数のリソース・マネージャを使用し、複数のサーバー上で行われる複数の操作を1つの論理単位として処理できるようにするメカニズムです。
プロセスがトランザクション・モードになると、サーバーに作成されたリクエスト・サービスが現在のトランザクションにかわって処理されます。呼び出されてトランザクションに参加したサービスは、「トランザクションの参加リソース」と呼ばれます。参加リソースから返される値によって、トランザクションの結果が変わる場合があります。
グローバル・トランザクションは複数のローカル・トランザクションから構成され、各トランザクションは同じリソース・マネージャにアクセスします。リソース・マネージャは、同時実行性制御とデータ更新の原子性を実現します。ローカル・トランザクションでは、アクセスが正常に終了するか、または全体が失敗します。つまり、一部だけが成功することはありません。
1つのトランザクションに参加可能なサーバー・グループは最大16個です。
Oracle Tuxedoシステムでは、グローバル・トランザクションが参加しているリソース・マネージャと共に管理され、原子性、一貫性、独立性、および持続性という特徴を持つ特定シーケンスの操作として処理されます。つまり、グローバル・トランザクションは、以下のような特徴を持つ論理的な作業単位と言えます。
- すべての部分が成功するか、または何も効果が発生しません。
- 操作が実行されて、リソースがある一貫した状態から別の状態に正しく移行します。
- ほかのトランザクションから中間の結果にアクセスすることはできません。ただし、トランザクションに含まれるプロセスには、別のプロセスに関連付けられたデータにアクセスできるものもあります。
- シーケンスが完了すると、その結果はどのような失敗による影響も受けません。
Oracle Tuxedoシステムでは、個々のグローバル・トランザクションのステータスがトラッキングされ、そのトランザクションをコミットするかロールバックするかが決定されます。
ノート:
トランザクションで、flags
引数に明示的にTPNOTRAN
を設定してtpcall()、tpacall()
またはtpconnect()を呼び出した場合、呼び出されたサービスによって実行される操作はトランザクションに含まれません。その場合、呼出し側プロセスは、呼び出されたサービスを現在のトランザクションの参加リソースとは見なしません。結果として、呼び出されたプロセスによって実行されたサービスは、現在のトランザクションの結果からの影響を受けません。XA準拠のサーバー・グループのサービスに対する呼出しにTPNOTRAN
が設定されている場合、その呼出しはトランザクション・モード外、または別のトランザクションで実行されます。どちらで実行されるかは、サービスの設定方法とコーディング方法によって決まります。詳細については、「グローバル・トランザクションの暗黙的な定義」を参照してください。
親トピック: グローバル・トランザクションのコーディング