トランザクションの管理とサポート

トランザクション管理の概要、および IBM® MQ がトランザクションをサポートする方法について説明します。

リソース・マネージャー は、アプリケーションによるアクセスと更新が可能なリソースを所有し管理する、コンピューター・サブシステムです。 以下にリソース・マネージャーの例を示します。
  • IBM MQ キュー・マネージャー。リソースはそのキューになります。
  • Db2® データベース。リソースがその表になります。

アプリケーションが 1 つ以上のリソース・マネージャーのリソースを更新する場合、所定の更新がすべて 1 つのグループとして 正常に必ず完了するようにする、またはすべて完了しないようにすることが、ビジネス上必要になる場合があります。 こうした必要が生じる理由は、これらの更新の中で正常に完了しているものと、完了していないものがあると、ビジネス・データが不整合のままになるからです。

このように管理されるリソースの更新は、作業単位、またはトランザクション 内で行われます。 アプリケーション・プログラムは、更新のセットを作業単位にグループ化できます。

1 つの作業単位の中で、アプリケーションは、リソース・マネージャーのリソースを更新する要求をリソース・マネージャーに出します。 アプリケーションが、すべての更新をコミットする要求を出すと、この作業単位は終了します。 更新がコミットされるまで、それらの更新は、同じリソースにアクセスする他のアプリケーションから見えません。 または、アプリケーションは、なんらかの理由で作業単位を完了できないと判断した場合、その時点までに要求したすべての更新をバックアウトする要求を出すことができます。 この場合、これらの更新はいずれも、他のアプリケーションから見えません。 作業単位としてグループ化される更新は相互に論理的に関連しているため、データ保全性を維持できるように正常に処理されなければなりません。 ある更新が正常に行われても、別の更新が失敗すれば、データ保全性は失われます。

作業単位が正常に完了したことを、コミット されたといいます。 コミットされると、作業単位内のすべての更新内容が永久的になり、これ以降は取り消し不可能になります。 しかし、作業単位が失敗した場合は、すべての更新がバックアウト されます。 このような、データの保全性を維持しながら作業単位をコミットまたはバックアウトするプロセスのことを 同期点調整 といいます。

作業単位内のすべての更新がコミットされるか、バックアウトされる時点は、同期点 と呼ばれます。 作業単位内の更新は、同期点制御内 で行われます。 アプリケーションが、同期点制御外 にある更新を要求する場合、リソース・マネージャーは、進行中の作業単位があっても、その更新をただちにコミットします。この更新を後でバックアウトすることはできません。

作業単位を管理するコンピューター・サブシステムは、トランザクション・マネージャー、またはポイント・コーディネーター と呼ばれます。

ローカル 作業単位とは、更新されるリソースのみが IBM MQ キュー・マネージャーのリソースである作業単位のことです。 この場合、キュー・マネージャー自体が単一フェーズ・コミットによって同期点を調整します。

グローバル 作業単位では、XA 準拠データベースなどの他のリソース・マネージャーにより管理されているリソースも更新されます。 ここでは、2 フェーズ・コミット・プロシージャーを使用する必要があり、作業単位は、キュー・マネージャー自体によって調整することも、 IBM TXSeries®や BEA Tuxedo などの XA 準拠トランザクション・マネージャーによって外部で調整することもできます。

トランザクション・マネージャーは、作業単位内のリソースの更新がすべて正常に完了したか、完了しなかったかを確認します。 アプリケーションが、作業単位のコミットまたはバックアウトを要求するのは、トランザクション・マネージャーに対してです。 トランザクション・マネージャーの例としては、 CICS®WebSphere® Application Serverがありますが、どちらも他の機能を持っています。

一部のリソース・マネージャーは、独自のトランザクション管理機能を備えています。 例えば、 IBM MQ キュー・マネージャーは、独自のリソースに対する更新と Db2 表に対する更新を含む作業単位を管理できます。 キュー・マネージャーは、この機能を実行するのに別個のトランザクション・マネージャーを必要としません。ただし、ユーザーの要求であれば、トランザクション・マネージャーを使用することはできます。 別個のトランザクション・マネージャーを使用する場合、外部トランザクション・マネージャー と呼ばれます。

外部トランザクション・マネージャーが作業単位を管理するには、トランザクション・マネージャーと、作業単位に加わっているすべてのリソース・マネージャーとの間に、標準インターフェースが存在している必要があります。 このインターフェースにより、トランザクション・マネージャーとリソース・マネージャーは互いに情報を交換することが可能になります。 これらのインターフェースの 1 つが XA インターフェース です。XA インターフェースは、複数のトランザクション・マネージャーとリソース・マネージャーによってサポートされる標準インターフェースです。 XA インターフェースは、The Open Group によって Distributed Transaction Processing: The XA Specification の中で公開されています。

複数のリソース・マネージャーが 1 つの作業単位に加わっている場合、トランザクション・マネージャーは、システム障害の場合であっても、2 フェーズ・コミット ・プロトコルを使用して、その作業単位内のすべての更新が正常に完了するか、完了しないかを確認する必要があります。 アプリケーションが、作業単位をコミットする要求をトランザクション・マネージャーに出す場合、トランザクション・マネージャーは次のことを行います。
フェーズ 1 (コミットの準備)
トランザクション・マネージャーは、作業単位に加わっている各リソース・マネージャーに対して、そのリソースの対象の更新についてのすべての情報が、リカバリー可能な状態であることを確認するように求めます。 リソース・マネージャーは通常これを確認するために、情報をログに書き込み、その情報がハード・ディスクに書き込まれるようにします。 トランザクション・マネージャーが、そのリソースの対象の更新についての情報が、リカバリー可能な状態であるという通知を各リソース・マネージャーから受け取ると、フェーズ 1 が完了します。
フェーズ 2 (コミットの実行)
フェーズ 1 が完了すると、トランザクション・マネージャーは、作業単位をコミットするという、取り消すことができない決定を行います。 トランザクション・マネージャーは、その作業単位に加わっている各リソース・マネージャーに対して、そのリソースの更新をコミットするように求めます。 リソース・マネージャーは、この要求を受け取ると、更新をコミットする必要があります。 この段階で更新をバックアウトすることはできません。 トランザクション・マネージャーが、そのリソースの更新をコミットしたという通知を各リソース・マネージャーから受け取ると、フェーズ 2 が完了します。
XA インターフェースは、2 フェーズ・コミット・プロトコルを使用します。

詳しくは、 トランザクション・サポートのシナリオを参照してください。

IBM MQ は、Microsoft Transaction Server (COM+)のサポートも提供します。Microsoft トランザクション・サーバーの使用 (COM+) は、 COM+ サポートの利点を利用するために IBM MQ をセットアップする方法に関する情報を提供します。