(57)【特許請求の範囲】
【請求項１】
トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方式であって、
第一のトランザクション処理手段が業務データを格納する第一の業務テーブルと、遅延実行の為のトランザクションデータをデータＩＤとともに格納するメッセージキューとを含む第一のデータベース管理システムと、
操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて前記第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記メッセージキューに登録する第一のトランザクション処理手段と、
前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理手段に通知し，第二のトランザクション処理手段からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、第二のトランザクション処理手段からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持するキュー監視手段と、
第二のトランザクション処理手段が業務データを格納する第二の業務テーブルと、第二のトランザクション処理手段が処理したトランザクションデータのデータＩＤを格納するＩＤテーブルとを含む第二のデータベース管理システムと、
遅延トランザクション処理を開始するとき前記ＩＤテーブルにより前記データＩＤの存在をチェックし、前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行し、前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視手段に返却し、前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視手段に返却する第二のトランザクション処理手段と、を備える、
ことを特徴とする二相コミット回避方式。
【請求項２】
トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方式のプログラム記録媒体であって、
操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて第一のデータベース管理システムに含まれる第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記第一のデータベース管理システムに含まれるメッセージキューに登録する第一のトランザクション処理と、
前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理に通知し，第二のトランザクション処理からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、第二のトランザクション処理からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持するキュー監視処理と、
遅延トランザクション処理を開始するとき第二のデータベース管理システムに含まれるＩＤテーブルにより前記データＩＤの存在をチェックし、前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行して前記第二のデータベース管理システムに含まれる第二の業務テーブルを更新し、処理したトランザクションデータのデータＩＤを前記第二のデータベース管理システムに含まれる前記ＩＤテーブルに格納し、前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視処理に返却し、前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視処理に返却する第二のトランザクション処理と、
をコンピュータに実行させるためのプログラムを記録したことを特徴とする二相コミット回避方式のプログラム記録媒体。
【請求項３】
トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方法であって、
第一のトランザクション処理手段は、
操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて第一のデータベース管理システムに含まれる第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記第一のデータベース管理システムに含まれるメッセージキューに登録し、
キュー監視手段は、
前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理手段に通知し，
前記第二のトランザクション処理手段は、
遅延トランザクション処理を開始するとき第二のデータベース管理システムに含まれるＩＤテーブルにより前記データＩＤの存在をチェックし、
前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行して前記第二のデータベース管理システムに含まれる第二の業務テーブルを更新し、
処理したトランザクションデータのデータＩＤを前記第二のデータベース管理システムに含まれる前記ＩＤテーブルに格納し、
前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視手段に返却し、
前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視手段に返却し、
前記キュー監視手段は、
前記第二のトランザクション処理手段からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、
前記第二のトランザクション処理手段からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持する、
ことを特徴とする二相コミット回避方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は二相コミット回避方式およびそのプログラム記録媒体に関し、特にトランザクションデータをメッセージキューに登録しておき適宜遅延してトランザクション処理を実行する遅延型トランザクション処理システムにおける二相コミット回避方式およびそのプログラム記録媒体に関する。
【０００２】
【従来の技術】
従来の非同期メッセージキューを用いたシステムの一例が、特開平１０−３２０２５１号公報に記載されている。このようなシステムにおいて、複数のデータベース管理システムを用いた場合を図４に示す。
【０００３】
図４は従来のトランザクション処理システムの例を示すブロック図である。同図において、業務システム２ａは、トランザクション処理プログラム３および１２と、データベース管理システム１１および１７ａと、キュー監視プログラム５ａと、遅延実行管理プログラム４と、リソース管理プログラム１８ａとから構成されている。
【０００４】
上記のトランザクション処理システムにおいて、操作端末１からのデータを契機として処理を行うトランザクション処理プログラム３は、データベースシステム１１内の業務テーブル６を更新し、遅延実行の為のトランザクションデータ９を同一データベース内のメッセージキュー７に登録し、処理を完了する。
【０００５】
一方、遅延実行管理プログラム４から起動されたキュー監視プログラム５ａはある短いインターバル時間毎に、メッセージキュー７に登録された新しいトランザクションデータがあるかどうかをチェックしている。
【０００６】
トランザクションデータ９が登録されたことを知ったキュー監視プログラム５ａはトランザクションの開始をリソース管理プログラム１８ａに伝える。その後、キュー監視プログラム５ａはトランザクションデータ９の削除をデータベース管理プログラム１１に指示し、同一トランザクションとしてトランザクション処理プログラム１２を呼び出す。
【０００７】
トランザクション処理プログラム１２では業務テーブル１３の更新をデータベース管理プログラム１６に指示し、キュー監視プログラム５ａに制御を戻す。キュー監視プログラム５ａでは、リソース管理プログラム１８ａに対してトランザクションの確定を要求する。
【０００８】
この状態では、まだトランザクションデータ９の削除および業務テーブル１３の更新は確定していない。これらの処理を確定させる為に、リソース管理プログラム１８ａはデータベース管理プログラム１０および１６に対し、コミットの準備要求を出し、両方の準備が出来たところで、コミット指示を出す。すなわち、二相コミットである。この二相コミットが終了するまで、それぞれのリソースは解放されず、また、キュー監視プログラム５ａも次の処理を開始することができない。
【０００９】
上記のようなリソース管理プログラム１８ａによる二相コミットでは、データベース管理プログラム１０およびデータベース管理プログラム１６との間で処理確定の待ち合わせ等が発生する為、性能が劣化してしまう。また、二相コミットを行わない場合、トランザクション処理プログラム１２による業務テーブル１３の更新が確定したにもかかわらず、メッセージキュー７のトランザクションデータ９が削除されずに残ってしまったとき、このトランザクションデータ９が再度処理され、業務テーブル１３が二重更新されてしまう可能性がある。
【００１０】
【発明が解決しようとする課題】
上記のように、従来のトランザクション処理システムは、二相コミットにより本来の処理性能の著しい劣化が発生するという問題点がある。その理由は、二相コミットでは、リソース管理プログラムがトランザクションに関わった全てのデータベース管理プログラムとの準備要求およびコミット指示において、同期の為の待ち合わせが発生するからである。
【００１１】
本発明の目的は、上記のような欠点を改善し、システム処理性能を低下させる二相コミットを回避するとともにトランザクションデータなどによるファイルの二重更新の発生を防ぐことができる二相コミット回避方式およびそのプログラム記録媒体を提供することにある。
【００１２】
【課題を解決するための手段】
本発明の二相コミット回避方式は、トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方式であって、  第一のトランザクション処理手段が業務データを格納する第一の業務テーブルと、遅延実行の為のトランザクションデータをデータＩＤとともに格納するメッセージキューとを含む第一のデータベース管理システムと、  操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて前記第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記メッセージキューに登録する第一のトランザクション処理手段と、  前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理手段に通知し，第二のトランザクション処理手段からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、第二のトランザクション処理手段からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持するキュー監視手段と、  第二のトランザクション処理手段が業務データを格納する第二の業務テーブルと、第二のトランザクション処理手段が処理したトランザクションデータのデータＩＤを格納するＩＤテーブルとを含む第二のデータベース管理システムと、  遅延トランザクション処理を開始するとき前記ＩＤテーブルにより前記データＩＤの存在をチェックし、前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行し、前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視手段に返却し、前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視手段に返却する第二のトランザクション処理手段と、を備える、ことを特徴とする。
【００１３】
また、本発明の二相コミット回避方式のプログラム記録媒体は、トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方式のプログラム記録媒体であって、操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて第一のデータベース管理システムに含まれる第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記第一のデータベース管理システムに含まれるメッセージキューに登録する第一のトランザクション処理と、前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理に通知し，第二のトランザクション処理からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、第二のトランザクション処理からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持するキュー監視処理と、遅延トランザクション処理を開始するとき第二のデータベース管理システムに含まれるＩＤテーブルにより前記データＩＤの存在をチェックし、前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行して前記第二のデータベース管理システムに含まれる第二の業務テーブルを更新し、処理したトランザクションデータのデータＩＤを前記第二のデータベース管理システムに含まれる前記ＩＤテーブルに格納し、前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視処理に返却し、前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視処理に返却する第二のトランザクション処理と、をコンピュータに実行させるためのプログラムを記録したことを特徴とする。
【００１４】
さらに、本発明の二相コミット回避方法は、トランザクションの処理要求を遅延して実行させる遅延型トランザクション処理システムの二相コミット回避方法であって、第一のトランザクション処理手段は、操作端末から送信されたデータを受信し、トランザクション処理を行い業務内容に応じて第一のデータベース管理システムに含まれる第一の業務テーブルを更新し、トランザクションデータにデータＩＤを付加して前記第一のデータベース管理システムに含まれるメッセージキューに登録し、キュー監視手段は、前記メッセージキューを監視し前記トランザクションデータと前記データＩＤとを第二のトランザクション処理手段に通知し，前記第二のトランザクション処理手段は、遅延トランザクション処理を開始するとき第二のデータベース管理システムに含まれるＩＤテーブルにより前記データＩＤの存在をチェックし、前記ＩＤテーブルに前記データＩＤが存在しない場合に前記トランザクションデータを基に遅延トランザクションを実行して前記第二のデータベース管理システムに含まれる第二の業務テーブルを更新し、処理したトランザクションデータのデータＩＤを前記第二のデータベース管理システムに含まれる前記ＩＤテーブルに格納し、前記遅延トランザクション処理でエラーが発生した場合にはロールバックを行い”処理未”を示すコードを前記キュー監視手段に返却し、前記遅延トランザクション処理が正常に終了した場合には”処理済”を示すコードを前記キュー監視手段に返却し、前記キュー監視手段は、前記第二のトランザクション処理手段からの返却コードが”処理済”の場合には前記メッセージキューに保持されている前記トランザクションデータを削除し、前記第二のトランザクション処理手段からの返却コードが”処理未”の場合には前記メッセージキューに保持されている前記トランザクションデータをそのまま保持する、ことを特徴とする。
【００１９】
【発明の実施の形態】
以下、本発明について図面を参照しながら説明する。
【００２０】
図１は本発明の実施の一形態を示すブロック図である。同図において、業務システム２は、操作端末１からのデータを契機としてトランザクション処理を行うトランザクション処理プログラム３と、複数のデータベース管理システム１１およびデータベース管理システム１７と、これら複数のデータベース管理プログラムの同期コミットを指揮するリソース管理プログラム１８と、遅延実行を実現する遅延実行管理プログラム４およびキュー監視プログラム５と、遅延トランザクションを実行するトランザクション処理プログラム１２とから構成されている。
【００２１】
データベース管理システム１１は、業務データを格納する業務テーブル６と、遅延実行の為のトランザクションデータ９をデータＩＤ８とともに格納するメッセージキュー７と、これらのファイルのアクセスを管理するデータベース管理プログラム１０とから構成されている。
【００２２】
データベース管理システム１７は、遅延実行されたトランザクションが業務データを格納する業務テーブル１３と、遅延実行したトランザクションデータ９のデータＩＤ８をデータＩＤ１５として格納するＩＤテーブル１４と、これらのファイルのアクセスを管理するデータベース管理プログラム１６とから構成されている。
【００２３】
上記の業務システム２において、トランザクション処理プログラム３から登録されたトランザクションデータ９と、そのデータを処理する為のトランザクション処理プログラム１２が更新を行う業務テーブル１３とが異なるデータベース管理システム（データベース管理システム１１とデータベース管理システム１７）によって管理されている場合、トランザクションの二重処理を防止する為、トランザクション処理が正常に終了した時点で、トランザクションデータ９の削除と、業務テーブル１３の更新を同時に確定させる必要がある。
【００２４】
上記のトランザクション処理システムは、二相コミットを回避しつつ、二重更新が行われることを防止する為に、トランザクションデータ９とともにそのデータのデータＩＤ８をキュー監視プログラム５によってトランザクション処理プログラム１２に通知し、あらかじめ業務テーブル１３と同じデータベースシステム内に用意しておいたＩＤテーブル１４内に処理済みのデータＩＤ１５として保存しておき、トランザクション処理プログラム１２の処理開始時には処理対象となるデータＩＤ８がＩＤテーブル内のデータＩＤ１５に存在するか否かをチェックすることによって、二重処理の防止を可能としている。
【００２５】
次に、上記のトランザクション処理システムの動作を説明する。
【００２６】
まず、操作端末１から送信されたデータを受信したトランザクション処理プログラム３は、業務内容に応じた業務テーブル６を更新し、遅延型トランザクションの登録を行う場合には、トランザクションデータ９にデータＩＤ８を付加してメッセージキュー７に挿入する。
【００２７】
ここで、メッセージキュー７は業務テーブル６と同じデータベース管理システム１１内のデータベースファイルである。メッセージキュー７と業務テーブル６がそれぞれ異なるデータベース管理システムである場合には、トランザクション処理プログラム３の処理確定時に二相コミットが必要となるため、性能を考慮して同じデータベース管理システム１１に格納しているのである。
【００２８】
次に、キュー監視プログラム５が遅延実行管理プログラム４によって起動される。
【００２９】
図２はキュー監視プログラムの動作を示す流れ図である。
【００３０】
まず、メッセージキュー７内にトランザクションデータ９が格納されている件数を取得する（ステップＡ１）。トランザクションデータが登録されているか否かの判断（ステップＡ２）を行い、トランザクションデータが無い場合には、再びメッセージキュー７のトランザクションデータを監視する。トランザクションデータが登録されるまでメッセージキュー７のトランザクションデータの監視を続ける。
【００３１】
次に、トランザクションデータ９が登録されている場合、トランザクションデータ９をデータＩＤ８とともに取出し（ステップＡ３）、そのトランザクションデータ９を削除する（ステップＡ４）。ただし、この時点でコミットは発行されていないので、物理的に削除されていない。
【００３２】
次に取出したトランザクションデータ９とデータＩＤ８をトランザクション処理プログラム１２に渡して処理を要求する（ステップＡ５）。
【００３３】
トランザクション処理プログラム１２の詳細の処理は後述するが、トランザクション処理プログラム１２では処理が終了したかまたは既に処理を終えている場合には”処理済”を示すコードを返却し、処理中にエラーが発生するなどで、処理が完了できない場合には”処理未”を示すコードを返却するものとする。
【００３４】
キュー監視プログラム５では、トランザクション処理プログラム１２の返却領域をチェックし（ステップＡ６）、処理が完了した場合にはコミット（ステップＡ７）を、処理が未完了の場合にはロールバック（ステップＡ８）を発行する。
【００３５】
コミットにより、トランザクション処理プログラム１２によって正常に処理が完了したトランザクションデータ９は削除され、ロールバックにより、トランザクション処理プログラム１２によって正常に処理が完了しなかったトランザクションデータ９は削除されず、再度処理可能なデータとなる。
【００３６】
上記の処理を終えた後、キュー監視プログラム５は遅延実行管理プログラム４からの終了指示があるか否かのチェック（ステップＡ９）を行い、終了指示がある場合にはその処理を終了し、そうでなければ処理を続行する。
【００３７】
図３はトランザクション処理プログラムの動作を示す流れ図である。
【００３８】
トランザクション処理プログラム１２はキュー監視プログラム５から要求を受け、まず、要求元のキュー監視プログラム５に対して結果を返却する為の領域を、”処理未”を示すコードで初期化する（ステップＢ１）。
【００３９】
次に、ＩＤテーブルのデータＩＤを読み込み（ステップＢ２）、キュー監視プログラム５から渡されたトランザクションデータ９のデータＩＤ８と比較する（ステップＢ３）。ここで、２つのデータＩＤが同じ値であれば、そのトランザクションデータ９は処理が終了しているので、返却領域に”処理済”を示すコードを設定し（ステップＢ５）、ロールバックを発行して処理を終了する（ステップＢ１２）。
【００４０】
２つのデータＩＤが異なる場合は、トランザクションデータ９を元に処理を行う（ステップＢ４）。トランザクション処理でエラーが発生した場合には、ロールバックを発行し、処理を終了する（ステップＢ６、Ｂ１２）。
【００４１】
トランザクション処理でエラーが発生しなかった場合にはＩＤテーブル１４のデータＩＤ１５にトランザクションデータ９のデータＩＤを設定する（ステップＢ７）。データＩＤの更新でエラーが発生した場合には、ロールバックを発行し、処理を終了する（ステップＢ８，Ｂ１２）。
【００４２】
データＩＤの更新まで成功して初めてトランザクション処理プログラム１２はコミットを発行する（ステップＢ９）。コミットが失敗した場合には、ロールバックを発行し、処理を終了する（ステップＢ１０，Ｂ１２）。コミットが成功した場合には返却領域に”処理済”を示すコードを設定し（ステップＢ１１）、キュー監視プログラム５に返却する。
【００４３】
トランザクション処理プログラム１２がアクセスする業務テーブル１３およびＩＤテーブル１４は同一のデータベース管理システム１７によって管理されているので、コミット発行（ステップＢ９）時に二相コミットが発生することは無い。
【００４４】
また、トランザクション処理プログラム１２の処理が完了したにも関わらず、キュー監視プログラム５によるトランザクションデータ９の削除が失敗した場合にも、ＩＤテーブル１４に格納したデータＩＤ１５によって、そのトランザクションデータ９が再度処理されることを防ぐことができる。
【００４５】
なお、上記のトランザクション処理システムは、中央処理装置（データベースサーバなどの）の主記憶（図示していない。）に保持されたプログラムを実行することによって動作する。本発明による二相コミット回避機能はこのプログラムの一要素を構成し、遅延型トランザクション処理システムにおける二相コミット回避方式を実現している。
【００４６】
【発明の効果】
以上、詳細に説明したように、本発明によれば、トランザクション処理プログラムから要求のあった処理（トランザクションデータ）を、その時点では実行せずに、メッセージキューに登録しておいて適宜遅延実行させる遅延型トランザクション処理システムにおいて、メッセージの登録時、および遅延実行時のいずれの場合においても、性能の劣化を招く恐れのある二相コミットを発生させずに処理を行う機能を提供できる。
【００４７】
その理由は、二相コミットが発生しない様に、それぞれのデータベース管理プログラム毎に独立したコミットを実行し、独立したコミットにより可能となった二重処理をＩＤテーブルによって防いでいるためである。
【図面の簡単な説明】
【図１】本発明の実施の一形態を示すブロック図。
【図２】キュー監視プログラムの動作を示す流れ図。
【図３】トランザクション処理プログラムの動作を示す流れ図。
【図４】従来のトランザクション処理システムの例を示すブロック図。
【符号の説明】
１    操作端末
２    業務システム
３，１２    トランザクション処理プログラム
４    遅延実行管理プログラム
５    キュー監視プログラム
６，１３    業務テーブル
７    メッセージキュー
８，１５    データＩＤ
９    トランザクションデータ
１０，１６    データベース管理プログラム
１１，１７    データベース管理システム
１４    ＩＤテーブル
１８    リソース管理プログラム
【図１】
0003627619.tif 000002
【図２】
0003627619.tif 000003
【図３】
0003627619.tif 000004
【図４】
0003627619.tif 000005