(57)【特許請求の範囲】
【請求項１】
複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理プログラムであって、
前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求手順と、
前記コミット要求手順により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答手順と、
前記コミット要求手順により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示手順と、
をコンピュータに実行させることを特徴とする分散トランザクション処理プログラム。
【請求項２】
前記復旧指示手順は、未解決トランザクションの処理結果について取得した他の処理装置の処理結果が、いずれの処理装置もコミット完了を示さない場合、該故障処理装置に対してロールバック処理を指示する
ことを特徴とする請求項１に記載の分散トランザクション処理プログラム。
【請求項３】
前記未解決トランザクションは、前記故障処理装置が記憶部に記憶する未解決トランザクションの情報を取得することで識別する、
ことを特徴とする請求項１または２に記載の分散トランザクション処理プログラム。
【請求項４】
複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理方法であって、
前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求工程と、
前記コミット要求工程により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答工程と、
前記コミット要求工程により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示工程と、
を含んだことを特徴とする分散トランザクション処理方法。
【請求項５】
複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理装置であって、
前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求手段と、
前記コミット要求手段により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答手段と、
前記コミット要求手段により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示手段と、
を備えたことを特徴とする分散トランザクション処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置自身の故障以外ではコミット処理要求に対して必ずコミット処理を行って応答する複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理装置に関し、特に、コミット処理を高速に行うとともに、導入・運用の負担を軽減することができる分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理装置に関するものである。
【背景技術】
【０００２】
従来、一つのトランザクションを処理する場合に複数のデータベースに対してアクセスする必要がある分散トランザクション処理では、複数のデータベース間の整合性を保証するために、２フェーズコミットが用いられてきた。
【０００３】
２フェーズコミットでは、コミット処理を２段階のフェーズにわけ、第１段階でデータベースに対してコミットの準備ができているか否かを確認し（プリペア）、全てのデータベースからコミットの準備ができたことが確認できた場合にのみ第２段階でコミットを実行し、それ以外の場合には第２段階でロールバックを行うことによってデータベース間の整合性を保証している（例えば、非特許文献１参照。）。
【０００４】
【非特許文献１】「分散トランザクションに挑戦しよう！」、［平成１６年１０月１２日検索］、インターネット＜URL:  HYPERLINK  "http://www.microsoft.com/japan/enable/training/kblight/t004/7/01.htm"  http://www.ogis-ri.co.jp/otc/hiroba/technical/DTP/step2＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、２フェーズコミットでは、コミット処理を２段階のフェーズにわけて行うために、処理効率が悪いという問題がある。また、分散トランザクション処理を管理するトランザクションマネージャを実行するコンピュータに障害が発生した場合にトランザクションマネージャが復旧処理で使用するトランザクションログが必要であり、トランザクションログのための導入・運用の負担が大きいという問題もある。
【０００６】
本発明は、上記に鑑みてなされたものであって、コミット処理を高速に行うとともに、導入・運用の負担を軽減することができる分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、請求項１の発明に係る分散トランザクション処理プログラムは、複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理プログラムであって、前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求手順と、前記コミット要求手順により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答手順と、前記コミット要求手順により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示手順と、をコンピュータに実行させることを特徴とする。
【０００８】
この請求項１の発明によれば、アプリケーションからのコミット要求に対して複数の処理装置にコミット処理を要求し、要求したコミット処理に対していずれかの処理装置から応答があった場合にアプリケーションに対してコミットの成功を応答し、要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、処理結果がコミット完了を示す場合、故障処理装置に対してコミット処理を指示するよう構成したので、１フェーズコミットによってデータベース間の整合性を維持することができる。
【０００９】
また、請求項２の発明に係る分散トランザクション処理プログラムは、請求項１の発明において、前記復旧指示手順は、未解決トランザクションの処理結果について取得した他の処理装置の処理結果が、いずれの処理装置もコミット完了を示さない場合、該故障処理装置に対してロールバック処理を指示することを特徴とする。
【００１０】
この請求項２の発明によれば、未解決トランザクションの処理結果について取得した他の処理装置の処理結果が、いずれの処理装置もコミット完了を示さない場合、該故障処理装置に対してロールバック処理を指示するよう構成したので、１フェーズコミットによってデータベース間の整合性を維持することができる。
【００１１】
また、請求項３の発明に係る分散トランザクション処理プログラムは、請求項１または２の発明において、前記未解決トランザクションは、前記故障処理装置が記憶部に記憶する未解決トランザクションの情報を取得することで識別する、ことを特徴とする。
【００１２】
この請求項３の発明によれば、未解決トランザクションは、故障処理装置が記憶部に記憶する未解決トランザクションの情報を取得することで識別するよう構成したので、処理装置によるトランザクションログの管理だけが必要であり、当該分散トランザクション処理プログラムによるトランザクションログの管理を不要とすることができる。
【００１３】
また、請求項４の発明に係る分散トランザクション処理方法は、複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理方法であって、前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求工程と、前記コミット要求工程により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答工程と、前記コミット要求工程により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示工程と、を含んだことを特徴とする。
【００１４】
この請求項４の発明によれば、アプリケーションからのコミット要求に対して複数の処理装置にコミット処理を要求し、要求したコミット処理に対していずれかの処理装置から応答があった場合にアプリケーションに対してコミットの成功を応答し、要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、処理結果がコミット完了を示す場合、故障処理装置に対してコミット処理を指示するよう構成したので、１フェーズコミットによってデータベース間の整合性を維持することができる。
【００１５】
また、請求項５の発明に係る分散トランザクション処理装置は、複数の処理装置にアプリケーションから受け付けたトランザクションの分散処理を指示する分散トランザクション処理装置であって、前記アプリケーションからのコミット要求に対して前記複数の処理装置にコミット処理を要求するコミット要求手段と、前記コミット要求手段により要求したコミット処理に対していずれかの処理装置から応答があった場合に前記アプリケーションに対してコミットの成功を応答するコミット応答手段と、前記コミット要求手段により要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、該応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、該処理結果がコミット完了を示す場合、該故障処理装置に対してコミット処理を指示する復旧指示手段と、を備えたことを特徴とする。
【００１６】
この請求項５の発明によれば、アプリケーションからのコミット要求に対して複数の処理装置にコミット処理を要求し、要求したコミット処理に対していずれかの処理装置から応答があった場合にアプリケーションに対してコミットの成功を応答し、要求したコミット処理に対して応答を行わなかった処理装置である故障処理装置が故障から復旧した際に、応答が行われなかったトランザクションである未解決トランザクションの処理について他の処理装置の処理結果を取得し、処理結果がコミット完了を示す場合、故障処理装置に対してコミット処理を指示するよう構成したので、１フェーズコミットによってデータベース間の整合性を維持することができる。
【発明の効果】
【００１７】
請求項１、２、４および５の発明によれば、１フェーズコミットによってデータベース間の整合性を維持することができるので、コミット処理を高速に行うことができるという効果を奏する。
【００１８】
また、請求項３の発明によれば、処理装置によるトランザクションログの管理だけが必要であり、当該分散トランザクション処理プログラムによるトランザクションログの管理を不要とするので、導入・運用の負担を軽減することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２０】
以下に、本発明に係る分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００２１】
まず、本実施例に係る分散トランザクション処理システムの構成について説明する。図１は、本実施例に係る分散トランザクション処理システムのシステム構成を示す機能ブロック図である。
【００２２】
同図に示すように、この分散トランザクション処理システムは、アプリケーションからトランザクションを受け付けるコンダクタ１００と、コンダクタ１００によって受け付けられたトランザクションを分散処理するｎ台のディレクタ２００1〜２００nがネットワーク４０を介して接続されて構成される。
【００２３】
コンダクタ１００は、ネットワーク４０を介してアプリケーションから受け付けたトランザクションの分散処理を関係するディレクタに指示し、各ディレクタの処理結果に基づいてトランザクションの処理結果をアプリケーションに応答する装置である。
【００２４】
なお、この分散トランザクション処理システムでは、コンダクタ１００は、１フェーズコミットによってコミット処理を行う。また、ディレクタ２００1〜２００nは、故障によってコミット処理を行えない場合以外は、コミット処理要求を受け付けると必ずコミット処理を行うことができるものとする。
【００２５】
コンダクタ１００は、要求処理部１１０と、応答処理部１２０と、ディレクタ復旧処理部１３０と、コンダクタ復旧処理部１４０と、トランザクション結果決定部１５０と、通信部１６０とを有する。
【００２６】
要求処理部１１０は、アプリケーションからトランザクションを受け付け、受け付けたトランザクションの分散処理を関係するディレクタに指示する処理部である。この要求処理部１１０は、アプリケーションからコミット要求を受け付けた場合には、関係するディレクタにコミット処理を要求する。
【００２７】
ここで、関係する全てのディレクタがダウンしていて、いずれのディレクタにもコミット処理を依頼することができない場合には、この要求処理部１１０は、アプリケーションにコミットの失敗を通知する。
【００２８】
応答処理部１２０は、要求処理部１１０によりトランザクションの分散処理を指示されたディレクタから分散トランザクション処理結果を受け取り、各ディレクタの分散トランザクション処理結果に基づいてアプリケーションにトランザクション処理結果を通知する処理部である。
【００２９】
この応答処理部１２０は、要求処理部１１０によりコミット処理を指示されたディレクタのうちのいずれかのディレクタから応答を受け取ると、コミットが成功したことをアプリケーションに通知する。
【００３０】
また、この応答処理部１２０は、要求処理部１１０によりコミット処理を指示されたいずれのディレクタからも所定の時間内に応答がない場合、すなわち、コミット処理を指示された全てのディレクタがコミット処理の指示を受信後にダウンした場合には、アプリケーションにコミット処理の結果が不明であることを通知する。
【００３１】
ディレクタ復旧処理部１３０は、ディレクタ２００1〜２００nの中にダウンしたディレクタがある場合に、ダウンしたディレクタが復旧したか否かを監視し、ディレクタが復旧した際に復旧処理を行う処理部である。
【００３２】
具体的には、このディレクタ復旧処理部１３０は、復旧したディレクタに対してコミット処理が行われていない未解決トランザクションの問合せを行い、未解決トランザクションがある場合には、トランザクション結果決定部１５０を用いてその未解決トランザクションに対して行うべき処理を決定し、決定した処理を復旧したディレクタに指示する。
【００３３】
このディレクタ復旧処理部１３０が、復旧したディレクタに対してコミット処理が行われていない未解決トランザクションの問合せを行い、未解決トランザクションがある場合には、トランザクション結果決定部１５０を用いてその未解決トランザクションに対して行うべき処理を決定し、決定した処理を復旧したディレクタに指示することによって、コミット処理の際にダウンしたディレクタがある場合にもデータベース間の整合性を保証することができる。
【００３４】
すなわち、応答処理部１２０がいずれかのディレクタから応答があった場合に直ちにアプリケーションに対してコミットの成功を通知し、残りのディレクタにコミット処理要求受信後コンダクタ１００への応答前にダウンしたディレクタがある場合にも、そのディレクタが復旧後コミット処理を行うことができ、データベース間の整合性を保証することができる。
【００３５】
コンダクタ復旧処理部１４０は、コンダクタ１００がダウンして復旧した際に、復旧処理を行う処理部である。このコンダクタ復旧処理部１４０は、復旧処理の一部として、未解決トランザクションの処理を行う。
【００３６】
具体的には、このコンダクタ復旧処理部１４０は、全てのディレクタ２００1〜２００nに対して未解決トランザクションの問合せを行い、あるディレクタが未解決トランザクションがあることを応答した場合には、トランザクション結果決定部１５０を用いてその未解決トランザクションに対して行うべき処理を決定し、決定した処理を未解決トランザクションを応答したディレクタに指示する。
【００３７】
このコンダクタ復旧処理部１４０が、復旧処理の一部として、全てのディレクタ２００1〜２００nに対して未解決トランザクションの問合せを行い、あるディレクタが未解決トランザクションがあることを応答した場合には、トランザクション結果決定部１５０を用いてその未解決トランザクションに対して行うべき処理を決定し、決定した処理を未解決トランザクションを応答したディレクタに指示することによって、ディレクタ２００1〜２００nの一部にコミット要求を送信してコンダクタ１００がダウンした場合にも、データベース間の整合性を保証することができる。
【００３８】
トランザクション結果決定部１５０は、ディレクタ復旧処理部１３０およびコンダクタ復旧処理部１４０の指示にしたがって、未解決トランザクションに対して行うべき処理を決定する処理部である。
【００３９】
具体的には、このトランザクション結果決定部１５０は、未解決トランザクションに対するコミット結果を他のディレクタに問い合わせ、他のディレクタのコミット結果に基づいて未解決トランザクションに対して行うべき処理を決定する。
【００４０】
すなわち、このトランザクション結果決定部１５０は、未解決トランザクションに対して他のディレクタがコミット処理を行った場合には、未解決トランザクションに対して行うべき処理をコミット処理に決定し、未解決トランザクションに対して他のディレクタがロールバックを行った場合には、未解決トランザクションに対して行うべき処理をロールバックに決定する。
【００４１】
通信部１６０は、アプリケーションを実行するコンピュータやディレクタ２００1〜２００nなどとネットワーク４０を介して通信する処理部であり、アプリケーションからのコミット要求やディレクタ２００1〜２００nからの応答などを受信し、アプリケーションへのコミット結果の応答やディレクタ２００1〜２００nへのコミット処理要求などを送信する。
【００４２】
ディレクタ２００1〜２００nは、分散トランザクションを処理するためにアクセスする必要がある複数のデータベースのそれぞれを管理する装置であり、コンダクタ１００からトランザクション処理要求を受け付けてトランザクションを分散処理する。なお、ディレクタ２００1〜２００nはいずれも同様の構成を有するので、ここではディレクタ２００1を例にとって説明する。
【００４３】
ディレクタ２００1は、トランザクション処理部２１０と、未解決トランザクション応答部２２０と、通信部２３０とを有する。
【００４４】
トランザクション処理部２１０は、コンダクタ１００からトランザクション処理要求を受け付けてトランザクションを分散処理し、レコード形式でデータを格納するデータファイル１０を更新する処理部である。
【００４５】
また、このトランザクション処理部２１０は、データファイル１０のレコードの格納位置を記憶するＲｏｗＩＤファイル２０およびトランザクションログを記憶するログファイル３０を更新する。
【００４６】
図２は、各レコードに対応してＲｏｗＩＤファイル２０に作成されるエントリのデータ構造の一例を示す図である。同図に示すように、このエントリには、レコード格納位置とトランザクションＩＤとが含まれる。
【００４７】
レコード格納位置は、データファイル１０のレコードの格納位置を示す。トランザクションＩＤは、このエントリに対応するレコードの追加・削除・更新を最後に行ったトランザクションを識別する識別子であり、トランザクションの処理が完了するとトランザクション処理部２１０によって更新される。
【００４８】
図３は、ログファイル３０に含まれる未解決トランザクション一覧のデータ構造の一例を示す図である。同図に示すように、この未解決トランザクション一覧には、コミット処理が行われていないｍ個のトランザクションの識別子であるトランザクションＩＤ1〜トランザクションＩＤmが記憶されている。
【００４９】
未解決トランザクション応答部２２０は、コンダクタ１００からの未解決トランザクションの問合せに対してログファイル３０の未解決トランザクション一覧に記憶されたトランザクションＩＤをコンダクタ１００に応答する処理部である。
【００５０】
この未解決トランザクション応答部２２０が、コンダクタ１００からの問合せに対して未解決トランザクションを応答することによって、コンダクタ１００は、このディレクタ２００1またはコンダクタ１００自身の復旧処理において処理が必要な未解決トランザクションを特定することができる。
【００５１】
また、この未解決トランザクション応答部２２０は、コンダクタ１００からの他のディレクタの未解決トランザクションに関するコミット結果の問合せに対して、ログファイル３０の未解決トランザクション一覧およびＲｏｗＩＤファイル２０を用いてコンダクタ１００に応答する。
【００５２】
具体的には、この未解決トランザクション応答部２２０は、コンダクタ１００から未解決トランザクションのトランザクションＩＤを受け取り、そのトランザクションＩＤが未解決トランザクション一覧にあればコミット未完了であることを応答し、未解決トランザクション一覧になければＲｏｗＩＤファイル２０内にあるか否かを調べ、ＲｏｗＩＤファイル２０内にある場合には、トランザクションがコミットされているのでコミット完了を応答し、ＲｏｗＩＤファイル２０内にない場合には、トランザクションがコミットされていないのでコミット未完了を応答する。
【００５３】
この未解決トランザクション応答部２２０が、コンダクタ１００からの他のディレクタの未解決トランザクションに関するコミット結果の問合せに対して、ログファイル３０の未解決トランザクション一覧およびＲｏｗＩＤファイル２０を用いてコミットが完了したか否かをコンダクタ１００に応答することによって、コンダクタ１００は、他のディレクタの未解決トランザクションに対する処理を決定することができる。
【００５４】
通信部２３０は、コンダクタ１００などとネットワーク４０を介して通信する処理部であり、例えば、コンダクタ１００からコミット処理要求や未解決トランザクションの問合せを受信し、コンダクタ１００へコミット結果や未解決トランザクションのトランザクションＩＤを送信する。
【００５５】
次に、コンダクタ１００によるコミット処理の処理手順について説明する。図４は、コンダクタ１００によるコミット処理の処理手順を示すフローチャートである。同図に示すように、このコンダクタ１００は、要求処理部１１０がアプリケーションからコミット要求を受信し（ステップＳ１０１）、関連するディレクタ群にコミット処理要求を送信する（ステップＳ１０２）。
【００５６】
そして、いずれかのディレクタにコミット処理要求を送信できたか否かを判定し（ステップＳ１０３）、いずれのディレクタにもコミット処理要求を送信できなかった場合には、全ディレクタがダウンしている場合であるので、アプリケーションにコミットの失敗を通知する（ステップＳ１０８）。
【００５７】
一方、いずれかのディレクタにコミット処理要求を送信できた場合には、応答処理部１２０が、いずれかのディレクタから応答があると（ステップＳ１０４、肯定）、アプリケーションへコミットの成功を通知し（ステップＳ１０５）、いずれのディレクタからも応答がない場合には、タイムアウトであるか否かを判定する（ステップＳ１０６）。
【００５８】
その結果、タイムアウトでない場合には、引き続きディレクタからの応答を待ち、タイムアウトの場合には、コミット処理要求を受け付けた全てのディレクタが要求受付後にダウンした場合であり、各ディレクタでコミット処理がどこまで行われたかわからないので、アプリケーションへコミット結果が不明であることを通知する（ステップＳ１０７）。
【００５９】
このように、コンダクタ１００がディレクタにコミット処理要求を送信し、いずれかのディレクタから応答があると直ちにアプリケーションにコミットの成功を通知するので、アプリケーションからのコミット要求を高速に処理することができる。
【００６０】
次に、図１に示したディレクタ復旧処理部１３０によるディレクタ復旧処理の処理手順について説明する。図５は、図１に示したディレクタ復旧処理部１３０によるディレクタ復旧処理の処理手順を示すフローチャートである。
【００６１】
同図に示すように、このディレクタ復旧処理部１３０は、ダウンしたディレクタがある場合に、ダウンしたディレクタに定期的に接続を試行し（ステップＳ２０１）、接続できると、未解決トランザクションの問合せを行う（ステップＳ２０２）。
【００６２】
そして、未解決トランザクションがあるか否かを判定し（ステップＳ２０３）、未解決トランザクションがある場合には、未解決トランザクションを一つ選択し（ステップＳ２０４）、選択した未解決トランザクションに対して行うべき処理を決定するトランザクション結果決定処理を行う（ステップＳ２０５）。
【００６３】
そして、未解決トランザクションに対して行うべき処理が決定したか否か、すなわち、コミットまたはロールバックが決定したか否かを判定し（ステップＳ２０６）、コミットかロールバックが決定した場合には、復旧したディレクタに対して決定結果に基づいて未解決トランザクションを処理するように指示し（ステップＳ２０７）、ステップＳ２０３に戻って次の未解決トランザクションの処理に移る。
【００６４】
一方、コミットかロールバックかが不明な場合には、復旧したディレクタにその未解決トランザクションについては指示することなく、ステップＳ２０３に戻って次の未解決トランザクションの処理に移る。
【００６５】
このように、このディレクタ復旧処理部１３０が、復旧したディレクタの未解決トランザクションの処理をトランザクション結果決定処理によって決定し、決定した処理を復旧したディレクタに指示することによって、コミット処理前にダウンしたディレクタのコミット処理を復旧後に正しく行うことができる。
【００６６】
次に、図１に示したコンダクタ復旧処理部１４０によるコミット復旧処理の処理手順について説明する。図６は、図１に示したコンダクタ復旧処理部１４０によるコミット復旧処理の処理手順を示すフローチャートである。
【００６７】
同図に示すように、このコンダクタ復旧処理部１４０は、ダウンから復旧後にディレクタを一つ選択し（ステップＳ３０１）、未解決トランザクションの問合せを行う（ステップＳ３０２）。
【００６８】
そして、未解決トランザクションがあるか否かを判定し（ステップＳ３０３）、未解決トランザクションがない場合には、全ディレクタを処理したか否かを判定し（ステップＳ３０４）、全ディレクタを処理していない場合には、ステップＳ３０１に戻って次のディレクタの処理に移り、全ディレクタを処理した場合には、処理を終了する。
【００６９】
一方、未解決トランザクションがある場合には、未解決トランザクションを一つ選択し（ステップＳ３０５）、選択した未解決トランザクションに対して行うべき処理を決定するトランザクション結果決定処理を行う（ステップＳ３０６）。
【００７０】
そして、未解決トランザクションに対して行うべき処理が決定したか否か、すなわち、コミットまたはロールバックが決定したか否かを判定し（ステップＳ３０７）、コミットかロールバックが決定した場合には、選択しているディレクタに対して決定結果に基づいて未解決トランザクションを処理するように指示し（ステップＳ３０８）、ステップＳ３０３に戻って次の未解決トランザクションの処理に移る。
【００７１】
一方、コミットかロールバックかが不明な場合には、選択しているディレクタにその未解決トランザクションについては指示することなく、ステップＳ３０３に戻って次の未解決トランザクションの処理に移る。
【００７２】
このように、このコンダクタ復旧処理部１４０がディレクタに未解決トランザクションの問合せを行い、未解決トランザクションに対して行うべき処理をトランザクション結果決定処理によって決定し、決定した処理をディレクタに指示することによって、コミット要求を一部のディレクタに送信した後にコンダクタ１００がダウンした場合にも、復旧後に残りのディレクタのコミット処理を正しく行うことができる。
【００７３】
次に、図１に示したトランザクション結果決定部１５０によるトランザクション結果決定処理の処理手順について説明する。図７は、図１に示したトランザクション結果決定部１５０によるトランザクション結果決定処理の処理手順を示すフローチャートである。なお、このトランザクション結果決定処理は、図５のステップＳ２０５の処理および図６のステップＳ３０６の処理に対応する。
【００７４】
図７に示すように、このトランザクション結果決定部１５０は、未解決トランザクションの状態が未完了であるか否かを判定し（ステップＳ４０１）、未解決トランザクションの状態が未完了である場合には、結果を未確定として処理を終了する（ステップＳ４１２）。
【００７５】
一方、未解決トランザクションの状態が未完了でない場合には、ダウンディレクタの数を数えるための変数としてダウンディレクタ数を「０」に初期化し（ステップＳ４０２）、ディレクタを一つ選択する（ステップＳ４０３）。
【００７６】
そして、選択したディレクタに対して未解決トランザクションの処理結果の問合せを行い（ステップＳ４０４）、ディレクタがダウンしているか否かを判定する（ステップＳ４０５）。
【００７７】
その結果、ディレクタがダウンしていない場合には、未解決トランザクションの処理結果の問合せに対する応答がコミットであるか否かを判定し（ステップＳ４０６）、コミットである場合には、結果をコミットとして処理を終了する（ステップＳ４０７）。
【００７８】
一方、未解決トランザクションの処理結果の問合せに対する応答がコミットでない場合には、未解決トランザクションの処理結果は不明であり、他のディレクタに問い合わせる必要があるので、ステップＳ４０９に進んで全ディレクタに対して問い合わせたか否かを判定する。
【００７９】
また、ディレクタがダウンしている場合には、ダウンディレクタ数に「１」を加え（ステップＳ４０８）、全ディレクタに対して問い合わせたか否かを判定する（ステップＳ４０９）。
【００８０】
その結果、全ディレクタに対して問い合わせていない場合には、ステップＳ４０３に戻って次のディレクタを選択し、全ディレクタに対して問い合わせた場合には、ダウンディレクタ数が「０」であるか否かを判定する（ステップＳ４１０）。
【００８１】
そして、ダウンディレクタ数が「０」である場合には、全てのディレクタがコミットを行っていないので、結果をロールバックとして処理を終了し（ステップＳ４１１）、ダウンディレクタ数が「０」でない場合には、ダウンしているディレクタによる未解決トランザクションの処理結果が不明であるので、結果を未確定として処理を終了する（ステップＳ４１２）。
【００８２】
このように、このトランザクション結果決定部１５０が、未解決トランザクションのコミット結果をディレクタに順に問い合わせ、コミットしたディレクタがある場合には、未解決トランザクションの結果をコミットと決定し、全ディレクタがコミットしなかった場合には、未解決トランザクションの結果をロールバックと決定することによって、コンダクタ１００によるトランザクション処理結果のログ記録をなくすことができる。
【００８３】
次に、２台のディレクタが分散トランザクションを処理する場合に、ディレクタがダウンする各タイミングに対応するデータベース整合性維持動作について説明する。図８は、２台のディレクタが分散トランザクションを処理する場合に、ディレクタがダウンする各タイミングに対応するデータベース整合性維持動作を示す図である。
【００８４】
同図に示すように、２台のディレクタＤ1およびＤ2がいずれもダウンしない場合には、コミット要求に対するアプリケーションへの応答はコミット成功となり、トランザクションの結果はコミットとなる。また、データベース間の整合性を維持するための動作は何も必要ない。
【００８５】
また、ディレクタＤ1がダウンせずディレクタＤ2がダウンした場合には、ディレクタＤ2がダウンしたタイミングに関係なく、コミット要求に対するアプリケーションへの応答はコミット成功となり、トランザクションの結果はコミットとなる。
【００８６】
ただし、Ｄ2がコミット指示を受け付ける前またはコミット処理中にダウンした場合には、Ｄ2は再起動後、コンダクタ１００を通じてＤ1でのコミット完了を知り、コミットする。また、Ｄ2がコミット応答前にダウンした場合には、データベース間の整合性を維持するための動作は何も必要ない。
【００８７】
また、ディレクタＤ1がコミット指示を受け付ける前にダウンし、ディレクタＤ2もコミット指示を受け付ける前にダウンした場合には、コミット要求に対するアプリケーションへの応答はコミット失敗となり、トランザクションの結果はロールバックとなり、Ｄ1およびＤ2は再起動後、コンダクタ１００を通じてコミットが完了したディレクタがなかったことを知り、ロールバックする。
【００８８】
また、ディレクタＤ1がコミット指示を受け付ける前にダウンし、ディレクタＤ2がコミット処理中にダウンした場合には、コミット要求に対するアプリケーションへの応答は不明となり、トランザクションの結果はロールバックとなり、Ｄ1およびＤ2は再起動後、コンダクタ１００を通じてコミットが完了したディレクタがなかったことを知り、ロールバックする。
【００８９】
また、ディレクタＤ1がコミット指示を受け付ける前にダウンし、ディレクタＤ2がコミット応答前にダウンした場合には、コミット要求に対するアプリケーションへの応答は不明となり、トランザクションの結果はコミットとなり、Ｄ1は再起動後、コンダクタ１００を通じてＤ2でのコミット完了を知り、コミットする。
【００９０】
また、ディレクタＤ1がコミット処理中にダウンし、ディレクタＤ2もコミット処理中にダウンした場合には、コミット要求に対するアプリケーションへの応答は不明となり、トランザクションの結果はロールバックとなり、Ｄ1およびＤ2は再起動後、コンダクタ１００を通じてコミットが完了したディレクタがなかったことを知り、ロールバックする。
【００９１】
また、ディレクタＤ1がコミット処理中にダウンし、ディレクタＤ2がコミット応答前にダウンした場合には、コミット要求に対するアプリケーションへの応答は不明となり、トランザクションの結果はコミットとなり、Ｄ1は再起動後、コンダクタ１００を通じてＤ2でのコミット完了を知り、コミットする。
【００９２】
また、ディレクタＤ1がコミット応答前にダウンし、ディレクタＤ2もコミット応答前にダウンした場合には、コミット要求に対するアプリケーションへの応答は不明となり、トランザクションの結果はコミットとなり、データベース間の整合性を維持するための動作は何も必要ない。
【００９３】
上述してきたように、本実施例では、アプリケーションからのコミット要求に対して関連するディレクタに要求処理部１１０がコミット処理要求を送信し、応答処理部１２０がいずれかのディレクタから応答を受け取った場合にアプリケーションにコミットの成功を通知し、ディレクタがダウンして未解決トランザクションがある場合には、ディレクタが復旧した際に、ディレクタ復旧処理部１３０が他のディレクタによる未解決トランザクションの処理結果に基づいて未解決トランザクションの処理を復旧したディレクタに指示することとしたので、１フェーズコミットによってデータベース間の整合性を維持し、もってコミット処理を高速化することができる。
【００９４】
また、ディレクタにコミット処理要求を送信中にコンダクタ１００がダウンして一部のディレクタにコミット処理要求が送信できなかった場合には、コンダクタ復旧処理部１４０が復旧後に各ディレクタに対して未解決トランザクションの問合せを行い、ディレクタが応答した未解決トランザクションに対する他のディレクタの処理結果に基づいて未解決トランザクションの処理を、応答したディレクタに指示することとしたので、１フェーズコミットによってデータベース間の整合性を維持し、もってコミット処理を高速化することができる。
【００９５】
また、本実施例では、コンダクタ１００は、ダウンから復旧した際にディレクタに未解決トランザクションを問合せることによって復旧処理を行うこととしたので、トランザクションログを保有する必要がなく、システムの導入・運用の負担を軽減することができる。
【００９６】
なお、本実施例では、コンダクタおよびディレクタについて説明したが、コンダクタやディレクタが有する構成をソフトウェアによって実現することで、同様の機能を有するコンダクタプログラムやディレクタプログラムを得ることができる。そこで、これらのコンダクタプログラムやディレクタプログラムを実行するコンピュータについて説明する。
【００９７】
図９は、本実施例に係るコンダクタプログラムおよびディレクタプログラムを実行するコンピュータを示す図である。なお、ここでは、コンダクタプログラムとディレクタプログラムを一つのコンピュータで実行する場合について説明するが、コンダクタプログラムとディレクタプログラムを別のコンピュータで実行することもできる。また、アプリケーションとコンダクタプログラムを一つのコンピュータで実行することもできる。
【００９８】
同図に示すように、このコンピュータ３００は、ＨＤＤ３１０と、ＲＡＭ３２０と、ＲＯＭ３３０と、ＣＰＵ３４０と、ＬＡＮインタフェース３５０と、Ｉ／Ｏインタフェース３６０とを有する。
【００９９】
ＨＤＤ３１０は、コンダクタプログラム３１１およびディレクタプログラム３１２を記憶する記憶装置であり、ディレクタプログラム３１２が使用するデータファイル１０、ＲｏｗＩＤファイル２０およびログファイル３０も記憶する。
【０１００】
ＲＡＭ３２０は、ＨＤＤ３１０から読み出されたコンダクタプログラム３１１およびディレクタプログラム３１２やプログラムの実行途中結果などを記憶するメモリであり、ＲＯＭ３３０は、定数などを記憶した読み出し専用メモリである。
【０１０１】
ＣＰＵ３４０は、ＲＡＭ３２０からコンダクタプログラム３１１およびディレクタプログラム３１２を読み出し、コンダクタプロセス３４１およびディレクタプロセス３４２として実行する処理装置である。
【０１０２】
ＬＡＮインタフェース３５０は、ＬＡＮ（ネットワーク）と接続するためのインタフェースであり、Ｉ／Ｏインタフェース３６０は、キーボードやマウスなどの入力装置および表示装置を接続するインタフェースである。
【０１０３】
そして、このコンピュータ３００において実行されるコンダクタプログラム３１１およびディレクタプログラム３１２は、フロッピィディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの可搬型記憶媒体に記憶され、これらの記憶媒体から読み出されてコンピュータ３００にインストールされる。
【０１０４】
あるいは、コンダクタプログラム３１１およびディレクタプログラム３１２は、ＬＡＮインタフェース３５０を介して接続された他のコンピュータのデータベースなどに記憶され、データベースなどから読み出されてコンピュータ３００にインストールされる。そして、インストールされたコンダクタプログラム３１１およびディレクタプログラム３１２は、ＨＤＤ３１０に記憶される。
【産業上の利用可能性】
【０１０５】
以上のように、本発明に係る分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理装置は、分散トランザクションシステムに有用であり、特に、コミット処理を高速化したい場合に適している。
【図面の簡単な説明】
【０１０６】
【図１】図１は、本実施例に係る分散トランザクション処理システムのシステム構成を示す機能ブロック図である。
【図２】図２は、各レコードに対応してＲｏｗＩＤファイルに作成されるエントリのデータ構造の一例を示す図である。
【図３】図３は、ログファイルに含まれる未解決トランザクション一覧のデータ構造の一例を示す図である。
【図４】図４は、コンダクタによるコミット処理の処理手順を示すフローチャートである。
【図５】図５は、図１に示したディレクタ復旧処理部によるディレクタ復旧処理の処理手順を示すフローチャートである。
【図６】図６は、図１に示したコンダクタ復旧処理部によるコミット復旧処理の処理手順を示すフローチャートである。
【図７】図７は、図１に示したトランザクション結果決定部によるトランザクション結果決定処理の処理手順を示すフローチャートである。
【図８】図８は、２台のディレクタが分散トランザクションを処理する場合に、ディレクタがダウンする各タイミングに対応するデータベース整合性維持動作を示す図である。
【図９】図９は、本実施例に係るコンダクタプログラムおよびディレクタプログラムを実行するコンピュータを示す図である。
【符号の説明】
【０１０７】
１０    データファイル
２０    ＲｏｗＩＤファイル
３０    ログファイル
４０    ネットワーク
１００    コンダクタ
１１０    要求処理部
１２０    応答処理部
１３０    ディレクタ復旧処理部
１４０    コンダクタ復旧処理部
１５０    トランザクション結果決定部
１６０    通信部
２００1〜２００n    ディレクタ
２１０    トランザクション処理部
２２０    未解決トランザクション応答部
２３０    通信部
３００    コンピュータ
３１０    ＨＤＤ
３１１    コンダクタプログラム
３１２    ディレクタプログラム
３２０    ＲＡＭ
３３０    ＲＯＭ
３４０    ＣＰＵ
３４１    コンダクタプロセス
３４２    ディレクタプロセス
３５０    ＬＡＮインタフェース
３６０    Ｉ／Ｏインタフェース
【図１】
0004500318.tif 000002
【図２】
0004500318.tif 000003
【図３】
0004500318.tif 000004
【図４】
0004500318.tif 000005
【図５】
0004500318.tif 000006
【図６】
0004500318.tif 000007
【図７】
0004500318.tif 000008
【図８】
0004500318.tif 000009
【図９】
0004500318.tif 000010