JP5223457B2 - 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法 - Google Patents

分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法 Download PDF

Info

Publication number
JP5223457B2
JP5223457B2 JP2008134840A JP2008134840A JP5223457B2 JP 5223457 B2 JP5223457 B2 JP 5223457B2 JP 2008134840 A JP2008134840 A JP 2008134840A JP 2008134840 A JP2008134840 A JP 2008134840A JP 5223457 B2 JP5223457 B2 JP 5223457B2
Authority
JP
Japan
Prior art keywords
log
commit
group
log group
participant
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008134840A
Other languages
English (en)
Other versions
JP2009282790A (ja
Inventor
量 松村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008134840A priority Critical patent/JP5223457B2/ja
Priority to US12/389,979 priority patent/US8185493B2/en
Publication of JP2009282790A publication Critical patent/JP2009282790A/ja
Priority to US13/466,558 priority patent/US8433676B2/en
Application granted granted Critical
Publication of JP5223457B2 publication Critical patent/JP5223457B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Description

本発明は、データベースの分散トランザクションに係り、特に、該分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法に関する。
コンピュータシステムにおいて、トランザクションは、複数の処理から構成される一連の処理手続と定義される。トランザクションの一形態として分散トランザクションがある。分散トランザクションでは、分散コンピュータシステムの各ノード上でトランザクションが実行される。例えば、複数のデータベースの更新も分散トランザクションの一形態がある。この場合、各データベースは、分散コンピュータシステムの各ノード(例えば、データベース管理システムを備えたデータベースサーバなど)に存在し、トランザクション処理において、各ノードが管理しているデータベースの更新が行われる。
分散トランザクションにおいても、単一のコンピュータシステムで実行されるトランザクションと同様に、原子性(atomicity)を保証する必要がある。原子性は、トランザクションは、完全に実行されるか、または、全く実行されないかのいずれかでなくてはならないという性質である。トランザクションの正常完了はコミットと呼ばれ、失敗はアボートと呼ばれる。
分散トランザクションにおいては、各コンピュータシステムは独立に障害を起こすため、原子性を保証することは、単一のコンピュータシステムで実行されるトランザクションに比べはるかに難しい。この困難性を解決するために、分散トランザクションでは、トランザクションのコミットに2相コミットプロトコル(two-phase commit protocol)を使用する。
分散トランザクションにおいては、トランザクションに関与するコンピュータシステムは、トランザクションがどこかでコミットされる前に、トランザクションにおける更新を不揮発性の記憶媒体に永続的に格納しなければならない。このような処理を事前に行うことで、トランザクションがコミットする前にシステムがダウンした場合でも、その障害復旧後に、トランザクションをコミットすることが可能になる。
2相コミットプロトコルでは、このように、分散トランザクションに関与する各コンピュータシステムが、その更新に関する情報やデータを、トランザクションがコミットする前に不揮発性記憶媒体に格納することで、原子性を保証するようにしている。
ここで、2相コミットプロトコルについて説明する。尚、以下では、2相コミットプロトコルを、単に、2相コミットと記載する場合もある。
2相コミットプロトコルにおいては、分散トランザクションに関与する複数のコンポーネント(例えば、データベース管理装置)を、1つの調整者(coordinator)とその他の参加者(participants)に分ける。2相コミットプロトコルは、以下のようにして行われる。
[第1相]
1)調整者は、各参加者に「準備要求」を送る。
2)調整者は、準備要求を送った全ての参加者からの応答を待つ。
3)調整者から準備要求を受け取った参加者は、「準備完了ログ」を記憶装置に書き込む。そして、「準備完了」または「拒否」を調整者に回答する。この回答は、一般に、「投票」と呼ばれる。
[第2相]
1)調整者は、全ての参加者からの投票結果を基に、「コミット」か「アボート」を決定し、「コミットログ」を記憶装置に書き込む。この場合、調整者は、全ての参加者から「準備完了」の投票を受け取った場合にのみ、「コミット」を決定する。
2)調整者は、上記決定結果(コミットまたはアボート)を全ての参加者に送る。
3)参加者は、上記決定結果を受け取ると、調整者に「完了」を返し、「トランザクション完了ログ」を記憶装置に書き込む。
ここで、上記第1相と第2相の間は、“インダウト(in doubt)状態”または“不明(uncertain)状態”の期間と呼ばれる。参加者は、投票を行う前ならいつでもアボートできるが、「準備完了」を送った後は、調整者から決定結果を受け取るまで、コミットもアボートもできない。これを守らなければ、原子性が破綻する可能性があるからである。このように、インダウト状態の間は、参加者は、コミットしてよいのかアボートしてよいのか不明な期間である。参加者がインダウト状態である期間に、調整者がダウンすると、参加者はブロックされる。つまり、参加者は、コミットもアボートもできない状況におかれる。このように、2相コミットプロトコルは、参加者がインダウト状態のときにブロックされる可能性があるという問題を有している。
ところで、本出願人は、以前、データを記憶するデータ記憶装置毎に、そのデータのログ情報を記憶するログ記憶装置を持つような装置に関する発明を出願している(特許文献1参照)。なお、本明細書では、上記のデータ記憶装置とログ記憶装置をパッケージしたグループを“ロググループ”と呼ぶことにする。
このようなデータベース管理装置を複数備えた分散コンピュータシステムにおいて、分散トランザクションが実行された場合の2相コミットプロトコルにおけるインダウト状態期間の前後の処理を説明する。参加者は、調整者から準備要求のメッセージを受け取ると、「準備完了ログ」をログ記憶装置に書き込み、その後、調整者に「準備完了」のメッセージを送る。調整者は、全ての参加者から準備完了のメッセージを受け取ると、コミットもしくはアボートを決定し、「トランザクション完了ログ」をログ記憶装置に書き込む。その後、全ての参加者に上記決定結果を送る。
上記トランザクション完了ログと上記準備完了ログは、インダウト状態を解決するために、それぞれ、下記(1)、(2)の情報を格納している。
(1)トランザクションの最終結果の通知先(トランザクション完了ログ)
(2)トランザクションの最終結果の問い合せ先(準備完了ログ)
インダウト状態の期間中に参加者がダウンした場合、参加者がその障害から復旧したとき、ログ記憶装置には準備完了ログは書き込まれているがトランザクション完了ログ(コミットまたはアボートのログ)は書き込まれていない状態となっている。このため、参加者はブロックされる。このため、参加者は、ブロックされたトランザクションを解決すするために「終了プロトコル」を実行する。
終了プロトコルは、参加者が障害からの回復を行うときに、ブロックされたトランザクションの解決を試みるために参加者が実行する処理である。
終了プロトコルの一例においては、参加者は、調整者に再び投票を送る。参加者は、この投票を調整者に送るために、準備完了ログから「トランザクションの最終結果の通知先」を取得する。トランザクションの最終結果の通知先は、調整者の通信アドレス(例えば、IPアドレス)となっているからである。
調整者は、参加者から上記投票を受け取ると、既にその参加者から投票を受け取っている場合には、参加者が投票結果を受け取っていないと判断して、参加者に再び投票結果を送る。調整者は、この投票結果を参加者に送るために、上記トランザクション完了ログから「トランザクションの最終結果の通知先」を取得する。このトランザクションの最終結果の通知先は、参加者の通信アドレスとなっているからである。
このように、従来は、上記トランザクション結果の通知先及びトランザクション結果の問い合せ先は、それぞれ、参加者と調整者の通信アドレスとなっていた。
ところで、分散トランザクションに関連する技術としては、2相コミット機能を持たないデータベース管理システムにおいて、擬似的な2相コミットを応用プログラムレベルで実現する発明が知られている(特許文献2参照)。
また、クラスタ構成の分散データベースには、Shared Nothing型とShared Disk型の2種類がある。Shared Nothing型の分散データベースは、データベース管理装置(データベースサーバ)がリソースを共有しない形態のシステムである。Shared Disk型の分散データベースは、複数のデータベース管理装置がリソースを共有する形態のシステムである。Shared Nothing型のクラスタシステムで分散トランザクションをサポートしているデータベースとしては、日立製作所株式会社のHiRDB、Microsoft CorporationのSQL Serverなどがある。また、米国のオラクル社は、Shared Disk型の分散データベースの分散トランザクションにおいて、2相コミット中にデータベース管理装置がダウンした場合の解決手法を提示している(非特許文献1参照)。
特開平6−337810号公報 特開昭63−008845号公報 オラクル社の上記解決手順が公開されているホームページのURL(http://otndn.oracle.co.jp/document/products/oracle10e/102/doc cd/server.102/B19224-02/ds concepts.htm#685610)
上記従来のロググループを管理するデータベース管理装置を複数備える分散コンピュータシステムは、分散トランザクションを実行すると以下に述べるような問題が発生するという欠点があった。
(1)複数のロググループを更新するような分散トランザクションの実行中に、その分散トランザクションに参加している、あるデータベース管理装置がダウンし、そのデータベース管理装置が管理していたロググループの管理権が別のデータベース管理装置に移動した場合、分散トランザクションの復旧処理を行うことができなかった。ここで、管理権とは、ロググループの記憶装置に対するデータの参照/更新の権利のことである。
例えば、上記ダウンしたデータベース管理装置が調整者であり、かつ、そのダウンが
参加者がインダウト状態となっている期間中に発生した場合、参加者のログ記憶装置に記録されている準備完了ログに格納されている「トランザクションの最終結果の問い合せ先」は無効となる。何故ならば、そのトランザクションの最終結果の問い合せ先は、上記ダウンした調整者の通信アドレスなので、参加者が、その通信アドレスを用いて、トランザクションの最終結果を問い合せても、トランザクションの最終結果を受け取ることはできないからである。このため、参加者はインダウト状態を解決することが不可能となり、分散トランザクションの復旧が行えなかった。
また、上記ダウンしたデータベース管理装置が参加者であり、かつ、その参加者が調整者となっているデータベース管理装置に対して準備完了のメッセージを通知した後に、上記参加者がダウンしたとする。この場合、調整者のログ記憶装置に記録されているトラン
ザクション完了ログに格納されている「トランザクションの最終結果の通知先」は、そのダウンした参加者の通信アドレスとなっている。しかし、この通信アドレスは無効である。何故ならば、上記ダウンした参加者が管理していたロググループの管理権の移動先のデータベース管理装置の通信アドレスは、上記トランザクションの最終結果の通知先に格納されている通信アドレスではないからである。したがって、上記ロググループの管理権を引き継いだデータベース管理装置は、トランザクションの最終結果を知ることが不可能となり、インダウト状態を解決することができなくなる。
このように、従来は、ロググループを管理する、複数のデータベース管理装置から構成される分散データベースシステムにおいて、複数のロググループを更新するような分散トランザクションが実行された場合、2相コミットのインダウト状態期間中に、該分散トランザクションに参加しているデータベース管理装置がダウンすると、その分散トランザクションの復旧処理を行うことができないという問題があった。
(2)上記(1)の問題を解決したとしても、次のような問題が残る。
ロググループの管理権が移動する場合、いかなるログ記憶装置も持たないデータベース管理装置が生じる。例えば、記憶媒体障害などの理由により、自装置が管理していたロググループの管理権が別のデータベース管理装置に移動したデータベース管理装置は、ログ記憶装置を持たない状態となる。このようなロググループを持たないデータベース管理装置に対して、分散トランザクションを実行する更新アプリケーション(データを更新するアプリケーション)が接続し、該更新アプリケーションがコミットを行うと、該ロググループを持たないデータベース管理装置(調整者)は、分散トランザクションの最終結果(コミットまたはアボート)をログ記憶装置に記録できないため、2相コミットの実行中に、分散トランザクションに参加しているデータベース管理装置がダウンすると、分散トランザクションを復旧できない。例えば、調整者ダウンの場合に、参加者は該分散トランザクションの最終結果を問い合わせる先が存在しなくなるからである。このため、参加者はインダウト状態を解決できなくなり、分散トランザクションの復旧が不可能となる。
本発明の目的は、複数のロググループを更新するような分散トランザクションの2相コミットのインダウト状態期間中に、該複数のロググループに属するロググループの管理権が別のデータベース管理装置に移動しても、分散トランザクションを復旧できるようにすることである。
本発明は、データを記憶するデータ記憶装置と該データのログを記憶するログ記憶装置のパッケージであるロググループを備え、該ロググループの管理権がシステム内のデータベース管理装置間で移動可能な分散トランザクションシステムの2相コミットプロトコルにおけるインダウト状態の解決方法を前提とする。
本発明の方法は、
各ロググループに一意の識別子を付与し、各ロググループの管理権を持つデータベース管理装置に関する情報を第1のテーブルに登録するステップと、
複数のロググループが参加する分散トランザクションの2相コミットにおいて調整者となるデータベース管理装置が管理するロググループの中で代表となるロググループ(グローバル代表ロググループ)のログ記憶装置に出力される準備完了ログ(第1の準備完了ログ)に、該分散トランザクションの参加者となっているデータベース管理装置が管理するロググループの識別子のリスト(参加ロググループリスト)を記憶するステップと、
前記2相コミットにおいて参加者となるデータベース管理装置が管理するロググループのログ記憶装置に出力する準備完了ログ(第2の準備完了ログ)に、前記グローバル代表ロググループの識別子を記憶するするステップと、
2相コミットのインダウト状態期間中に、前記グローバル代表ロググループの管理権が別のデータベース管理装置に移動した場合に、該グローバル代表ロググループの管理権を該別のデータベース管理装置が持つように、前記第1のテーブルを書き換えるステップと、
2相コミットのインダウト状態期間中に、前記グローバル代表ロググループ以外のロググループの管理権が別のデータベース管理装置に移動した場合に、該ロググループの管理権を該別のデータベース管理装置が持つように前記第1のテーブルを書き換えるステップと、
インダウト状態となっている参加者は、前記第2の準備完了ログに記憶されているグローバル代表ロググループの識別子と前記第1のテーブルを参照して、該グローバル代表ロググループの管理権を持つデータベース管理装置に、トランザクション結果の問合せを送信するステップと、
前記調整者は、インダウト状態となっている参加者からトランザクション結果の問合せを受信した場合に、前記第1の準備完了ログに記憶されているロググループの識別子のリストと前記第1のテーブルを参照して、前記参加者に該トランザクション結果を返信するステップとを備える。
本発明によれば、複数のロググループが参加する分散トランザクションの2相コミットにおいて調整者となるデータベース管理装置が管理するロググループの中で代表となるロググループ(グローバル代表ロググループ)のログ記憶装置に出力される準備完了ログ(第1の準備完了ログ)に、該分散トランザクションの参加者となっているデータベース管理装置が管理するロググループの識別子のリスト(参加ロググループリスト)を記憶し、
前記2相コミットにおいて参加者となるデータベース管理装置が管理するロググループのログ記憶装置に出力する準備完了ログ(第2の準備完了ログ)に、前記グローバル代表ロググループの識別子を記憶するようにしたので、2相コミットのインダウト状態期間中にロググループの管理権が別のデータベース管理装置に移動する事態が発生しても、調整者と参加者は互いに通信可能となる。したがって、参加者はトランザクション結果の問合せを調整者に送信し、調整者は該参加者からのトランザクション結果の問合せに対して、トランザクション結果を返信することが可能となる。このため、2相コミットのインダウト期間中に、ロググループの管理権が別のデータベース管理装置に移動しても、インダウト状態となっているロググループを、インダウト状態から解決することができる。
開示の方法は、複数のロググループを更新するような分散トランザクションの2相コミットプロトコルの実行中に、あるデータベース管理装置が管理していたロググループの管理が別のデータベース管理装置に移動した場合でも、分散トランザクションを復旧することができるという効果を奏する。
以下、図面を参照しながら、本発明の実施形態を説明する。
[構成]
{システム構成}
図1と図2は、本発明を適用した実施形態の構成を示す図である。
{分散トランザクションシステムの第1の形態}
図1は、本発明を適用した分散トランザクションシステムの一形態を示す図である。
図1に示す分散トランザクションシステム1は、クラスタ管理装置10、複数のデータベース管理装置100(100−1〜100−n)を備えている。クラスタ管理装置10は、各データベース管理装置100を管理する装置であり、各データベース管理装置100と通信回線により接続されている。クラスタ管理装置10は、各データベース管理装置100に起動や停止を指示する機能や、各データベース管理装置100の稼動状況を監視する機能を備えている。クラスタ管理装置10は、ダウンしたデータベース管理装置100を検知すると、そのダウンしたデータベース管理装置100を他のデータベース管理装置100に通知する。クラスタ管理装置10は、上記各データベース管理装置100に対する指示や通知を、例えば、メッセージにより行う。
複数のデータベース管理装置100はネットワーク(不図示)を介して相互接続されており、クラスタシステムを構成している。データベース管理装置100は、例えば、データベース管理システムが実装されたデータベースサーバである。分散トランザクションシステム1においては、全てのデータベース管理装置100は、1または複数のロググループ200を備えている。また、各データベース管理装置100は、管理権の優先順位定義ファイル300を備える。
ロググループ200は、ログ記憶装置201とデータ記憶装置202をパッケージングしたものである。データ記憶装置202は、分散トランザクションによりデータの更新が行われるデータベースを格納する記憶装置である。ログ記憶装置201は、データ記憶装置202に格納されているデータベースの更新ログを記録する記憶装置である。ロググループ200内のデータ記憶装置202内のデータベースの復旧は、同一ロググループ内のログ記憶装置201に記録されているログを基にして行われる。このように、ロググループ200内のログ記憶装置201とデータ記憶装置202は対になっている。データ記憶装置202とログ記憶装置201は、例えば、同一の外部記憶装置であってもかまわない。
データベース管理装置100は、主記憶装置内に、ロググループ偏在表110を格納している。ロググループ偏在表110は、各ロググループ200を現在管理しているデータベース管理装置100を示す表である。データベース管理装置100は、このロググループ偏在表110を参照することによって、システム内のロググループ200が、現在、どのデータベース管理装置100によって管理されているのかを知ることができる。このロググループ偏在表110は、システム内の全てのデータベース管理装置100において共通である。このロググループ偏在表110は、管理権の優先順位定義ファイル300の内容に基づき決定される。ロググループ偏在表110は、ロググループの管理権が別のデータ記憶装置202に移動する度に更新される。この更新は、管理権の優先順位定義ファイル300の内容に基づいて行われる。
管理権の優先順位定義ファイル300は、各ロググループ200について、その管理権を持つデータ記憶装置202の優先順位を定義したファイルである。各ロググループ200はいずれかのデータベース管理装置100によって管理されるので、上記管理権は、いずれかのデータベース管理装置100に帰属する。したがって、ロググループ200の管理権の優先順位は、ロググループ200が帰属するデータベース管理装置100の優先順位と同義である。管理権の優先順位定義ファイル300は、ロググループ200とは別の不揮発性の記憶装置(不図示)に格納される。この管理権の優先順位定義ファイル300は、システム内の全てのデータベース管理装置100において共通である。
ロググループ偏在表110は、管理権の優先順位定義ファイル300を、各データベース管理装置100の外部記憶装置に同一の複製を配置し、それらを、各データベース管理装置100のDBMS(Database Management Syatem)プロセスが主記憶装置上に読み込むことで設定される。
各データベース管理装置100は、クラスタ管理装置10からダウンしたデータベース管理装置100を通知されると、まず、ロググループ偏在表110を参照して、そのダウンしたデータベース管理装置100が管理していたロググループ200を調べる。そして
、そのダウンしたデータベース管理装置100が管理していたロググループ200を知ると、次に、管理権の優先順位定義ファイル300を参照し、ダウンしたデータベース管理装置100が管理していたロググループ200を自分が管理する必要があるか調べる。この場合、自分が管理する必要があれば、ダウンしたデータベース管理装置100が管理していたロググループ200の管理を引き受ける。
以後の説明では、便宜上、データベース管理装置100−1、100−2、・・・、100−nを、それぞれ、データベース管理装置1、2、・・・、nと表記する場合もある。各データベース管理装置1、2、・・・、nには、それぞれ、DBMS1、2、・・・、nという名称(装置名)が割り当てられている。こられの名称は、データベース管理装置iの通信アドレスを取得するために利用される。図示してはいないが、装置名DBMSiをデータベース管理装置iの通信アドレスに変換するためのテーブルがシステム内に設けられており、この変換テーブルを参照することで、装置名DBMSiを有するデータベース管理装置iの通信アドレスを取得することが可能になっている。また、以後の説明では、データベース管理装置をDBMSと呼ぶ場合もある。
また、システム立ち上げ時においてデータベース管理装置i(i=1〜n)により管理されるロググループ200を、ロググループik(k=1〜m)と表記することにする。本実施形態においては、各ロググループikに一意の識別子Gikを割り当てる。固有の識別子Gikが割り当てられたロググループik内のログ記憶装置201とデータ記憶装置202は、それぞれ、ログ記憶装置ik、データ記憶装置ikと表記される。また、以後の説明では、ロググループikをGikと表記する場合もある。これは、例えば、アプリケーションが分散トランザクションにおけるデータ更新要求において、データを更新するロググループikを識別子Gikにより指定するからである。また、データベース管理装置間同士でのパケット通信においても、ロググループikを識別子Gikにより指定するからである。
図1に示すロググループ偏在表110のデータ構造を説明する。ロググループ偏在表110は、システム内の各ロググループik(i=1〜n、k=1〜m)を管理するDBMSiに関する情報を、ロググループikに割り当てられた識別子GikとDBMSiとの対応関係により記憶している表である。ロググループ偏在表110は、この対応関係を、例えば、リスト構造により記憶する。
次に、図1に示す管理権の優先順位定義ファイル300のデータ構造について説明する。
管理権の優先順位定義ファイル300は、各ロググループGikに対するDBMSの管理権の優先順位を定義している表である。ここで、管理権とは、ロググループikを管理する権利である。管理権の優先順位定義ファイル300は、各ロググループikに割り当てられた識別子Gikと各データベース管理装置iに割り当てられた装置名DBMSiを利用して、各ロググループikに対するデータベース管理装置iの管理権の優先順位を定義している。図1に示す管理権の優先順位定義ファイル300は、ロググループ11に対するデータベース管理装置iの管理権の優先順位を、ロググループ11に割り当てられた識別子G11を用いて、DBMS1、DBMS2、・・・の順であると定義している。また、ロググループ21に対するデータベース管理装置iの管理権の優先順位を、ロググループ21に割り当てられた識別子G21を用いて、DBMS2、DBMS3、・・・の順であると定義している。管理権の優先順位定義ファイル300は、他のロググループikに対するデータベース管理装置iの管理権の優先順位についても、同様な手法により定義している。
尚、図1に示す分散トランザクションシステム1においては、各ロググループGikが
備えるロググループ200の個数は皆同一となっているが、個々のデータベース管理装置100毎に、管理するロググループ200の個数が異なっていてもよい。これは、図2に示す分散トランザクションシステムについても同様である。
{分散トランザクションシステムの第2の形態}
図2は、本発明を適用した分散トランザクションシステムの別の形態を示す図である。図2において、図1に示す構成要素と同一の構成要素には同じ符号を付与しており、これらの構成要素についての詳しい説明は省略する。
図2に示す分散トランザクションシステム2が分散トランザクションシステム1と異なるのは、データベース管理装置100´(100´−2)がロググループ200を備えていないことである。このように、本発明は、ロググループが割り当てられていないデータベース管理装置を備える分散トランザクションシステムにも適用可能である。
データベース管理装置100´(データベース管理装置2)は、主記憶装置にロググループ偏在表110を記憶している。これは、他のデータベース管理装置100がダウンした場合、そのデータベース管理装置100が管理していたロググループ200の管理権がデータベース管理装置100´(DBMS2)に移動する可能性があるからである。また、データベース管理装置100´は、管理権の優先順位定義ファイル300´も備える。
管理権の優先順位定義ファイル300´は、図1に示す管理権の優先順位定義ファイル300とは若干内容が異なる。これは、図1のデータベース管理装置2に相当するデータベース管理装置100´が管理すべきロググループ200を有していないからである。したがって、管理権の優先順位定義ファイル300´は、ロググループ21、22に対するデータベース管理装置iの管理権の優先順位を定義していない。
{データベース管理装置がダウンした場合のロググループの管理権の移動}
図3は、データベース管理装置がダウンした場合のロググループの管理権の移動によるシステム構成の変化を示す図である。尚、図3において、図1に示す構成要素と同じ構成要素には同じ符号を付与している。また、ロググループを簡略化して示している。
図3に示す分散トランザクションシステム3は、図1に示す分散トランザクションシステム1が、3つのデータベース管理装置1、2、3を備えている場合に該当する。
分散トランザクションシステム3の初期状態においては、データベース管理装置1はロググループ11(識別子G11)、12(識別子G12)を管理し、データベース管理装置2はロググループ21(識別子G21)、22(識別子G22)を管理している。また、データベース管理装置3は、ロググループ31(識別子G31)、32(識別子G32)を管理している。このロググループ11、12、21、22、31、32に対するデータベース管理装置1、2、3の管理情報は、不図示の管理権の優先順位定義ファイル300に定義されている。すなわち、分散トランザクションシステム3の初期状態においては、ロググループ11、12、21、22、31、32は、管理権の優先順位が最も高いデータベース管理装置iよって管理される。この管理状態は、データベース管理装置1〜3のいずれかがダウンするまで継続される。
データベース管理装置1が障害発生によりダウンすると、クラスタ管理装置10は、その障害を検知し、データベース管理装置1のダウンを、データベース管理装置1の装置名DBMS1を用いて、データベース管理装置1以外の全てのデータベース管理装置100に通知する。この場合、データベース管理装置2(装置名DBMS2)は、クラスタ管理装置10からの上記通知を受け取ると、管理権の優先順位定義ファイル(不図示)を参照して、データベース管理装置1が管理していたロググループ11(識別子G11)の管理権を引き継ぐ。また、データベース管理装置3は、同様にして、データベース管理装置1が管理していたロググループ12(識別子G12)の管理権を引き継ぐ。データベース管理装置2は、ロググループ11の管理権の引継ぎ処理が終了すると、そのロググループ11の識別子G11を用いて、「G11の管理権の引継ぎ完了通知」をデータベース管理装置3に送信する。一方、データベース管理装置3は、ロググループ12の管理権の引継ぎ処理が終了すると、そのロググループ12の識別子G12を用いて、「G12の引継ぎ完了通知」をデータベース管理装置2に送信する。
データベース管理装置2とデータベース管理装置3は、上記通知を受け取ると、図2に示すように、ロググループ偏在表110´をロググループ偏在表110Aに変更する。ロググループ偏在表110Aには、ロググループ11の管理権をデータベース管理装置2が保有し、ロググループ12の管理権をデータベース管理装置3が保有する旨が、ロググループ11の識別子G11とロググループ12の識別子G12を用いて記述されている。
{トランザクション完了ログ出力先の優先順位定義表}
本実施形態の分散トランザクションシステム1または2において、各データベース管理装置i(i=1〜n)は、図4に示すように、主記憶装置内に、トランザクション完了ログ出力先の優先順位定義表120を記憶している。このトランザクション完了ログ出力先の優先順位定義表120は、システム内の各ロググループik(i=1〜n、k=1〜m)の重要度を定義している表である。図4に示すトランザクション完了ログ出力先の優先順位定義表120においては、重要度の高いロググループikから順に、その識別子Gikが記述されている。このトランザクション完了ログ出力先の優先順位定義表120は、後述するように、調整者や参加者となったデータベース管理装置iが「ローカル代表ロググループ」などを決定するために用いられる。
トランザクション完了ログ出力先の優先順位定義ファイル310は、トランザクション完了ログ出力先の優先順位定義表120と全く同じものであり、外部記憶装置(不図示)に格納されているファイルである。データベース管理装置iは、外部記憶装置からトランザクション完了ログ出力先の優先順位定義ファイル310を読み出し、それを、トランザクション完了ログ出力先の優先順位定義表120として主記憶装置に記憶する。主記憶装置にトランザクション完了ログ出力先の優先順位定義表120を記憶するのは、処理を高速化するためである。
[動作]
次に、上記構成の分散トランザクションシステムの動作を説明する。
公知のように、分散トランザクションにおける2相コミット(2相コミットプロトコル)においては、データベース管理装置は1つの「調整者」とその他の「参加者」に分かれる。ソフトウェア処理の観点では、アプリケーションの接続先のプロセスを「調整者」と呼び、間接的な接続先のプロセスを「参加者」と呼ぶ。換言すると、分散トランザクションを開始するデータベース管理装置(のプロセス)が「調整者」であり、調整者からの要求を受けて該分散トランザクションに関与するデータベース管理装置(のプロセス)が「参加者」である。
図5は、分散トランザクションにおける調整者のデータ更新処理を示すフローチャートである。
調整者は、アプリケーションから要求待ちとなっているときに、アプリケーションから要求を受けると(ステップS11)、その要求がセッションの終了指示であるかどうかを判別する(ステップS12)。ステップS12において、セッションの終了指示でない(データ更新指示である)と判別すると(ステップS12、NO)ステップS13に進み、セッションの終了指示であると判別するとステップS24に進む。
ステップS13においては、ロググループ偏在表110を参照して、データ更新のためには他のデータベース管理装置(DBMS)へのアクセスが必要であるか判断する。そして、他のDBMSへのアクセスが不必要であると判断すれば(ステップS13、NO)、調整者の該当ロググループのデータ記憶装置202内のデータを更新する(ステップS14)。そして、データを更新したロググループ(更新ロググループ)を後述する「更新ロググループリスト」に登録し(ステップS15)、その更新ログを該当ロググループのログ記憶装置201に出力する(ステップS16)。続いて、前記トランザクション完了ログ出力先の優先順位定義表120を参照して、前記更新ロググループリストに登録されているロググループ(更新ロググループ)の中から1個のロググループを選択する。そして、そのロググループを、後述する「ローカル代表ロググループ記憶表」に設定する(ステップS17)。
ステップS17において、ローカル代表ロググループ記憶表に設定される「ローカル代表ロググループ」として選択されるのは、更新ロググループリストに登録されているロググループの中で最も重要度が高いロググループである。また、ローカル代表ロググループ記憶表は、データベース管理装置iの主記憶装置内に設けられる。
一方、ステップS13において、他のDBMSへのアクセスが必要であると判断すると(ステップS13、YES)、後述する「参加者リスト」に、前記の他のDBMSを登録する(ステップS18)。そして、前記の他の他のDBMSへデータ更新の依頼を送信する(ステップS19)。その後、上記データ更新を依頼したDBMSから送信されてくるパケットを待ち、該パケットを上記DBMSから受信する(ステップS20)。このパケットには、「データ更新の処理結果(正常終了または異常終了)」や「ロググループの識別子Gik」が格納されている。
次に、上記受信パケットからロググループの識別子Gikを取得し(ステップS21)、その取得したロググループの識別子Gikを前記参加者リストに関連付け(ステップS22)、その後、ステップS23に処理を進める。
ステップS23においては、前記アプリケーションに処理結果(正常終了または異常終了)を通知する。
ステップS23の処理が終了すると、ステップS12に戻る。
このようにして、ステップS12で、前記アプリケーションからセッションの終了指示があったと判断するまで、ステップS13〜S23の処理を繰り返し実行する。この繰り返し処理により、分散トランザクションにおけるデータ更新処理が実行され、各ロググループGikにおけるデータ更新の処理結果がアプリケーションに通知される。
ステップS13において、前記アプリケーションからセッションの終了が指示されたと判断すると(ステップS13、YES)、全ての参加者に対して「接続解除依頼」を送信する(ステップS24)。そして、前記参加者リストを破棄し(ステップS25)、その後、セッションの終了処理を行い(ステップS26)、本フローチャートの処理を終了する。
図6は、分散トランザクションにおける参加者のデータ更新処理を示すフローチャートである。
参加者は、調整者からの要求を受信する(ステップS31)。次に、その要求が「調整者との接続解除」であるか判断する(ステップS32)。そして、調整者との接続解除でない(データ更新である)と判断すると(ステップS32、NO)ステップS33に進み、調整者との接続解除であると判断すると(ステップS32、YES)ステップS39に進む。
ステップS33においては、要求されたロググループのデータ記憶装置202のデータを更新する。そして、該ロググループのログ記憶装置201に更新ログを出力する(ステップS34)。続いて、上述した、図5のフローチャートのステップS17の処理と同様にして、トランザクション完了ログ出力先の優先順位定義表120を参照して更新ロググループリストからロググループを1個選択し、そのロググループの識別子Gikを通信パケットに設定する(ステップ37)。続いて、上記選択したロググループの識別子Gikをローカル代表ロググループ記憶表に設定する(ステップS37)。そして、調整者へ処理結果(正常または異常)を通知し(ステップS38)、ステップS32に戻る。
このようにして、参加者は、調整者からデータ更新の要求を受信する毎に、ステップS33〜S38の処理を繰り返し実行し、ロググループのデータ更新とそのデータ更新のログの記録を行う。データ更新はロググループのデータ記憶装置202において行われ、更新ログはロググループのログ記憶装置201に記録される。また、調整者宛の通信パケットに後述する「ローカル代表ロググループ」となるロググループを設定し、その通信パケットを調整者に送信する。
ステップS32において調整者から接続解除の要求があったと判断すると(ステップS32、YES)、調整者との接続を解除し(ステップS39)、本フローチャートの処理を終了する。
図7は、上述した図5及び図6のフローチャートに示す処理による、分散トランザクションシステムにおけるデータ更新処理の一例を示すシステム構成図である。
図7に示す分散トランザクションシステム4は、図1に示す分散トランザクションシステム1において、データベース管理装置のクラスタが3台のデータベース管理装置1、2、3から構成される場合に該等している。データベース管理装置1は2つのロググループ11(識別子G11)、12(識別子G12)を備え、データベース管理装置2は1つのロググループ21(識別子G21)を備えている。データベース管理装置3は、2つのロググループ31(識別子G31)、32(識別子G32)を備えている。
データベース管理装置1は、主記憶装置内に、ロググループ偏在表110、トランザクション完了ログ出力先の優先順位定義表120、更新ロググループリスト130(130−1)、ローカル代表ロググループ記憶表140(140−1)及び参加者リスト150を備えている。
更新ロググループリスト130は、分散トランザクションにおいて、データベース管理装置i(DBMSi)がデータを更新したロググループの一覧が登録されるリストである。更新ロググループリスト130は、分散トランザクションに関与(参加)する全てのデータベース管理装置iの主記憶装置内に作成される。
ローカル代表ロググループ記憶表140は、更新ロググループリスト130に登録されているロググループの中からトランザクション完了ログ出力先の優先順位定義表120に基づいて選択されるロググループ(ローカル代表ロググループ)を記憶する表である。ローカル代表ロググループ記憶表140も、分散トランザクションに関与する全てのデータベース管理装置iの主記憶装置内に作成される。
参加者リスト150は、分散トランザクションに関与した全てのデータベース管理装置i(DBMSi)の一覧が登録されるリストである。参加者リスト150は、調整者とな
るデータベース管理装置iの主記憶装置内に作成される。参加者リスト150に登録された各データベース管理装置i(DBMSi)には、各DBMSiで決定されたローカル代表ロググループが関連付けられる。
図7に示す分散トランザクションにおいて、アプリケーション410は、データベース管理装置1に対してG11(ロググループ11)、G12(ロググループ12)、G21(ロググループ21)、G31(ロググループ31)、G32(ロググループ32)のデータ更新を依頼する。したがって、この分散トランザクションにおいては、データベース管理装置1(DBMS1)が調整者となり、データベース管理装置2(DBMS2)、3(DBMS3)が参加者となる。
図7の分散トランザクションシステム4の状況を、図5、6のフローチャートを参照しながら説明する。
データベース管理装置1は、アプリケーション410からの要求を受け付けると、ロググループ11、12のデータを更新する(ステップS12〜S14)。そして、更新ロググループリスト130(130−1)に上記ロググループ11、12の識別子G11、G12を登録する(ステップS15)。そして、更新ログを、ロググループ11、12のログ記憶装置201(不図示)に出力する(ステップS16)。次に、トランザクション完了ログ出力先の優先順位定義表120を参照して、ロググループ11(G11)をローカル代表ロググループとして選択し、ロググループ11の識別子G11をローカル代表ロググループ記憶表140(140−1)に設定する(ステップS17)。また、参加者リスト150にデータベース管理装置2、3の装置名DBMS2、DBMS3を登録する(ステップS18)。そして、データベース管理装置2に対して、ロググループ21(G21)のデータ(更新対象のデータ)を指定した更新依頼パケット501を送信する(ステップS19)。また、データベース管理装置3に対して、更新依頼パケット502、503を送信する(ステップS19)。更新依頼パケット502にはロググループ31(G31)のデータが指定されており、更新依頼パケット503にはロググループ32(G32)のデータが指定されている。
データベース管理装置2は、データベース管理装置1から更新依頼パケット501を受信すると(ステップS31)、ロググループ21の指定データを更新する(ステップS33)。そして、更新ロググループリスト130(130−2)にロググループ21の識別子G21を登録し(ステップS34)、上記データの更新ログをロググループ21のログ記憶装置201(不図示)に書き込む(ステップS35)。次に、トランザクション完了ログ出力先の優先順位定義表120を参照して、ロググループ21をローカル代表ロググループとして選択し、ロググループ21の識別子G21を、データベース管理装置1宛の更新応答パケット551に設定し、その更新応答パケット551をデータベース管理装置1に送信する(ステップS36)。続いて、上記ローカル代表ロググループとして選択したロググループ21の識別子G21をローカル代表ロググループ記憶表140(140−2)に設定する(ステップS37)。
データベース管理装置3は、データベース管理装置1から更新依頼パケット502、503を受信すると、各更新依頼パケット502、503について、上述したデータベース管理装置2と同様の処理を行う。これにより、更新ロググループリスト130(130−3)には、ロググループ31、32の識別子G31、G32が登録される(ステップS34)。また、ローカル代表ロググループ記憶表140(140−3)には、トランザクション完了ログ出力先の優先順位定義表120に基づき、ロググループ31の識別子G31が設定される(ステップS37)。また、データベース管理装置3は、更新応答パケット552、553をデータベース管理装置1に送信する(ステップS36)。更新応答パケット552,553には、ローカル代表ロググループであるロググループ31の識別子G31が設定される。
データベース管理装置1は、データベース管理装置2から更新応答パケット551を受信すると(ステップS20)、その更新応答パケット551からローカル代表ロググループの識別子G21を取得し(ステップS21)、その識別子G21を、参加者リスト150のDBMS2に関連付ける(ステップS22)。データベース管理装置は、データベース管理装置3から更新応答パケット552、553を受信した場合にも、上述した更新応答パケット551を受信した場合と同様の処理を行う。これにより、参加者リスト150のDBMS2にはローカル代表ロググループであるロググループ31の識別子G31が関連付けられる。
図8は、調整者となるデータベース管理装置がロググループを備えていない場合の分散トランザクションにおける処理を示すシステム構成図である。図8において、図7に示す構成要素と同じ構成要素には同じ符号を付与し、それらの構成要素の説明は省略する。
図8に示す分散トランザクションシステム5の場合には、データベース管理装置1がロググループを備えていないので、データベース管理装置1が受け付けるアプリケーションは、データベース管理装置2、3が備えるロググループに対してのみデータの更新を依頼する。図8に示すアプリケーション411は、データベース管理装置2が備えるロググループ21(G21)とデータベース管理装置3が備えるロググループ31(G31)、32(G32)に対するデータの更新を依頼している。この場合、調整者であるデータベース管理装置1(DBMS1)は、図5のフローチャートのステップS13において、他のDBMSへのアクセスが必要であると判断し、ステップS18〜S22の処理のみを行い、ステップS14〜S17の処理は実行しない。このため、図8に示すように、データベース管理装置1の主記憶装置内に設けられた更新ロググループリスト130−1とローカル代表ロググループ記憶表140−1は空となる。換言すれば、データベース管理装置1はロググループを備えていないので、データを更新するロググループは存在しない。したがって、分散トランザクションが実行されても、更新ロググループリスト130−1に登録すべきロググループを持たない。このため、ローカル代表ロググループも持たない。換言すれば、更新ロググループリスト130−1とローカル代表ロググループ記憶表140−1は、後に行われる2相コミット処理において不要ということである。データベース管理装置2、3については、図7に示す分散トランザクションシステム4と同様の処理が行われる。したがって、データベース管理装置2、3の主記憶装置内には、図7に示す分散トランザクションシステム4と同様のリストや表が作成される。
{2相コミット処理の全体フロー}
図9は、本実施形態における2相コミット処理の全体の流れを示すフローチャートである。この2相コミット処理の全体の流れを説明する。
調整者は、アプリケーションからコミットの指示を受信すると(ステップS51)、調整者の主記憶装置内の更新ロググループリストは空であるか判別する(ステップS52)。そして、更新ロググループリストが空であれば「調整者でロググループの更新(データ更新)が有る場合の準備処理」をおこなう(ステップS53)。このステップS53の処理の詳細は後述する。
調整者は、ステップS53の準備処理が終了すると、該準備処理が成功したか判断する(ステップS54)。ここで、成功とは、全ての参加者が準備処理に成功し、「準備処理完了」のメッセージを調整者に回答することを意味する。
調整者は、上記準備処理が成功したと判断すると(ステップS54、YES)、「調整
者でロググループの更新がある場合のコミット処理」を行い(ステップS55)、アプリケーションへ「コミット成功」を応答し(ステップS61)、本フローチャートの処理を終了する。ステップS55の処理の詳細は後述する。
一方、ステップS54において、上記コミット処理が不成功であったと判断すると(ステップS54、NO)、「調整者でロググループの更新が有る場合のロールバック処理を行い(ステップS56)、アプリケーションに「コミット失敗」を応答し(ステップS57)、本フローチャートの処理を終了する。ステップS56の処理の詳細は後述する。
ステップS51において、調整者の更新ロググループリストが空であると判断すると(ステップS52、YES)、「調整者でロググループの更新が無い場合の準備処理」を行う(ステップS58)。ステップS58の処理の詳細は後述する。
調整者は、ステップS58の準備処理が終了すると、該準備処理が成功したか判断し(ステップS59)、その準備処理が成功したと判断すると(ステップS59、YES)、「調整者でロググループの更新が無い場合のコミット処理」を行い(ステップS60)、ステップS61に移行する。このステップS60のコミット処理の詳細は後述する。
一方、調整者は、ステップS59で準備処理が失敗したと判断すると(ステップS59、NO)、「調整者でロググループの更新が無い場合のロールバック処理」を行い(ステップS62)、アプリケーションへ「コミット失敗」を応答し(ステップS63)、本フローチャートの処理を終了する。ステップS62のロールバック処理の詳細は後述する。
<調整者で更新が有る場合の処理>
{調整者で更新が有る場合の調整者の準備処理}
図10は、調整者で更新が有る場合の調整者の準備処理を示すフローチャートである。このフローチャートに示す処理は、図9のステップS53における調整者の処理に該等する。
調整者は、ローカル代表ロググループ記憶表に設定されているローカル代表ロググループ(ローカル代表ロググループの識別子Gik)を、グローバル代表ロググループ記憶表(後述)に設定する(ステップS71)。次に、参加者リストの現在のエントリを参照し、参加者リストの終端であるか判断する(ステップS72)。そして、参加者リストの終端でないと判断すると(ステップS72、NO)、参加者リストの現在のエントリから「DBMSi」を取り出し、それを主記憶装置に保存し、前記グローバル代表ロググループ定義表に設定されているグローバル代表ロググループの識別子Gikを通信パケットに設定し(ステップS73)、その通信パケットを、ステップS73で参加者リストから取り出した「DBMSi」という名称のデータベース管理装置iに送信することで、参加者であるデータベース管理装置iに「準備依頼」メッセージを送信する(ステップS74)。
次に、調整者は、上記準備依頼メッセージの送信に失敗したか判断する(ステップS75)。この送信失敗は、例えば、通信障害などが原因で発生する。調整者は、例えば、上記準備依頼メッセージを送信後、所定時間経過しても参加者から応答が無かった場合に送信失敗と判断する。
調整者は、ステップS75において、送信失敗でないと判断すると(ステップS75、NO)、参加者から応答の通信パケットを受信する(ステップS76)。そして、その応答内容を基に、参加者の準備処理が失敗したか判断する(ステップS77)。
調整者は、ステップS75において「送信失敗」と判断するか(ステップS75、YE
S)、または、ステップS77において「準備処理失敗」と判断すると(ステップS77、YES)、本フローチャートの処理を異常終了する。この異常終了は、図9のフローチャートのステップS54において、「準備処理が不成功した」と判断される。
一方、調整者は、ステップS77において、準備処理が成功したと判断すると(ステップS77、NO)、ステップS76で受信した通信パケットから、参加者が更新した全てのロググループの識別子を取得する(ステップS78)。そして、該取得したロググループの識別子を参加者リストのDBMSiに関連付ける(ステップS79)。続いて、参加者リストのエントリを次のエントリに位置づけ(ステップS80)、ステップS72に戻る。
このようにして、ステップS72において参加者リストの現在のエントリが参加者リストの終端であると判断するまで(ステップS72、YES)、換言すれば、参加者リストに登録された全てのDBMSiについて処理が終了するまで、ステップS73〜ステップS80の処理を繰り返す。以上の処理により、調整者は、分散トランザクションに参加(関与)している全ての参加者に「準備依頼」のメッセージを送り、それに対する参加者からの応答に対処する。
調整者は、ステップS72において参加者リストの終端であると判断すると(ステップS72、YES)、ステップS81に移行する。すなわち、全ての参加者から「準備処理成功」の応答メッセージを受け取れば、ステップS81に処理を進める。
調整者は、ステップS81以降では、更新ロググループリストを基に、上述したステップS72〜S80と同様の処理を行う。
調整者は、まず、更新ロググループリストの現在のエントリが終端であるか判断し(ステップS81)、終端でないと判断すれば(ステップS81、NO)ステップS82に進み、終端であると判断すれば(ステップS81、YES)ステップS87に進む。
調整者は、ステップS82において、現在のエントリからロググループの識別子を取り出し、その識別子がグローバル代表ロググループの識別子であるか判断する。そして、グローバル代表ロググループの識別子でなければ(ステップS82、NO)ステップS83に進み、グローバル代表ロググループの識別子であれば(ステップS82、YES)、ステップS86に進む。
調整者は、ステップS83においては、ステップS82で取り出した識別子を有するロググループの「トランザクション準備処理」を行う。そして、該トランザクション準備処理が失敗したか判断し(ステップ83a)、成功したと判断すれば(ステップS83a、NO)ステップS84に進み、失敗したと判断すれば(ステップS83a、YES)本フローチャートの処理を異常終了する。この異常終了は、図9のステップS54において「準備処理失敗」と判断される。
調整者は、ステップS84において、前記グローバル代表ロググループ表から「グローバル代表ロググループ」を読み出し、それを設定した「準備完了ログ」を前記ロググループのログ記憶装置に出力する。
調整者は、次に、該準備完了ログの出力処理に失敗したか判断し(ステップS85)。該出力処理に失敗したと判断すれば(ステップS85、YES)、本フローチャートの処理を異常終了する。この異常終了は、図9のステップS54において「準備処理失敗」と判断される。
一方、調整者は、ステップS85において、前記ロググループの準備処理に成功したと判断すると(ステップS85、NO)、更新ロググループリストの現在のエントリを次のエントリに位置づけ(ステップS86)、ステップS81に戻る。
以上のようにして、調整者は、ステップS81において、更新ロググループリストの現在のエントリが更新ロググループリストの終端であると判断するまで(ステップS81、YES)、すなわち、更新ロググループリストに登録されたグローバル代表ロググループ以外のロググループについてトランザクション準備処理が終了するまで、ステップS81〜S86の処理を繰り返す。このようにして、更新ロググループリストに登録されたグローバル代表ロググループ以外のロググループについてトランザクション準備処理が行われる。
調整者は、ステップS87において、グローバル代表ロググループの「トランザクション準備処理」を行う。そして、該トランザクション準備処理が失敗したか判断し(ステップS87a)、成功したと判断すれば(ステップS87a、NO)ステップS88に進み、失敗したと判断すれば(ステップS87a、YES)本フローチャートの処理を異常終了する。
調整者は、ステップS88において、分散トランザクションの2相コミットにおいて準備処理が行われた、グローバル代表ロググループ以外のロググループの識別子のリスト(参加ロググループリスト)が設定された準備完了ログを、グローバル代表ロググループのログ記憶装置に出力する。
次に、調整者は、該準備完了ログの出力処理が失敗したか判断し(ステップS89)、該準備完了ログの出力処理が成功したと判断すると(ステップS89、NO)、本フローチャートの処理を正常終了し、失敗したと判断すると(ステップS89、YES)、本フローチャートの処理を異常終了する。該正常終了と該異常終了は、図9のステップS54において、それぞれ、「準備処理成功」、「準備処理失敗」と判断される。
{調整者で更新が有る場合の参加者の準備処理}
図11は、調整者でロググループの更新が有る場合の参加者の準備処理を示すフローチャートである。
参加者は、調整者から受信する通信パケット(準備依頼パケット)から「グローバル代表ロググループ識別子」を取り出し、それを主記憶装置内に生成されたグローバル代表ロググループ表(後述)に設定する(ステップS101)。次に、更新ロググループリストの現在のエントリが終端であるか判断し(ステップS102)、終端でなければ(ステップS102、NO)ステップS103に進み、終端であれば(ステップS102、YES)ステップS109に進む。ステップS102の判断は、更新ロググループリストに登録されている全てのロググループについてステップS103以降の処理を終了したか判断する処理である。
参加者は、ステップS103において、更新ロググループリストの現在のエントリからロググループを取り出し、そのロググループのトランザクション準備処理を行う。次に、該トランザクション準備処理が失敗したか判断し(ステップS104)、成功したと判断すれば(ステップS104、NO)ステップS105に進み、失敗したと判断すれば(ステップS104、YES)ステップS109に進む。
参加者は、ステップS105において、「前記グローバル代表ロググループ表に設定されているグローバル代表ロググループ識別子を設定した準備完了ログ」を、ステップS1
03で取り出したロググループのログ記憶装置に出力する(ステップS105)。その後、該準備完了ログの出力処理に失敗したか判断し(ステップS106)、その出力処理が成功であったと判断すれば(ステップS106、NO)、ステップS107に進み、失敗したと判断すれば(ステップS106、YES)ステップS109に進む。
参加者は、ステップS107において、前記ロググループをインダウト状態リスト(後述)に登録する。そして、更新ロググループリストの現在のエントリを次のエントリに位置づけ(ステップS108)、ステップS102に戻る。
このようにして、参加者は、ステップS102〜S108の処理を、「トランザクション準備処理」または「準備完了ログの出力処理」に失敗しないかぎり、ステップS102において更新ロググループリストの現在のエントリが終端であると判断するまで繰り返す。
これにより、更新ロググループリストに登録されている全てのロググループについて、「トランザクション準備処理」と「準備完了ログの出力処理」の両方が終了すると、参加者のトランザクション準備処理は成功となる。この場合、インダウト状態リストには、更新ロググループリストに登録されている全てのロググループの識別子が登録される。一方、更新ロググループリストに登録されているいずれか一つのロググループについて、「トランザクション準備処理」または「準備完了ログの出力処理」が失敗すると、参加者のトランザクション準備処理は失敗となる。この場合、トランザクション準備処理は失敗となる。
ステップS102、ステップS104またはステップ106でYESと判断されると、処理はステップS109に移る。
参加者は、ステップS109において、「トランザクション準備処理が行われた全てのロググループの識別子」と「該トランザクション準備処理の処理結果」を通信パケット(準備応答パケット)に設定し(ステップS109)、その準備応答パケットを調整者に送信し(ステップS110)、本フローチャートの処理を終了する。該準備応答パケットは、図10のステップS76において調整者に受信される。
このようにして、参加者は、更新ロググループリストに登録されている全てのロググループについてトランザクション準備処理を実施する。そして、該全てのロググループについてトランザクション準備処理が成功した場合(参加者がトランザクション準備処理に成功した場合)には、それら全てのロググループの識別子をインダウト状態リストに登録する。この結果、参加者のインダウト状態リストには、インダウト状態にある全てのロググループの識別子が登録されることになる。
{2相コミットのトランザクション準備処理が行われた場合のシステム構成}
図12は、図7に示す分散トランザクションシステムにおいて、2相コミットのトランザクション準備処理が行われた場合のシステムの構成状態を示す図である。図12において、図7と同一の構成要素には同じ符号を付与している。
調整者であるデータベース管理装置1は、ローカル代表ロググループ記憶表140−1に設定されているローカル代表ロググループの識別子G11を、主記憶装置内に生成されたグローバル代表ロググループ表160に「グローバル代表ロググループの識別子」として設定する(ステップS71)。そして、参加者(データベース管理装置2、データベース管理装置3)に送信する通信パケット(準備依頼パケット)601、602に上記グローバル代表ロググループの識別子G11を設定し(ステップS73)、該準備依頼パケット601、602を、それぞれ、データベース管理装置2、3に送信する(ステップS74)。
第1の参加者であるデータベース管理装置2は、前記準備依頼パケット601を受信すると、そのパケット601からグローバル代表ロググループ表を取り出し、それをグローバル代表ロググループ表160に設定する(ステップS101)。そして、更新ロググループリスト130−2に識別子G21が設定されているロググループ21のトランザクション準備処理を実施し、(ステップS103)、該トランザクション準備処理に成功すると、グローバル代表ロググループの識別子G11を設定した準備完了ログ220−21を、ロググループ21に出力する(ステップS105)。この準備完了ログ220−21の出力に成功すると、ロググループ21の識別子G21をインダウト状態リスト170(170−2)に登録する(ステップS107)。データベース管理装置2の場合、更新ロググループリスト130−2に登録されているロググループはロググループ21のみなので、ロググループ21の識別子G21と処理結果を通信パケット(準備応答パケット)651に設定し、それを調整者(データベース管理装置1)に送信する(ステップS110)。
調整者(データベース管理装置1)は、上記準備応答パケット651を受信し(ステップS76)、その準備応答パケット651から「処理結果」を取り出し、データベース管理装置2のトランザクション準備処理が成功したと判断すると(ステップS77、NO)、準備応答パケット651からロググループ21の識別子G21を取得する(ステップS78)。そして、その識別子G21を、参加者リスト150のDBMS2に関連付ける。
上記と同様な処理が、調整者(データベース管理装置1)と第2の参加者(データベース管理装置3)において行われる。これにより、データベース管理装置1からデータベース管理装置2へ準備依頼パケット602が送信される。データベース管理装置2は、該準備応答パケット602からグローバル代表ロググループの識別子G11を取り出し、それを主記憶装置内のグローバル代表ロググループ160に設定する。そして、更新ロググループリスト130−3に識別子(G31、G32)が登録されているロググループ31、32についてトランザクション準備処理を実施し、該トランザクション準備処理の準備完了ログ220−31、220−32を、それぞれ、ロググループ31、32のログ記憶装置に出力する。そして、トランザクション準備処理と準備完了ログの出力に成功すると、ロググループ31、32の識別子G31、G32をインダウト状態リスト170(170−3)に登録する。そして、「ロググループ31、32の識別子G31、G32」と「トランザクション準備処理の処理結果」を設定した準備応答パケット652をデータベース管理装置1へ送信する。データベース管理装置1は、該準備応答パケット652を受信し、データベース管理装置3がトランザクション準備処理に成功したと判断すると、参加者リスト150のDBMS3にロググループ31、32の識別子G31、G32を関連付ける。
調整者(データベース管理装置1)は、更新ロググループリスト130−1から、最初に、ロググループ11の識別子G11を読み出し、ロググループ11がグローバル代表ロググループであると判断する(ステップS82、YES)。そして、次に、更新ロググループリスト130−1からロググループ12の識別子G12を読み出し、ロググループ12はグローバル代表ロググループでないと判断し(ステップS82、NO)、ロググループ11のトランザクション準備処理を実行する(ステップS83)。次に、グローバル代表ロググループ11の識別子G11を設定した準備完了ログ220−12をロググループ12のログ記憶装置に出力する(ステップS84)。調整者(データベース管理装置1)は、次に、グローバル代表ロググループであるロググループ11のトランザクション準備処理を行い(ステップS88)、トランザクション準備処理を行ったグローバル代表ロググループ(ロググループ11)以外のロググループ(ロググループ12、21、31、32)の識別子G12、G21、G31、G32を設定した準備完了ログ220−11を、ロググループ11のログ記憶装置に出力する(ステップS88)。ステップS88における準備完了ログ220−11に設定するロググループの識別子の抽出する処理では、更新ロググループリスト130−1、参加者リスト150を参照する。
ここで、グローバル代表ロググループ(この例では、ロググループ11)のトランザクション準備処理の準備完了ログ220には、2相コミットのトランザクション準備処理に参加したロググループの識別子(但し、グローバル代表ロググループの識別子は除く)が「参加ロググループリスト」として設定される(ステップS88)。また、グローバル代表ロググループ以外のトランザクション準備処理の準備完了ログ220には、グローバル代表ロググループの識別子が「問い合せ先」として設定される。
以上説明したように、本実施形態においては、調整者から参加者に送信される準備依頼パケットには、グローバル代表ロググループの識別子が設定される。また、参加者から調整者への回答(投票)である準備応答パケットには、参加者が更新(トランザクション準備処理)を行ったロググループの識別子が設定される。また、参加者のインダウト状態リスト170には、参加者により管理されている、インダウト状態となっているロググループの識別子が設定される。このインダウト状態リスト170は、後述するように、インダウト状態となっているロググループを、インダウト状態から解放するために利用される。尚、グローバル代表ロググループは、分散トランザクションにおいて更新された(トランザクション準備処理が行われた)ロググループの中から選択されるロググループである。グローバル代表ロググループには、調整者の役割を担うデータベース管理装置iのローカル代表ロググループが選択される。本実施形態においては、トランザクション完了ログ出力先の優先順位定義表120において、最も重要度が高く設定されているロググループがグローバル代表ロググループとなる。このグローバル代表ロググループは、分散トランザクションに参加する各データベース管理装置の主記憶装置内に設けられるグローバル代表ロググループ表160に設定される。換言すれば、グローバル代表ロググループ表160は、グローバル代表ロググループが設定される表である。
{2相コミットのコミット処理}
図13は、調整者で更新がある場合の調整者のコミット処理を示すフローチャートである。
図12を参照すれば分かるように、2相コミットの準備処理終了後には、調整者の参加者リスト150には、分散トランザクションに参加(関与)した参加者の一覧が登録されており、各参加者における更新ロググループ(更新が行われたロググループ)の一覧も登録されている。したがって、調整者は、2相コミットのコミット処理において、参加者にコミットを依頼する場合には、参加者リスト150を参照する。また、調整者が管理するロググループの中で、分散トランザクションにおいて更新がなされたロググループは更新ロググループリスト130に登録されている。
以上のような前提を理解した上で、図13のフローチャートを説明する。
調整者は、参加者リストの現在のエントリが終端であるか判断し(ステップS121)、参加者リストの終端でなければ(ステップS121、NO)ステップS122に進み、参加者リストの終端であればステップS128に進む。参加者リストの現在のエントリが終端であるということは、参加者リストに登録されている全ての参加者についてコミット依頼の送信が終了しているということを意味する。
調整者は、ステップS122において、参加者リストの現在のエントリから参加者の名称(DBMSi)を取り出し、その名称を有する参加者にコミット依頼(コミット依頼パ
ケット)を送信する。その後、該コミット依頼の送信に失敗したか判断し(ステップS123)、送信成功であると判断すれば(ステップS123、NO)ステップS124に進み、送信失敗であると判断すれば(ステップS123、YES)ステップS126に進む。
調整者は、ステップS124において、上記コミット依頼を送信した参加者からの応答(コミット応答パケット)を受信する。そして、そのコミット応答パケットに格納された処理結果を参照して、参加者がコミット処理に失敗したか判断する(ステップS125)。そして、参加者がコミット処理に失敗していれば(ステップS125、YES)ステップS126に進み、成功していれば(ステップS125、NO)ステップS127に進む。
調整者は、ステップS126において、参加者リストから上記コミット処理に失敗した参加者の全ての更新ロググループを取得し、該取得した更新ロググループを主記憶装置内のコミット再送信リスト(後述)に出力する。そしてステップS127に進む。
調整者は、ステップS127において、参加者リストの現在のエントリを次のエントリに位置づける。そして、ステップS121に戻る。
このようにして、調整者は、ステップS121において、参加者リストの現在のエントリが終端であると判断する(ステップS121、YES)まで、ステップS121〜S127の処理を繰り返す。以上の処理により、調整者は、参加者リストに登録されている全ての参加者に対してコミット依頼パケットを送信する。この場合、調整者は、コミット依頼パケットの送信に失敗するか、または、コミット処理に失敗した参加者については、その全ての更新ロググループをログ記憶装置内のコミット再送信リストに登録する。
調整者は、次に、自身が管理する更新ロググループのコミット処理に移る。
調整者は、ステップS128において、更新ロググループリストの現在のエントリが終端であるか判断する。そして、更新ロググループリストの終端であれば(ステップS128、YES)ステップS136に進み、更新ロググループリストの終端でなければ(ステップS129、NO)ステップS129に進む。
調整者は、ステップS129において、更新ロググループリストの現在のエントリがグローバル代表ロググループ(グローバル代表ロググループの識別子)であるか判断する。そして、グローバル代表ロググループでなければ(ステップS129、NO)ステップS130に進み、グローバル代表ロググループであれば(ステップS129、YES)ステップS135に進む。
調整者は、ステップS130において、更新ロググループリストの現在のエントリのロググループ(グローバル代表ロググループ以外のロググループ)のトランザクションコミット処理を行う。そして、そのトランザクションコミット処理に失敗したか判断し(ステップS131)、失敗すれば(ステップS131、YES)ステップS134に進み、失敗しなければ(ステップS131、NO)ステップS132に進む。
調整者は、ステップS132において、トランザクションコミット処理に成功したロググループのコミットログをログ記憶装置に出力する。そして、該コミットログの出力に失敗したか判断し(ステップS133)、失敗していれば(ステップS133、YES)ステップS134に進み、失敗していなければ(ステップS133、NO)ステップS135に進む。
調整者は、ステップS134において、上記トランザクションコミット処理に失敗した
ロググループを、主記憶装置内のコミット再送信リストに登録する。その後、ステップS135に進む。調整者は、ステップS135において、更新ロググループリストの現在のエントリを次のエントリに位置づける。そして、ステップS128に戻る。
このようにして、調整者は、ステップS128において、更新ロググループリストの現在のエントリが終端であると判断するまで、ステップS128〜S135の処理を繰り返す。以上の処理により、調整者の更新ロググループリストに登録されているグローバル代表ロググループ以外のロググループについてトランザクションコミット処理が実施される。この場合、コミット処理に失敗するか、または、コミット処理に成功してもコミットログの出力に失敗したロググループについては、その識別子が主記憶装置内の前記コミット再送信リストに登録される。つまり、これらのロググループはコミット処理が完了していないので、再度、コミット処理を行うために、主記憶装置内のコミット再送信リストに記録される。
調整者は、ステップS136において、前記コミット再送信リストが“空”であるか判断する。そして、前記コミット再送信リストが空でなければ(ステップS136、NO)、前記コミット再送信リストをグローバル代表ロググループのログ記憶装置に出力し(ステップS137)、ステップS138に進む。一方、ステップS136において、前記コミット再送信リストが空であると判断すれば(ステップS136、YES)、ステップS138に進む。
このようにして、グローバル代表ロググループ以外の全ての更新ロググループについてコミット処理が実行しながら、コミットに失敗した全ての更新ロググループの識別子を主記憶装置上のコミット再送信リストに登録していき、それら更新ロググループのコミット処理の実行が終了すれば、該コミット再送信リストをログ記憶装置に記憶する。したがって、グローバル代表ロググループのログ記憶装置に記憶されたコミット再送信リストには、再度、コミット依頼の送信が必要なグローバル代表ロググループ以外の全ての更新ロググループの識別子が登録されている。
調整者は、ステップS138において、グローバル代表ロググループのトランザクションコミット処理を実施する。この場合、グローバル代表ロググループは、例えば、グローバル代表ロググループ表から取得する。そして、グローバル代表ロググループのコミットログをログ記憶装置に出力し(ステップS139)、本フローチャートの処理を終了する。
尚、ステップS138のグローバル代表ロググループのトランザクションコミット処理及びステップS139のグローバル代表ロググループのコミットログ出力の後で、それらの処理が失敗であったか判断する処理を行ってはいない。このように、グローバル代表ロググループの場合には、コミットログの出力に失敗しても、それを無視する。これは、この時点で、分散トランザクションの全参加者の全ての更新ロググループについてコミット状態であることが保証されており、調整者がダウンする事態が発生したとしても、後述するように、準備完了ログに記憶されている参加ロググループリストをコミット再送信リストとして利用できるからである。
図14は、調整者で更新が有る場合の参加者のコミット処理を示すフローチャートである。尚、調整者で更新が無い場合の参加者のコミット処理も、図14のフローチャートと同様になる。
参加者は、調整者が送信した「コミット依頼パケット」を受信すると(ステップS151)、更新ロググループリストの現在のエントリが終端であるか判断する(ステップS152)。そして、更新ロググループリストの終端でなければ(ステップS152、NO)ステップS153に進み、更新ロググループリストの終端であれば(ステップS152、YES)ステップS159に進む。
参加者は、ステップS153において、更新ロググループリストの現在のエントリに登録されている識別子を有するロググループのトランザクションコミット処理を実行する。そして、そのトランザクションコミット処理が失敗したか判断する(ステップS154)。参加者は、そのトランザクションコミット処理が成功したと判断すれば(ステップS154、NO)ステップS155に進み、失敗したと判断すれば(ステップS154、YES)ステップS160に進む。
参加者は、ステップS155において、上記トランザクションコミット処理に成功したロググループのコミットログをログ記憶装置に出力する。そして、該コミットログの出力に失敗したか判断し(ステップS156)、失敗しない(成功した)と判断すればステップS157に進み、失敗したと判断すればステップS160に進む。
参加者は、ステップS157において、上記コミットログの出力に成功したロググループの識別子をインダウト状態リストから削除する。そして、更新ロググループリストの現在のエントリを次のエントリに位置づけ(ステップS158)、ステップS152に戻る。
このようにして、参加者は、ステップS152において、更新ロググループリストの現在のエントリが終端であると判断する(ステップS152、YES)まで、ステップS152〜S158の処理を繰り返す。そして、ステップS152において、更新ロググループリストの現在のエントリが終端であると判断すると(ステップS152、YES)、「コミット完了応答」(処理結果が“成功”であるコミット応答パケット)を調整者に送信し(ステップS159)、本フローチャートの処理を終了する。
参加者は、ステップS160において、「コミット失敗応答」(処理結果が“失敗”であるコミット応答パケット)を調整者に送信し、本フローチャートの処理を終了する。
以上の処理により、参加者の更新ロググループリストに登録されている全てのロググループについて「トランザクションコミット処理」と「コミットログの出力」が成功した場合には、調整者に前記コミット完了応答が返信される。それ以外の場合には、調整者に前記コミット失敗応答が返信される。また、更新ロググループリストに登録されているロググループの内、「トランザクションコミット処理」と「コミットログの出力」に成功したロググループは、インダウト状態リストから削除される。
{調整者で更新が有る場合のコミット処理を示すシステム構成図}
図15は、図12に示すインダウト状態にある分散トランザクションシステムにおいて、上述した図13及び図14のフローチャートに示すコミット処理が行われた場合における、該分散トランザクションシステムの状態の遷移を示すシステム構成図(その1)である。図15は、分散トランザクションの全ての参加者(この場合、調整者も含む)がコミット処理に成功した場合の例を示している。図15において、図12に示す構成要素と同一の構成要素には同じ符号を付与している。
調整者(データベース管理装置1)は、参加者リスト150を参照して、まず、最初のエントリに格納されている装置名DBMS2を有する第1の参加者(データベース管理装置2)に対してコミット依頼パケット701を送信する。第1の参加者は、該コミット依頼パケット701を受信すると、更新ロググループリスト130−2を参照して、更新ロググループリスト130−2に識別子(G21)が登録されているロググループ21のコ
ミット処理を行い、そのコミット処理が成功すると、コミットログ230(230−21)をログ記憶装置201−21に格納する。また、インダウト状態リスト170−2からロググループ21の識別子G21を削除する。図15は、インダウト状態リスト170−2からこの識別子G21が削除された状態を示している。第1の参加者は、次に、「処理結果(成功)」が格納されたコミット応答パケット751を調整者に送信する。調整者は、このコミット応答パケット751を受信すると、それに格納されている「処理結果」を参照して、第1の参加者がコミット処理に成功したと判断する。
次に、調整者は、参加者リスト150の第2のエントリに格納されている装置名DBMS3を有する第2の参加者(データベース管理装置3)に対してコミット依頼パケット702を送信する。第2の参加者は、該コミット依頼パケット702を受信すると、更新ロググループリスト130−3を参照して、それに識別子(G31、G32)が登録されているロググループ31、32について、コミット処理とコミットログの出力を行う。この場合、まず、ロググループ31についてコミット処理とコミットログの出力が行われる。そして、次に、ロググループ32についてコミット処理とコミットログの出力が行われる。ロググループ31のコミットログ230(230−31)はログ記憶装置201−31に出力され、ロググループ32のコミットログ230(230−32)はログ記憶装置201―32に出力される。第2の参加者は、ロググループ31、32のコミット処理とコミットログの出力が共に成功すると、インダウト状態リスト170−3から、それらの識別子G31、G32を削除する。図15は、インダウト状態リスト170−3からこれらの識別子G31、G32が削除された状態を示している。第2の参加者は、次に、「処理結果(成功)」が格納されたコミット応答パケット752を調整者に送信する。調整者は、そのコミット応答パケット752を受信すると、そのパケット752内の「処理結果」を参照して、第2の参加者がコミット処理に成功したと判断する。
調整者は、次に、自身の更新ロググループリスト130−1を参照して、その更新ロググループリスト130−1に登録されているロググループのコミット処理を行う。図15に示すように、更新ロググループリスト1301−1の第1のエントリにはロググループ(グローバル代表ロググループ)11の識別子G11が、第2のエントリにはロググループ12の識別子G12が登録されている。調整者は、まず、グローバル代表ロググループでないロググループ12のコミット処理を行う。そして、そのコミット処理に成功すると、そのコミットログ230(230−12)をロググループ12のログ記憶装置201−12に出力する。そして、その出力が成功すると、次に、コミット再送信リストが空であることを確認してから、グローバル代表ロググループであるロググループ11のコミット処理を行う。このコミット処理が成功すると、次に、そのコミットログ230(230−11)をロググループ11のログ記憶装置201−11に出力する。そして、その出力に成功すると、コミット処理を終了する。
図16は、図12に示すインダウト状態にある分散トランザクションシステムにおいて、上述した図13及び図14のフローチャートに示すコミット処理が行われた場合における、該分散トランザクションシステムの状態の遷移を示すシステム構成図(その2)である。図16は、分散トランザクションの参加者(この場合、調整者も含む)の中の一部の参加者がコミット処理に失敗した場合の例を示している。図16において、図12に示す構成要素と同一の構成要素には同じ符号を付与している。
図16は、第1の参加者(データベース管理装置2)がコミットログ230(230−21)をロググループ21のログ記憶装置に出力・格納した後に、調整者(データベース管理装置1)に対してコミット処理の応答(コミット応答パケット)を送信する前がダウンした場合のシステム状況を示している。この場合、調整者はデータベース管理装置2からコミット依頼701に対する応答を受けとらないので、調整者はデータベース管理装置
2がコミット処理に失敗したと判断し(ステップS125、YES)、データベース管理装置2の全ての更新ロググループ(G21)を主記憶装置内のコミット再送信リスト170に登録する(ステップS126)。このコミット再送信リスト170は、コミット処理が完了しなかった参加者のロググループを記憶するリストである。このような参加者には、データベース管理装置iがダウン(障害)から復旧した場合に、分散トランザクションが「コミット」で終了したこと(2相コミットの投票結果)を通知する必要がある。コミット再送信リスト170は、このようなコミット処理が失敗した参加者の全更新ロググループを記憶しておくためのリストである。調整者は、主記憶装置内のコミット再送信リスト170を、最終的に、グローバル代表ロググループ(G11)のロググループ11のログ記憶装置201に書き込む(ステップS137)。したがって、調整者のコミット処理が終了した場合、コミット処理に失敗した参加者の全更新ロググループに関する情報は、グローバル代表ロググループのロググループのログ記憶装置201にコミット再送信リスト240として保存される。尚、図16は参加者であるデータベース管理装置においてコミット処理に失敗した例であるが、調整者の更新ロググループのコミット処理に失敗する場合もありうる。この場合には、グローバル代表ロググループのロググループのコミット再送信リストに、そのコミット処理に失敗した更新ロググループの識別子が記録される。
{調整者がダウンした場合の参加者の処理}
図17は、図12に示すように、参加者がインダウト状態であるときに、調整者が障害によりダウンした場合の参加者の処理を示すフローチャートである。参加者は、クラスタ管理装置10から「調整者となっているデータベース管理装置iがダウンした旨」を通知されることによって、図17のフローチャートの処理を開始する。
参加者は、インダウト状態リストの現在のエントリが終端であるか判断し(ステップS171)、終端であれば(ステップS171、YES)ステップS182に進み、終端でなければステップS172に進む。
参加者は、ステップS172において、ロググループ偏在表から「グローバル代表ロググループの管理権を持つ(データベース管理装置)のDBMS」を求める。この場合、ロググループ偏在表に登録されているDBMSiの中から、正常に動作しているデータベース管理装置の中で最も優先順位が高いデータベース管理装置iのDBMSiを求める。
参加者は、次に、上記求めたDBMSを有するデータベース管理装置に対して、「トランザクション状態(2相コミットの投票結果)の問合せ」を送信する(ステップS173)。そして、そのデータベース管理装置から「上記問合せの結果」を受信する(ステップS174)。参加者は、上記問合せの結果が「コミット指示」であるか判断し(ステップS175)、コミット指示でなければ(ステップS175、NO)ステップS176に進み、コミット指示であればステップS178に進む。
参加者は、ステップS176において、更新ロググループリストの現在のエントリに登録されているロググループについて「トランザクションのロールバック処理」を行う。そして、そのロールバック処理を行ったロググループの「ロールバックログ」を、そのロググループのログ記憶装置に出力し(ステップS177)、ステップS180に進む。
一方、参加者は、ステップS178において、更新ロググループリストの現在のエントリに登録されているロググループについて「トランザクションのコミット処理」を行う。そして、そのコミット処理を行ったロググループの「コミットログ」を、そのロググループのログ記憶装置に出力し(ステップS179)、ステップS180に進む。
参加者は、ステップS180において、上記ロールバック処理またはコミット処理を行
ったロググループをインダウト状態リストから削除する。そして、インダウト状態リストの現在のエントリを次のエントリに位置付け(ステップS181)、ステップS171に戻る。
このようにして、参加者は、ステップS171においてインダウト状態リストの現在のエントリが終端であると判断するまで、ステップS171〜S181の処理を繰り返す。これにより、参加者のインダウト状態リストに登録されている全てのロググループについて、2相コミットの投票結果に基づく処理(コミット処理またはロールバック処理)が実施され、それらのロググループのインダウト状態が解消される。また、参加者のインダウト状態リストは空となる。
参加者は、最後に、調整者との接続環境を削除し(ステップS182)、本フローチャートの処理を終了する。参加者は、ステップS182の処理において、調整者との通信路の切断や接続先情報の削除などを行う。
<2相コミットに関係するデータベース管理装置がダウンした場合の処理>
2相コミット中に、その2相コミットに関係するデータベース管理装置がダウンした場合、そのデータベース管理装置が管理していたロググループの管理は他の正常動作しているデータベース管理装置に委譲される。この場合、ダウンしたデータベース管理装置が調整者であった場合には、グローバル代表ロググループの管理権が他のデータベース管理装置に移る。また、調整者がグローバル代表ロググループ以外のロググループも管理していた場合には、そのロググループの管理権も他のデータベース管理装置に移ることになる。また、ダウンしたデータベース管理装置が参加者であった場合には、そのデータベース管理装置が管理していたロググループの管理権が、他のデータベース管理装置に移ることになるが、この場合は、グローバル代表ロググループの管理権の移動は無い。
{グローバル代表ロググループ表以外のロググループの管理権を取得したデータベース管理装置におけるトランザクション解決処理}
図18は、グローバル代表ロググループ以外のロググループの管理権を取得したデータベース管理装置(DBMS)のトランザクション解決処理を示すフローチャートである。
データベース管理装置は、管理権を取得したロググループのログ記憶装置に「準備完了ログ」が格納されているか判断し(ステップS191)、準備完了ログだけが格納されている、つまり、管理権を取得したロググループに対して準備完了ログだけが出力されていれば(ステップS191、YES)、インダウト状態リストにそのロググループの識別子を登録し(ステップS192)、ステップS193に進む。一方、データベース管理装置は、ステップS191において、準備完了ログだけでなく2相コミットの投票結果に関するログ(コミットログまたはロールバックログ)もログ記憶装置に格納されていれば(ステップS191、NO)、本フローチャートの処理を終了する。
このように、データベース管理装置は、管理権を出力したログ記憶装置内に格納されている2相コミットに関係するログを調べ、インダウト状態となっているロググループの識別子のみをインダウト状態リストに登録する。
データベース管理装置は、ステップS193において、上記準備完了ログから「グローバル代表ロググループ(の識別子)」を取得する。そして、ロググループ偏在表から「グローバル代表ロググループの管理権を持つDBMS」を求める(ステップS194)。尚、ステップS194の処理を行う時点で、ロググループ偏在表は最新の状態に更新されているので、ダウンしているデータベース管理装置のDBMSはロググループ偏在表に登録されていない。
データベース管理装置は、次に、上記求めたDBMSを有するデータベース管理装置に対して、「トランザクション結果の問合せ」を送信する(ステップS195)。そして、その後、上記問合せを送信したデータベース管理装置(グローバル代表ロググループの管理権を持つデータベース管理装置)からの応答を受信すると、その応答が「コミット指示」であるか判断する(ステップS196)。
データベース管理装置は、ステップS196において、コミット指示が返信されたと判断すると(ステップS196、YES)、上記インダウト状態リストに登録したロググループのコミット処理(トランザクションコミット処理)を行い(ステップS197)、コミットログをそのロググループのログ記憶装置に出力し(ステップS198)、ステップS201に進む。
一方、データベース管理装置は、ステップS196において、ロールバック指示が返信されたと判断すると(ステップS196、NO)、上記インダウト状態リストに登録したロググループのロールバック処理を行い(ステップS199)、ロールバックログをそのロググループのログ記憶装置に出力し(ステップS200)、ステップS201に進む。
データベース管理装置は、ステップS201において、上記コミット処理またはロールバック処理を行ったロググループをインダウト状態リストから削除する。そして、本フローチャートの処理を終了する。
以上の処理により、インダウト状態となっていたロググループ(グローバル代表ロググループ以外のロググループ)を管理していたデータベース管理装置がダウンした場合でも、そのロググループの管理権を取得したデータベース管理装置によって、そのロググループのインダウト状態が解決される。
{グローバル代表ロググループの管理権を取得したデータベース管理装置におけるトランザクション解決処理}
図19は、グローバル代表ロググループの管理権を取得したデータベース管理装置のトランザクション解決処理を示すフローチャートである。このグローバル代表ロググループの管理権を取得したデータベース管理装置は、元のグローバル代表ロググループの管理権の取得者である調整者に代わって、調整者の役割を果たす必要がある。図13のフローチャートを参照して説明したように、調整者は、コミット依頼を再送信すべきロググループに関する情報を、グローバル代表ロググループのログ記憶装置にコミット再送信リストとして記録している。このコミット再送信リストには、調整者が管理していたロググループの中でコミットが完了していない(コミット処理とコミットログ出力の両方が終了していないロググループ)ロググループも含まれている。以上を前提にして、図19のフローチャートを説明する。
データベース管理装置は、管理権を取得したグローバル代表ロググループのロググループのログ記憶装置を調べ、該ログ記憶装置内にコミット再送信リストが存在するか判断する(ステップS211)。そして、コミット再送信リストが存在すれば(YES)、そのコミット再送信リストを主記憶装置内に記憶し(ステップS212)、ステップS215に進む。
一方、データベース管理装置は、ステップS211において、コミット再送信リストがないと判断すれば(ステップS211、NO)、前記グローバル代表ロググループのログ記憶装置を調べ、そのログ記憶装置に準備完了ログだけが出力(格納)されており、コミットログは出力(格納)されていないか判断する(ステップS213)。そして、準備完了ログのみが出力されていれば(ステップS213、YES)、その準備完了ログから参加ロググループリストを取得し、それを、主記憶装置内にコミット再送信リストとして記憶し(ステップS214)、ステップS215に進む。
以上の処理により、データベース管理装置の主記憶装置内には、インダウト状態を解決する必要があるロググループが上記コミット再送信リストに登録される。つまり、グローバル代表ロググループのログ記憶装置にコミット再送信リストが記録されている場合には、そのコミット再送信リストに記録されている情報を、そのまま、コミット再送信リストとして利用することができる。また、グローバル代表ロググループのログ記憶装置に準備完了ログのみが記録されている場合には、その準備完了ログ内の参加ロググループリストをコミット再送信リストとして利用することで、分散トランザクションに参加している調整者以外の全参加者が登録されているコミット再送信リストを作成することができる。また、グローバル代表ロググループのログ記憶装置に準備完了ログとコミットログが記録されており、かつ、コミット再送信リストが存在しなければ、インダウト状態となっている参加者は存在しないので、コミット再送信リストを作成する必要はない。調整者は、既に、分散トランザクションの全ての参加者(調整者以外の参加者)にコミットを指示しているからである。
データベース管理装置は、ステップS215において、主記憶装置内のコミット再送信リスト(以後、コミット再送信リストとのみ記載)の現在のエントリ終端であるか判断する。そして、コミット再送信リストの終端でないと判断すると(ステップS215、NO)ステップS216に進み、コミット再送信リストの終端であると判断すると(ステップS215、YES)本フローチャートの処理を終了する。
データベース管理装置は、ステップS216において、ロググループ偏在表を参照して、コミット再送信リストの現在のエントリに登録されているロググループの管理権を持つDBMSを取得する。そして、その取得したDBMSを有するデータベース管理装置に対して、「該ロググループのコミット依頼(コミット依頼パケット)」を送信する(ステップS217)。そして、その後、該コミット依頼の送信に失敗したか判断し(ステップS218)、送信失敗であれば(ステップS218、YES)、ステップS222に進む。一方、データベース管理装置は、ステップS218において、上記コミット依頼の送信が成功したと判断すれば(ステップS218、NO)、その後、上記コミット依頼を送信したデータベース管理装置から応答を受信する(ステップS219)。そして、その応答結果が「コミット処理に失敗」であるか判断し(ステップS220)、「コミット処理に成功」であれば(ステップS220、YES)、コミット再送信リストの現在のエントリから「該コミット処理に成功したロググループ」を削除し(ステップS221)、ステップS222に進む。
データベース管理装置は、ステップS222において、コミット再送信リストの現在のエントリを次のエントリに位置付ける。そして、ステップS215に戻る。
以上のようにして、データベース管理装置は、ステップS215でコミット再送信リストの現在のエントリが終端であると判断するまで(ステップS215、YES)、ステップS215〜S222の処理を繰り返す。
これにより、グローバル代表ロググループの管理権を取得した時点でインダウト状態となっている全てのロググループについてコミット依頼が送信され、該ロググループのインダウト状態が解決される。但し、コミット依頼の送信に失敗したロググループ、または、コミット依頼の送信には成功したもののコミット処理に失敗したロググループはインダウト状態のままととなり、コミット再送信リストに登録されたままとなる。
{調整者で更新が有る場合に、調整者がダウンした場合のシステム状況}
図20は、調整者(データベース管理装置1)で更新が有る場合に、調整者がダウンした場合のシステム状況の一例を示す図である。図20において、図15に示す構成要素と同じ構成要素には同一の符号を付与している。
図20に示すシステムにおいては、第1の参加者(データベース管理装置2)の更新ロググループ21には「コミットログ」が格納されているが、第2の参加者(データベース管理装置3)の更新ロググループ31、32には「コミットログ」が格納されていない。これは、調整者(データベース管理装置1)が第1の参加者(データベース管理装置2)にコミット依頼を送信した後にダウンしたことを示している(図13のフローチャートを参照)。データベース管理装置2は、データベース管理装置2からコミット依頼を受信し、ロググループ21のコミット処理を行い、そのコミット処理とコミットログの出力に成功している。調整者がダウンする前は、データベース管理装置2の主記憶装置にはインダウト状態リスト170(170−2)とコミット再送信リスト180(180−2)は記憶されていない。
調整者がダウンすると、調整者が管理していたグローバル代表ロググループ11とロググループ12の管理権はデータベース管理装置2に移動する。これに伴い、データベース管理装置2、3のロググループ偏在表110−2、110−3のロググループ11、12に関する情報は書き換えられる。この書き換え処理の詳細は後述する。具体的には、ロググループ11の識別子G11とロググループ12の識別子G12が、共に、データベース管理装置2の装置名DBMS2に関連付けられる。
データベース管理装置2は、グローバル代表ロググループ11とロググループ12の管理権を取得すると、グローバル代表ロググループ11については図19のフローチャートに示すトランザクション解決処理を、ロググループ12については図18のフローチャートに示すトランザクション解決処理を実行する。
グローバル代表ロググループ11について図19に示すトランザクション解決処理が実行されることによって、グローバル代表ロググループ11のログ記憶装置に記録されている準備完了ログ220−1の参加ロググループリストが、データベース管理装置2の主記憶装置内にコミット再送信リスト180−2として記憶される(図20参照)。そして、データベース管理装置2は、そのコミット再送信リスト180−2に識別子Gikが登録されているロググループに対して、ロググループ偏在表110を参照してコミット依頼(コミット指示)を送信する。この例では、コミット再送信リスト170−2にはロググループの識別子G12、G21、G31、G32が登録されている。したがって、ロググループ12、21の管理権を有するデータベース管理装置2に対して「コミット指示」が送信される。また、ロググループ31、32の管理権を有するデータベース管理装置3に対して「コミット指示」が出力される。
以上のようにして、第1の参加者(データベース管理装置2)にコミット依頼を送信した後にダウンした調整者(データベース管理装置1)から、それが管理していたロググループ11、12の管理権を受け継いだデータベース管理装置2は、グローバル代表ロググループ(ロググループ11)のログ記憶装置に記録されていた準備完了ログ220−1とロググループ偏在表110を基に、調整者の残りの処理、つまり第2の参加者(データベース管理装置2)に対するコミット依頼を代行する。これにより、2相コミットの準備処理終了後に調整者がダウンし、その調整者が管理していたロググループの管理権が分散トランザクションの他の参加者に移動しても、調整者のグローバル代表ロググループのログ記憶装置に記録されていた準備完了ログを基に、インダウト状態にある参加者にコミットを指示することができる。
また、図16に示すように、グローバル代表ロググループのログ記憶装置にコミット再送信リストが記録されていた調整者がダウンした場合には、そのグローバル代表ロググループの管理権を引き継いだ参加者は、該コミット再送信リストを基に、インダウト状態となっているロググループにコミットを指示することができる。つまり、ロググループ偏在表を参照して、コミット再送信リストに登録されている識別子Gikを有するロググループの管理権を有している参加者に対してコミットを指示することができる。
また、ロググループ12について図18のトランザクション解決処理が実行されることによって、ロググループ12の識別子G12がデータベース管理装置2の主記憶装置内のインダウト状態リスト170−2に登録される(図20参照)。データベース管理装置2は、図18のトランザクション解決処理の実行により、ロググループ12のログ記憶装置に記録されている準備完了ログ220−12からグローバル代表ロググループの識別子G11を取得し、ロググループ偏在表110を参照して該取得したグローバル代表ロググループの識別子G11の管理権を持つデータベース管理装置(のDBMS)を求める。この場合、DBMS2が求まる。したがって、データベース管理装置2に対して、ロググループ21の識別子G21が設定された「トランザクション結果の問合せ依頼」1701を送信する。この場合、その問合せに対して、データベース管理装置2から「コミット指示」1751が返信される。したがって、データベース管理装置2は、ロググループ21に対してコミット処理を行う。
参加者(データベース管理装置3)は、図17のフローチャートに示す処理を実行する。まず、インダウト状態リスト170−3とロググループ偏在表110を参照することで、参加者(データベース管理装置2)に対してトランザクション結果の問合せ依頼1801、1802を送信する。トランザクション結果の問合せ依頼(トランザクション結果の問合せ依頼パケット)1801にはロググループ31の識別子G31が設定され、トランザクション結果の問合せ依頼(トランザクション結果の問合せ依頼パケット)1802にはロググループ32の識別子G32が設定されている。
参加者(データベース管理装置2)は、上記トランザクション結果の問合せ依頼1801に対して“コミット指示”の応答1851を返信する。また、上記トランザクション結果の問合せ依頼1802に対しても“コミット指示”の応答1852を返信する。
参加者(データベース管理装置2)は、上記応答1851、1852を受信すると、ロググループ31、32についてトランザクションコミット処理を行い、ロググループ31、32のログ記憶装置に、コミットログ(不図示)を出力・記録する。また、参加者(データベース管理装置3)は、主記憶装置内のインダウト状態リスト170−3から、コミットが完了したロググループ31、32の識別子G31、32を削除する。これにより、インダウト状態リスト170−3は“空”となる。
<調整者で更新が無い場合の処理>
調整者で更新がない場合、すなわち、調整者が分散トランザクションにおいて更新すべきロググループ(更新ロググループ)を管理していない場合には、分散トランザクションに参加する参加者の中から一人の「代表参加者」を選ぶ。この場合、代表参加者以外の参加者を「一般参加者」と呼ぶ。代表参加者は、調整者が決定する。代表参加者は、通常の2相コミットにおける調整者の機能の一部を代行する。一般に分散トランザクションの最終結果をログに記録する責務を担うプロセスは、2相コミットの各フェーズの最後にログ出力を行うため、代表参加者は、第1フェーズの最後に準備処理を、第2フェーズの最後にコミット処理を行う。
{調整者の準備処理}
図21は、調整者で更新が無い場合の調整者の準備処理を示すフローチャートである。
この準備処理において、調整者は、まず、代表参加者を決定し、その代表参加者を主記憶装置内に記憶する(ステップS371)。この決定は、「トランザクション完了ログ出力先の優先順位定義表」と「ロググループ偏在表」を参照することにより行われる。調整者は、まず、トランザクション完了ログ出力先の優先順位定義表を参照し、その中で最も優先順位が高く設定されているロググループ(の識別子Gik)を取得する。次に、ロググループ偏在表を参照して、その取得したロググループの管理権を有するデータベース管理装置i(DBMSi)を取得し、そのデータベース管理装置iを「代表参加者」に決定する。尚、調整者で更新が無い場合の分散トランザクションシステムの「ロググループ偏在表及びロググループ偏在表」と「ロググループ偏在表」の内容は、上述した調整者で更新が有る場合の分散トランザクションシステムの「トランザクション完了ログ出力先の優先順位定義表ロググループ偏在表」と「ロググループ偏在表」の内容とは異なっている。これは、前者の場合、調整者が更新されるロググループ(更新ロググループ)を備えていないからである。
調整者は、次に、上記決定した代表参加者のローカル代表ロググループをグローバル代表ロググループ表に設定する(ステップS372)。そして、参加者リストの現在のエントリが終端であるか判断する(ステップS373)。参加者リストの終端でなければ(ステップS373、NO)ステップS374に進み、参加者リストの終端であれば(ステップS373、YES)、ステップS383に進む。
調整者は、ステップS374において、参加者リストの現在のエントリに登録されている参加者が代表参加者であるか判断する。そして、一般参加者であれば(ステップS374、NO)ステップS375に進み、代表参加者であればステップS383に進む。
調整者は、ステップS375において、グローバル代表ロググループの識別子Gikを通信パケットに設定する。そして、この通信パケットを、一般参加者に「準備依頼パケット」として送信する(ステップS376)。その後、該準備依頼パケットの送信に失敗したか判断し(ステップS377)、送信失敗であると判断すれば(ステップS377、YES)本フローチャートの処理を異常終了し、送信成功であると判断すればステップS378に進む。
調整者は、ステップS378において、一般参加者から上記準備依頼パケットに対する応答(準備応答パケット)を受信する。そして、その準備応答パケットに設定されている処理結果を参照して、一般参加者が準備処理に失敗したか判断し(ステップS379)、一般参加者が準備処理に失敗したと判断すれば(ステップS379、YES)本フローチャートの処理を異常終了する。一方、一般参加者が準備処理に成功したと判断すれば(ステップS379、NO)、前記準備応答パケットから一般参加者が更新したロググループ(更新ロググループ)の識別子Gikを取得し(ステップS380)、該識別子Gikを、参加者リストの現在のエントリに関連付ける(ステップS381)。そして、参加者リストの現在のエントリを次のエントリに位置付け(ステップS382)、ステップS373に戻る。
調整者は、ステップS373において参加者リストの現在のエントリが終端であると判断するまで、ステップS373〜S82の処理を繰り返す。これにより、調整者は、参加者リストに登録されている全ての一般参加者に「準備依頼パケット」を送信し、それに対する応答(準備応答パケット)を受信する。このとき、準備依頼パケットの送信と準備応答パケットの受信に成功した場合には、該準備応答パケットから「一般参加者が更新したロググループ(更新ロググループ)」を取得し、該更新ロググループを、参加者リストの
該一般参加者のDBMSiが登録されているエントリに関連付ける。このようにして、参加者リストには、準備処理に成功した一般参加者の更新ロググループが登録される。
調整者は、ステップS383において、「全ての一般参加者の全ロググループの識別子Gik」と「代表参加者フラグ」を通信パケット(準備依頼パケット)に設定する。そして、該準備応答パケットを代表参加者に送信する(ステップS384)。その後、該準備応答パケットの送信に失敗したか判断し(ステップS385)、失敗したと判断すれば(ステップS385、YES)本フローチャートの処理を異常終了する。一方、該準備応答パケットの送信に成功したと判断すれば(ステップS385、NO)、該準備応答パケットに対する代表参加者からの応答(準備応答パケット)を受信する(ステップS386)。そして、該準備応答パケットに設定された処理結果を基に、代表参加者が準備処理に失敗したか判断し(ステップS387)、成功したと判断すれば(ステップS387、NO)本フローチャートの処理を終了する。一方、失敗したと判断すれば(ステップS387、YES)本フローチャートの処理を異常終了する。
このようにして、調整者は、代表参加者に対して「代表参加者フラグ」と「全一般参加者の全ての更新ロググループ」が設定された準備依頼パケットを送信し、該準備依頼パケットに対する応答(準備応答パケット)を受信する。そして、該準備応答パケットに設定された処理結果を基に、代表参加者が準備処理に成功したか判断する。
{代表参加者の準備処理}
図22は、調整者で更新が無い場合の代表参加者の準備処理を示すフローチャートである。
この準備処理において、代表参加者は、まず、調整者が送信した準備依頼(準備依頼パケット)を受信する(ステップS401)。次に、ローカル代表ロググループをグローバル代表ロググループ表に設定し、該準備依頼パケットに設定されている代表参加者の指定(代表参加者フラグ)を主記憶装置に記憶する(ステップS402)。
代表参加者は、上記準備依頼パケットから分散トランザクションの全ての一般参加者の全更新ロググループの識別子を取得し(ステップS403)、該取得した全一般参加者の全ての更新ロググループの識別子を主記憶装置(の全一般参加者の全更新ロググループリスト)に記憶する(ステップS404)。
代表参加者は、更新ロググループリストの現在のエントリが終端であるか判断し(ステップS405)、終端であると判断すれば(ステップS405、YES)ステップS412に進み、終端でないと判断すれば(ステップS405、NO)ステップS406に進む。
代表参加者は、ステップS406において、更新ロググループリストの現在のエントリに登録されているロググループがグローバル代表ロググループであるか判断する。そして、グローバル代表ロググループであると判断すれば(ステップS406、YES)ステップS411に進み、グローバル代表ロググループでないと判断すれば(ステップS406、NO)ステップS407に進む。
代表参加者は、ステップS407において、更新ロググループリストの現在のエントリに登録されているロググループのトランザクション準備処理を行う。そして、該トランザクション準備処理が失敗したか判断し(ステップS408)、失敗したと判断すれば(ステップS408、YES)、通信パケット(準備応答パケット)に処理結果(=“失敗”)を設定する(ステップS419)。そして、該準備応答パケットを調整者に送信して(ステップS420)、本フローチャートの処理を終了する。
一方、代表参加者は、ステップS408において、上記トランザクション準備処理が成功したと判断すれば(ステップS408、NO)、グローバル代表ロググループの識別子を設定した「準備完了ログ」をロググループ(更新ロググループリストの現在のエントリに識別子が登録されているロググループ)のログ記憶装置に出力する(ステップS409)。
代表参加者は、該準備完了ログの出力処理が失敗したか判断し(ステップS410)、失敗したと判断すれば(ステップS410、YES)、上述したステップS419、S420の処理を行い、本フローチャートの処理を終了する。一方、上記準備完了ログの出力処理が成功したと判断すれば(ステップS410、NO)、更新ロググループリストの現在のエントリを次のエントリに位置付け、ステップS405に戻る。
このようにして、代表参加者は、ステップS405において更新ロググループリストの現在のエントリが終端であると判断するか、ステップS408においてトランザクション準備処理に失敗したと判断するか、または、ステップS410において準備完了ログの出力処理に失敗したと判断するまで、ステップS405〜S411の処理を繰り返す。
以上の処理により、代表参加者は、自身の更新ロググループリストに登録されているロググループ(更新ロググループ)について、トランザクション準備処理と準備完了ログの出力処理を行う。
代表参加者は、ステップS412において、グローバル代表ロググループのトランザクション準備処理を行う。そして、該トランザクション準備処理が失敗したか判断し(ステップS413)、失敗していなければ(ステップS413、NO)ステップS414に進み、失敗していれば(ステップS413、YES)ステップS417に進む。
代表参加者は、ステップS414において、分散トランザクションの全ての一般参加者の全更新ロググループの識別子を設定した「準備完了ログ」を、グローバル代表ロググループのログ記憶装置に出力する。そして、該準備完了ログの出力処理が失敗したか判断し(ステップS415)、該出力処理が成功であれば(ステップS415、NO)、通信パケット(準備応答パケット)に処理結果(=“成功”)を設定する(ステップS416)。そして、該準備応答パケットを調整者に送信し(ステップS417)、本フローチャートの処理を終了する。
一方、代表参加者は、ステップS415において、上記準備完了ログの出力処理に失敗したと判断すれば(ステップS415、NO)、通信パケット(準備応答パケット)に処理結果(=“失敗”)を設定し(ステップS417)、該準備応答パケットを調整者に送信し(ステップS418)、本フローチャートの処理を終了する。
以上のようにして、代表参加者は、グローバル代表ロググループについて、トランザクション準備処理と準備完了ログの出力処理を行い、それらの処理結果を設定した準備応答パケットを調整者に送信する。
尚、一般参加者は、調整者から「準備依頼パケット」を受信した場合、前述した図11に示すフローチャートの処理を行う。この場合、トランザクション準備処理と準備完了ログの出力処理に成功したロググループ(更新ロググループ)は「インダウト状態リスト」に登録される。
{2相コミットにおける準備処理におけるシステム状況}
図23は、上述した図21及び図22のフローチャートの処理が実行された場合の分散トランザクションシステムの状況の一例を示す図である。図23において、図8に示す分散トランザクションシステム5が備える構成要素と同一の構成要素には同じ符号を付与している。
図23において、図8に示されていない構成要素について説明する。
調整者(データベース管理装置1)は、主記憶装置内に代表参加者のDBMSiを記憶する領域である代表参加者記憶表190を備える。また、グローバル代表ロググループ表160も主記憶装置内に有している。
代表参加者(データベース管理装置2)は、主記憶装置内に自装置が「代表参加者」に指定されたことを記憶するためのフラグである代表参加者フラグ1010を備える。また、全一般参加者の全更新ロググループリスト1020を備える。この全一般参加者の全更新ロググループリスト1020には、調整者から通知される全ての一般参加者の全ての更新ロググループが登録される。また、グローバル代表ロググループ表160を主記憶装置内に有している。代表参加者に管理されるロググループ21内には準備完了ログ220−21が記録されている。ロググループ21は、グローバル代表ロググループであり、その識別子G21が上記グローバル代表ロググループ表160に設定されている。
一般参加者(データベース管理装置3)は、主記憶装置内にインダウト状態リスト170−3とグローバル代表ロググループ表160を備えている。
図23を参照しながら、上述した図21と図22のフローチャートに示す処理の概要を説明する。
調整者は、一般参加者(データベース管理装置3)に対して、グローバル代表ロググループ21の識別子G21が設定された準備依頼パケット1602を送信する。
一般参加者(データベース管理装置3)は、該準備応答パケット1602を受信すると、そのパケット1602に設定されているグローバル代表ロググループ21の識別子G21を、主記憶装置内のグローバル代表ロググループ表160−3に記憶する。そして、更新ロググループリスト130−3に識別子が登録されているロググループ31、32についてトランザクション準備処理を行う。そして、該トランザクション準備処理に成功すると、ロググループ31の準備完了ログ220−31をロググループ31のログ記憶装置に出力・記録する。また、ロググループ32の準備完了ログ220−32をロググループ32のログ記憶装置に出力・記録する。準備完了ログ220−31、220−32には、2相コミットの投票結果の問合せ先情報として、グローバル代表ロググループ21の識別子G21が設定されている。一般参加者は、該準備完了ログ220−31、220−32の出力処理に成功すると、トランザクション準備処理の処理結果と更新ロググループ31、32の識別子G31、G32が設定された準備応答パケット1652を調整者に送信する。
次に、調整者(データベース管理装置1)は、代表参加者(データベース管理装置2)に対して、準備依頼パケット1601を送信する。この準備依頼パケット1601には、「代表参加者フラグ」と「一般参加者の全ての更新ロググループのリスト」が設定されている。
代表参加者(データベース管理装置2)は、該準備応答パケット1601を受信すると、そのパケット1601に設定されている代表参加者フラグを、主記憶装置内の代表参加者フラグ1010に記憶する。また、該パケット1601に設定されている一般参加者の全ての更新ロググループのリストを、主記憶装置内の全一般参加者の全更新ロググループリスト1020に設定する。また、代表参加者は、更新ロググループリスト130−2に識別子が設定されているロググループ21についてトランザクション準備処理を行い、該トランザクション準備処理に成功すると、準備完了ログ220−21をロググループ21のログ記憶装置に出力・記録する。
{調整者のコミット処理}
図24は、調整者で更新が無い場合の調整者のコミット処理を示すフローチャートである。
調整者は、参加者リストの現在のエントリが終端であるか判断し(ステップS431)、終端であると判断すれば(ステップS431、YES)ステップS439に進み、終端でないと判断すれば(ステップS431、NO)ステップS432に進む。
調整者は、ステップS432において、参加者リストの現在のエントリに登録されている参加者(DBMSi)が代表参加者(DBMSi)であるか判断する。そして、代表参加者であると判断すると(ステップS432、YES)ステップS438に進み、代表参加者でないと判断すると(ステップS432、NO)ステップS433に進む。
調整者は、ステップS433において、一般参加者にコミット依頼(コミット依頼パケット)を送信する。そして、該コミット依頼の送信に失敗したか判断し(ステップS434)、該送信に失敗したと判断すると(ステップS434、YES)ステップS437に進み、該送信に成功したと判断すると(ステップS434、NO)ステップS435に進む。
調整者は、ステップS435において、上記コミット依頼を送信した一般参加者からの応答(コミット応答パケット)を受信する。そして、そのコミット応答パケットに設定されている処理結果を基に、該一般参加者がコミット処理に失敗したか判断し(ステップS436)、失敗したと判断すれば(ステップS436、YES)ステップS437に進み、成功したと判断すれば(ステップS436、NO)ステップS438に進む。
調整者は、ステップS437において、現在処理中の一般参加者(参加者リストの現在のエントリに登録されている一般参加者)の全更新ロググループのリストを主記憶装置内に一時的に記憶する。そして、ステップS438に進む。調整者は、ステップS437において、参加者リストの現在のエントリに登録されている一般参加者のDBMSに関連付けられているロググループを取得することにより、該一般参加者の全更新ロググループのリストを取得する。
調整者は、ステップS438において、参加者リストの現在のエントリを次のエントリに位置づけ、ステップS431に戻る。
このようにして、調整者は、ステップS431において、参加者リストの現在のエントリが終端であると判断するまで、ステップS431〜S438の処理を繰り返す。以上の処理により、調整者は、一般参加者に対してコミット依頼(コミット依頼パケット)を送信する。そして、一般参加者に対する該コミット依頼の送信に失敗するか、または、該コミット依頼に対する一般参加者からの応答(コミット応答パケット)に設定された処理結果に基づき、該一般参加者がコミット処理に失敗したと判断した場合には、該一般参加者の全更新ロググループのリストを主記憶装置内に記憶する。
調整者は、ステップS439において、主記憶装置に記憶されている、コミットに失敗した全ての一般参加者の全更新ロググループの識別子を通信パケット(コミット依頼パケット)に設定する。そして、該コミット依頼パケットを代表参加者に送信し(ステップS440)、その後、代表参加者から該コミット依頼パケットの送信に対する応答を受信し(ステップS441)、本フローチャートの処理を終了する。
尚、ステップS439において、参加者リストに登録されている全ての一般参加者に対してコミット依頼パケットの送信に成功し、かつ、該全ての一般参加者がコミット処理に成功したと判断した場合には、代表参加者に送信するコミット依頼パケットには更新ロググループは設定されない。
以上のようにして、調整者は、代表参加者に対して、コミットに失敗した一般参加者の更新ロググループに関する情報が設定されたコミット依頼(コミット依頼パケット)を送信する。
{代表参加者のコミット処理}
図25は、調整者で更新が無い場合の代表参加者のコミット処理を示すフローチャートである。
代表参加者は、調整者から通信パケット(コミット依頼パケット)を受信すると、該コミット依頼パケットに設定されている「コミットに失敗したロググループ(更新ロググループ)のリスト」を取得する(ステップS451)。そして、その取得したロググループのリストを、主記憶装置内にコミット再送信リストとして記憶する(ステップS452)。この場合、上記コミット依頼パケットにロググループが設定されていなければ、該コミット再送信リストは“空”となる。
代表参加者は、代表参加者の更新ロググループリスト(以下、更新ロググループリストと呼ぶ)の現在のエントリが終端であるか判断し(ステップS453)、終端であると判断すると(ステップS453、YES)ステップS461に進み、終端でないと判断すると(ステップS453、NO)ステップS454に進む。
代表参加者は、ステップS454において、更新ロググループリストの現在のエントリに登録されているロググループが「グローバル代表ロググループ」であるか判断する。そして、グローバル代表ロググループであると判断すると(ステップS454、YES)ステップS460に進み、グローバル代表ロググループでないと判断するとステップS455に進む。ここで、グローバル代表ロググループの識別子は、主記憶装置内のグローバル代表ロググループ表に設定されているので、この識別子を基に、ステップS454の判断を行う。
代表参加者は、ステップS455において、ロググループ(グローバル代表ロググループ以外の更新ロググループ)のトランザクションコミット処理を行う。そして、該コミット処理に失敗したか判断し(ステップS456)、失敗したと判断すると(ステップS456、YES)ステップS459に進み、該コミット処理に成功したと判断すると(ステップS456、NO)ステップS457に進む。
代表参加者は、ステップS457において、コミットログを、現在処理中のロググループのログ記憶装置に出力する。そして、該コミットログの出力処理が失敗したか判断し(ステップS458)、失敗したと判断すると(ステップS458、YES)、主記憶装置内のコミット再送信リストに現在処理中のロググループを登録し(ステップS459)、ステップS460に進む。一方、代表参加者は、ステップS458において、上記コミットログの出力処理に成功したと判断すると(ステップS458、NO)ステップS460に進む。
代表参加者は、ステップS460において、更新ロググループリストの現在のエントリ
を次のエントリに位置づけ、ステップS453に戻る。
このようにして、代表参加者は、ステップS453において、更新ロググループリストの現在のエントリが終端であると判断するまで、ステップS453〜S460の処理を繰り返す。
以上の処理により、代表参加者は、更新ロググループリスト(代表参加者の更新ロググループリスト)に登録されているグローバル代表ロググループ以外のロググループについてトランザクションコミット処理とコミットログの出力処理を行う。この場合、該2つの処理が共に成功しなかったロググループ、つまり、コミットに失敗したロググループは主記憶装置内のコミット再送信リストに登録する。
代表参加者は、ステップS461において、該コミット再送信リストが“空”であるか判断する。そして、該コミット再送信リストが空でなければ(ステップS461、NO)、該コミット再送信リストをグローバル代表ロググループのログ記憶装置に記憶し(ステップS462)、ステップS463に進む。
代表参加者は、ステップS463において、グローバル代表ロググループのトランザクションコミット処理を行う。そして、該コミット処理に関するコミットログを、グローバル代表ロググループのログ記憶装置に出力し(ステップS464)、主記憶装置内の全一般参加者の全更新ロググループリストを削除する(ステップS465)。そして、調整者にコミット完了のパケット(コミット応答パケット)を送信し(ステップS466)、本フローチャートの処理を終了する。
{代表参加者及び一般参加者がコミットに成功した場合のシステム状況}
図26は、調整者で更新が無い分散トランザクションシステムにおいてのコミット処理が行われた場合のシステム状況(その1)を示す図である。図26において、図23の分散トランザクションシステムが備える構成要素と同一の構成要素には同じ符号を付与している。
調整者(データベース管理装置1)は、参加者リスト150を参照して、一般参加者であるデータベース管理装置3に対してコミット依頼(コミット依頼パケット)1702を送信する。一般参加者(データベース管理装置3)は、更新ロググループリスト130−3を参照して、ロググループ31、ロググループ32の順に、トランザクションコミット処理とコミットログ出力処理を行い、それらの処理に成功して、ロググループ31、32に、それぞれ、コミットログ230−31、230−32を記録する。そして、処理結果(=“成功”)が設定されたコミット応答パケット1752を調整者に送信する。
調整者は、次に、更新ロググループの識別子Gikが設定されていないコミット依頼パケット1701を、代表参加者(データベース管理装置2)に送信する。今回の場合、コミットに失敗した一般参加者が存在しないので、コミット依頼パケット1701にはロググループは設定されない。
代表参加者は、調整者が送信した上記コミット依頼パケット1701を受信する。代表参加者は、そのパケット1701に「コミットに失敗したロググループのリスト」が設定されていないので、主記憶装置にコミット再送信リストを作成しない。代表参加者は、次に、代表参加者の更新ロググループリスト130−2を参照するが、そのリスト130−2にはグローバル代表ロググループの識別子G21のみが設定されており、かつ、コミット再送信リストは空なので(コミット再送信リストが無いので)、グローバル代表ロググループのトランザクションコミット処理を行い、それに成功すると、コミットログ230−21をグローバル代表ロググループ21のログ記憶装置に出力する。そして、主記憶装
置内の全一般参加者の全更新ロググループリスト1020を削除して、「コミット完了応答」であるコミット応答パケット1751を調整者に送信する。調整者は、そのコミット応答パケット1751を受信する。
{一般参加者がコミットに失敗した場合のシステム状況}
図27は、調整者で更新が無い分散トランザクションシステムにおいてのコミット処理が行われた場合のシステム状況(その2)を示す図である。図27において、図23の分散トランザクションシステムが備える構成要素と同一の構成要素には同じ符号を付与している。
図27は、一般参加者がダウンしてしまい、一般参加者においてコミットに失敗した場合のシステム状況の一例を示す図である。
図27に示すシステムは、調整者(データベース管理装置1)から一般参加者(データベース管理装置3)にコミット依頼パケット1712が送信され、一般参加者はそのパケット1712を受信したが、ロググループ31のログ記憶装置にコミットログを出力する前にダウンした例を示している。
この場合、調整者(データベース管理装置1)は、一般参加者(データベース管理装置3)から「コミット完了応答」のパケットを受信できないので、一般参加者がコミット処理に失敗したと判断する。そして、参加者リスト150から一般参加者の全更新ロググループの識別子(G31、G32)を取得し、それらの識別子G31、G32を設定したコミット依頼パケット1711を代表参加者(データベース管理装置2)に送信する。
代表参加者(データベース管理装置2)は、該コミット依頼パケット1711を受信すると、そのパケット1711からコミットに失敗したロググループのリスト(G31、G32)を取得する。そして、そのリスト(G31、G32)を、コミット再送信リスト180−2として主記憶装置内に一時的に記憶する。代表参加者は、次に、代表参加者の更新ロググループリスト130−2を参照する。この例では、そのリスト130−2にはグローバル代表ロググループの識別子G21のみが登録されているので、上記主記憶装置内に記憶したコミット再送信リストを、コミット再送信リスト240−21として、グローバル代表ロググループであるロググループ21のログ記憶装置に出力・記録する。そして、グローバル代表ロググループ(ロググループ21)のトランザクションコミット処理を行い、次に、コミットログ230−21を、グローバル代表ロググループ(ロググループ21)のログ記憶装置に出力・記録する。そして、主記憶装置内の全一般参加者の全更新ロググループリスト1020を削除して、「コミット完了応答」であるコミット応答パケット1761を調整者に送信する。調整者は、そのコミット応答パケット1761を受信する。
{調整者で更新が無い場合の調整者ダウン時の一般参加者の処理}
図28は、調整者で更新が無い分散トランザクションにおいて、調整者がダウンした時の一般参加者の処理を示すフローチャートである。
調整者で更新が無い分散トランザクションの2相コミットにおいて調整者がダウンした場合には、一般参加者は、インダウト状態となっている更新ロググループのインダウト状態を解決するために、代表参加者にトランザクション状態(トランザクション結果)を問い合わせ、代表参加者からコミットまたはロールバックの指示を受ける必要がある。
図28のフローチャートの処理を説明する。
一般参加者は、インダウト状態リストの現在のエントリが終端であるか判断し(ステップS481)、終端であれば(ステップS481、YES)ステップS492に進み、終
端でなければ(ステップS481、NO)ステップS482に進む。
一般参加者は、ステップS482において、ロググループ偏在表を参照して、グローバル代表ロググループの管理権を持つデータベース管理装置のDBMSを求める。つまり、グローバル代表ロググループ表からグローバル代表ロググループの識別子を求め、ロググループ偏在表から、その識別子に対応するDBMSを求める。この場合、該DBMSは代表参加者のDBMSである(図26参照)。
一般参加者は、その求めたDBMSを有するデータベース管理装置(代表参加者)に対して、「トランザクション結果の問合せ」を送信する(ステップS483)。そして、該データベース管理装置(代表参加者)から、トランザクション結果を受信し(ステップS484)、その受信内容から代表参加者の依頼がコミット指示であるか判断する(ステップS485)。
一般参加者は、ステップS485において、コミット指示であると判断すれば(ステップS485、YES)、インダウト状態リストの現在のエントリに登録されているロググループ(処理中のロググループ)のトランザクションコミット処理を実行し(ステップS488)、コミットログを、該処理中のロググループのログ記憶装置に出力し(ステップS489)、ステップS490に進む。
一方、一般参加者は、ステップS485において、上記投票結果がロールバック、つまりロールバック指示であると判断すれば(ステップS485、NO)、処理中のロググループのロールバック処理を実行し(ステップS486)、ロールバックログを、該処理中のロググループのログ記憶装置に出力し(ステップS487)、ステップS490に進む。
一般参加者は、ステップS490において、インダウト状態リストの現在のエントリに登録されているロググループ(処理中のロググループ)を削除する。そして、インダウト状態リストの現在のエントリを次のエントリに位置づけ(ステップS491)、ステップS481に戻る。
このようにして、一般参加者は、ステップS481において、インダウト状態リストの現在のエントリが終端であると判断するまで、ステップS481〜S491の処理を繰り返す。以上の処理により、一般参加者は、インダウト状態リストに登録されている各ロールバックについて、その2相コミットの投票結果を代表参加者から受け取り、該投票結果に従って、該各ロールバックのコミット処理またはロールバック処理を行う。そして、コミット処理を行った場合にはコミットログを、ロールバック処理を行った場合にはロールバックログを、各ロググループのログ記憶装置に出力する。
一般参加者は、ステップS492において調整者との接続環境を解除し、本フローチャートの処理を終了する。
{調整者で更新が無い場合の調整者ダウン時の代表参加者の処理}
図29は、調整者で更新が無い分散トランザクションにおいて、調整者がダウンした時の代表参加者の処理を示すフローチャートである。
調整者で更新が無い分散トランザクションの2相コミットにおいて調整者がダウンした場合には、代表参加者は、調整者に代わって、一般参加者に対して「コミット依頼」または「ロールバック依頼」を送信する必要がある。また、自装置が管理する更新ロググループについて、「コミット処理」または「ロールバック処理」を行う必要がある。代表参加者は、グローバル代表ロググループのログ記憶装置に「準備完了ログ」が記録されていれ
ば「コミット」を、準備完了ログが記録されていなければ「ロールバック」を決定する。
図29のフローチャートを説明する。
代表参加者は、全一般参加者の全更新ロググループリストの現在のエントリが終端であるか判断し(ステップS501)、終端であると判断すれば(ステップS501、YES)ステップS512に進み、終端でないと判断すれば(ステップS501、NO)ステップS502に進む。
代表参加者は、ステップS502において、グローバル代表ロググループのログ記憶装置に準備完了ログが記録されているか調べ、グローバル代表ロググループは「準備完了後の状態」であるか判断する。この場合、該準備完了ログが記録されていれば、グローバル代表ロググループは準備完了後の状態である判断する。
代表参加者は、ステップS502において、グローバル代表ロググループは準備完了後の状態である判断すれば(ステップS502、YES)ステップS503に進み、準備完了後の状態でないと判断すれば(ステップS502、NO)ステップS508に進む。
代表参加者は、ステップS503において、一般参加者に対して、処理中のロググループ(全一般参加者の全更新ロググループリストの現在のエントリに登録されているロググループ)を設定した「コミット依頼(コミット依頼パケット)」を送信する。そして、その送信が失敗したか判断し(ステップS504)、送信失敗であると判断すると(ステップS504、YES)ステップS511に進み、送信成功であると判断すると(ステップS504、NO)ステップS505に進む。尚、代表参加者は、ステップS503において一般参加者にコミット依頼を送信する際に該一般参加者の通信アドレスを取得する必要があるが、その通信アドレスはロググループ偏在表を参照することで取得する。つまり、ロググループ偏在表から、コミットを指示するロググループの管理権を持つデータベース管理装置のDBMSを取得することで、該DBMSに対応する通信アドレスを取得する。これは、後述する、ステップS508における一般参加者に対する「ロールバック依頼」の送信処理においても同様である。
代表参加者は、ステップS505において、上記コミット依頼を送信した一般参加者からの応答(コミット応答パケット)を受信する。そして、その応答に含まれる情報(処理結果)を調べ、該一般参加者が上記指定したロググループのコミットに失敗したか判断する(ステップS506)。
代表参加者は、一般参加者が該ロググループのコミットに失敗したと判断すると(ステップS506、YES)ステップS511に進み、コミットに成功したと判断すると(ステップS506、NO)ステップS507に進む。
代表参加者は、ステップS507において、全一般参加者の全更新ロググループリストから、上記コミットに失敗したロググループ(全一般参加者の全更新ロググループリストの現在のエントリに登録されているロググループ)を削除する。そして、ステップS511に進む。
代表参加者は、ステップS508において、一般参加者に対して、処理中のロググループを指定した「ロールバック依頼(ロールバック依頼パケット)」を送信する。そして、該一般参加者から該ロールバック依頼に対する応答を受信し(ステップS509)、全一般参加者の全更新ロググループリストから該処理中のロググループを削除し(ステップS510)、ステップS5511に進む。
代表参加者は、ステップS511において、全一般参加者の全更新ロググループリストの現在のエントリを次のエントリに位置づけ、ステップS501に戻る。
このようにして、代表参加者は、ステップS501において、全一般参加者の全更新ロググループリストの現在のエントリが終端であると判断するまで、ステップS501〜S511の処理を繰り返す。以上の処理により、代表参加者の全一般参加者の全更新ロググループリストに登録されている全てのロググループについて「コミット」または「ロールバック」の指示が決定され、各ロググループの管理権を持つ一般参加者に対して「コミット依頼」または「ロールバック依頼」が送信される。そして、コミット依頼を受信した一般参加者が指定されたロググループのコミットに成功した場合には、そのロググループが全一般参加者の全更新ロググループリストから削除される。該ロググループはコミットが完了し、インダウト状態が解決されたからである。また、ロールバック依頼を送信した一般参加者から応答を受信した場合にも、該ロールバック依頼で指定したロググループを、全一般参加者の全更新ロググループリストから削除する。
代表参加者は、ステップS512において、ステップS502と同様な処理により、グローバル代表ロググループは「準備完了後の状態」であるか判断する。そして、準備完了後の状態であると判断すれば(ステップS512、YES)ステップS513に進み、準備完了後の状態でないと判断すればステップS520に進む。
代表参加者は、ステップS513において、代表参加者の更新ロググループの現在のエントリが終端であるか判断する。そして、終端であると判断すると(ステップS513、YES)ステップS518に進み、終端でないと判断すると(ステップS513、NO)ステップS514に進む。
代表参加者は、ステップS514において、更新ロググループの現在のエントリに登録されているロググループが代表ロググループ(ローカル代表ロググループまたはグローバル代表ロググループ)であるか判断する。そして、代表ロググループであると判断すると(ステップS514、YES)、ステップS517に進み、代表ロググループでないと判断すると(ステップS514、NO)ステップS515に進む。
代表参加者は、ステップS515において、更新ロググループの現在のエントリに登録されているロググループ(処理中のロググループ)のトランザクションコミット処理を実行する。そして、コミットログを該処理中のロググループのログ記憶装置に出力し(ステップS516)、ステップS517に進む。
代表参加者は、ステップS517において、代表参加者の更新ロググループの現在のエントリを次のエントリに位置づける。そして、ステップS513に戻る。
このようにして、代表参加者は、ステップS513において、代表参加者の更新ロググループの現在のエントリが終端であると判断するまで、ステップS5512〜S517の処理を繰り返す。以上の処理により、代表参加者の更新ロググループリストに登録されている代表ロググループ以外のロググループ(更新ロググループ)について、トランザクションコミット処理とコミットログの出力が行われる。これにより、これらのロググループはコミットされる。つまり、インダウト状態が解決される。
代表参加者は、ステップS518において、代表ロググループのトランザクションコミット処理を行う。そして、コミットログを該代表ロググループのログ記憶装置に出力し(ステップS519)、本フローチャートの処理を終了する。
これにより、グローバル代表ロググループが準備完了後の状態になっている場合には、代表ロググループのコミットが完了する。以上のようにして、代表参加者が管理する全て
の更新ロググループのコミットが完了する。
代表参加者は、ステップS520において、代表参加者の更新ロググループリストの現在のエントリが終端であるか判断する。そして、終端であると判断すると(ステップS520、YES)、本フローチャートの処理を終了する。一方、終端でないと判断すると(ステップS520、NO)、更新ロググループの現在のエントリに登録されているロググループ(処理中のロググループ)のトランザクションロールバック処理を行い(ステップS521)、ロールバックログを該処理中のロググループのログ記憶装置に出力し(ステップS522)、代表参加者の更新ロググループリストの現在のエントリを次のエントリに位置付け(ステップS523)、ステップS520に戻る。
このようにして、代表参加者は、ステップS520において代表参加者の更新ロググループリストの現在のエントリが終端であると判断するまで、ステップS520〜S523の処理を繰り返す。以上の処理により、グローバル代表ロググループが準備完了後の状態になっていない場合には、代表参加者が管理権を持つ全ての更新ロググループについて、ロールバック処理とロールバックログの出力が行われ、該全ての更新ロググループのロールバックが完了する。
{調整者で更新が無い場合に、調整者がダウンした場合のシステム状況}
図30は、調整者で更新が無い場合に、調整者がダウンした場合のシステム状況を示す図である。図30において、図26の分散トランザクションシステムが備える構成要素と同一の構成要素には同じ符号を付与している。
図30は、分散トランザクションシステムが図23に示す状況、つまり、トランザクション準備処理が完了した状況にあるときに、調整者がダウンした場合の代表参加者と一般参加者の動作を示している。図23に示すシステム状況においては、一般参加者(データベース管理装置3)の更新ロググループ31、32がインダウト状態となっている。
図23に示す状況において、上述した図28と図29のフローチャートに示す処理を、それぞれ、代表参加者(データベース管理装置2)と一般参加者(データベース管理装置3)が実行する。
次に、システムが図23に示す状況後に調整者(データベース管理装置1)がダウンした場合に代表参加者(データベース管理装置2)が図29のフローチャートに示す処理を行ったときのシステムの動作を、図30を参照しながら説明する。
代表参加者(データベース管理装置2)は、まず、グローバル代表ロググループ21のログ記憶装置に準備完了ログ220−21が記録されていることを確認する。そして、全一般参加者の全更新ロググループリスト1020を参照して、一般参加者(データベース管理装置3)にコミット依頼(コミット依頼パケット)2001、2002を送信する。コミット依頼2001には、ロググループ31の識別子G31が設定されており、コミット依頼2002にはロググループ32の識別子G32が設定されている。
調整者は、代表参加者から上記コミット依頼2001、2002を受信すると、図14のフローチャートに示す処理を実行し、ロググループ31、32についてトランザクションコミット処理とコミットログの出力を終了した後、コミット完了であるコミット応答(コミット応答パケット)2051、2052を代表参加者に送信する(図14のステップS159)。
代表参加者は、グローバル代表ロググループ21のログ記憶装置に準備完了ログ220
−21が記録されていることを確認すると、代表参加者の更新ロググループリスト130−21を参照して、グローバル代表ロググループ21のトランザクションコミット処理を行い、グローバル代表ロググループ21のログ記憶装置にコミットログ230−21を出力・記録する。
[データベース管理装置がダウンした場合の処理]
図31は、クラスタ管理装置がシステム内の、あるデータベース管理装置のダウンを検知した場合の他のデータベース管理装置の動作を示すフローチャートである。
クラスタ管理装置は、システム内の、あるデータベース管理装置のダウンを検知すると、システム内の他のデータベース管理装置に対して、上記ダウンしたデータベース管理装置のダウンを通知する。
これにより、ダウンしたデータベース管理装置以外のデータベース管理装置は、図31のフローチャートに示す処理を実行する。
図31のフローチャートを説明する。
データベース管理装置(ダウンしたデータベース管理装置以外のデータベース管理装置、以後、他のデータベース管理装置と記載する)は、クラスタ管理装置から「DBMSダウン通知」を受信する(ステップS701)。
他のデータベース管理装置は、ロググループ偏在表と管理権の優先順位定義ファイル(図1参照)を参照し、ダウンしたデータベース管理装置が管理していたロググループの中から、自装置が管理権を引き継ぐべきロググループを特定する(ステップS702)。
この特定処理においては、まず、ロググループ偏在表を参照し、ダウンしたデータベース管理装置が管理していたロググループを特定する。次に、管理権の優先順位定義ファイルを参照し、該特定したロググループを自装置が引き継ぐ必要があるか判断する。上述したように、管理権の優先順位定義ファイルには、各ロググループについて、その管理権を有するデータベース管理装置の優先順位が設定されている。したがって、ダウンしたデータベース管理装置の次に位置付けられているデータベース管理装置が、ダウンしたデータベース管理装置が管理権を有していたロググループの管理権を引き継ぐことになる。
該ロググループの管理権を引き継いだデータベース管理装置は、該管理権を引き継いだロググループ毎のトランザクション復旧プロセスを生成する(ステップS703)。他のデータベース管理装置は、主記憶装置内のロググループ偏在表を更新し(ステップS704)、本フローチャートの処理を終了する。
ロググループ偏在表の更新は、管理権の優先順位定義ファイルを基に行うことができる。つまり、管理権の優先順位定義ファイルにおいて、ダウンしたデータベース管理装置のDBMSiを削除して繰り上げればよい。
{あるデータベース管理装置がダウンした場合における復旧後のシステム構成}
図32は、調整者(データベース管理装置1)、第1の参加者(データベース管理装置2)及び第2の参加者(データベース管理装置3)を備える分散トランザクションシステムにおいて、調整者がダウンした場合のシステム復旧処理を説明するシステム構成図である。図32に示すシステム状況は図20に類似しており、図20に示す構成要素と同一の構成要素には同じ符号を付与している。
図32に示す分散トランザクションシステムにおいて、クラスタ管理装置10は、デー
タベース管理装置1(調整者)のダウンを検知すると、データベース管理装置1の装置名「DBMS1」が設定されたダウン通知2002を、データベース管理装置2(第1の参加者)とデータベース管理装置3(第2の参加者)に送信する。
データベース管理装置2は、該ダウン通知2002を受信すると、上述した図31のフローチャートの処理を実行する。そして、図1に示す管理権の優先順位定義ファイル300を参照して、データベース管理装置1が管理していたロググループ11、12の管理権を引き継ぐ。また、データベース管理装置2は、第1のトランザクション復旧プロセス2112及び第2のトランザクション復旧プロセス2113を主記憶装置上で生成・起動する。インダウト状態復旧プロセス2111は永続的なデーモン・プロセス(daemon process)である。
第1のトランザクション復旧プロセス2112(以下、トランザクション復旧プロセス2112と記載)は、ロググループ11のトランザクションを復旧するためのプロセスである。また、第2のトランザクション復旧プロセス2113(以下、トランザクション復旧プロセス2113と記載)は、ロググループ12のトランザクションを復旧するためのプロセスである。インダウト状態復旧プロセス2111は、トランザクション復旧プロセス2112、2113が即座に復旧できないトランザクションを解決するためのプロセスであり、それらの復旧プロセス2112、2113からのインダウト復旧依頼を非同期に受け付ける。
トランザクション復旧同期タイム時間2010は、トランザクション復旧プロセス2113が使用するタイムアウト時間であり、ユーザが設定する時間である。トランザクション復旧プロセス2113は、準備完了ログが出力されているが、コミットログまたはロールバックログが出力されていないロググループ12をコミット状態まで復元した後、該準備完了ログに設定されているグローバル代表ロググループの復旧処理を、トランザクション復旧同期タイム時間2010に設定されている時間まで待つ。そして、タイムアウトした場合には、ロググループ12のデータをインダウト状態に設定する。
トランザクション復旧同期タイム時間設定ファイル320は、上述トランザクション復旧同期タイム時間2010が設定されているファイルであり、各データベース管理装置の外部記憶装置(不図示)に記憶されている。データベース管理装置2は、外部記憶装置から該トランザクション復旧同期タイム時間設定ファイル320を読み出し、それに設定されている時間を、トランザクション復旧同期タイム時間2010として主記憶装置に記憶する。
{グローバル代表ロググループのトランザクション復旧プロセス}
図33は、グローバル代表ロググループのトランザクション復旧プロセス(図32のトランザクション復旧プロセス2112に該当)の処理を示すフローチャートである。
グローバル代表ロググループのトランザクション復旧プロセスは、当該ロググループ(グローバル代表ロググループ)のデータのアクセス禁止区間(アクセス禁止期間)を開始する(ステップS601)。そして、該グローバル代表ロググループのログ記憶装置からログを読み込む(ステップS602)。そして、該グローバル代表ロググループについて、準備完了ログは出力されているが、コミットまたはロールバックの完了ログが出力されていないか判断する(ステップS603)。
グローバル代表ロググループのトランザクション復旧プロセスは、ステップS603において、準備完了ログのみが出力されていると判断すると(ステップS603、YES)、その準備完了ログに設定されている「参加ロググループリスト」を読み込み、それをコミット再送信リストとして主記憶装置上に保持する(ステップS604)。そして、前記グローバル代表ロググループのデータを“コミット状態”まで復元し(ステップS605)、インダウト状態復旧プロセス(図32のインダウト状態復旧プロセス2111に該当)にコミット再送信処理を依頼する(ステップS611)。該コミット再送信処理は、本プロセスとは非同期で実行される。そして、ステップS612に進む。
グローバル代表ロググループのトランザクション復旧プロセスは、ステップS603において、準備完了ログと、コミットまたロールバックの完了ログが出力されていると判断すれば(ステップS603、NO)、コミットログが出力されているか判断する(ステップS606)。そして、コミットログが出力されていれば(ステップS606、YES)、上記準備完了ログ内にコミット再送信リストがあるか判断する(ステップS607)。そして、コミット再送信リストがあれば(ステップS607、YES)、ステップS608に進み、コミット再送信リストがなければ(ステップS607、NO)ステップS609に進む。
グローバル代表ロググループのトランザクション復旧プロセスは、ステップS608において、そのコミット再送信リストを主記憶装置上に読み込む。そして、グローバル代表ロググループのデータを“コミット状態”まで復元し(ステップS609)、ステップS612に進む。
グローバル代表ロググループのトランザクション復旧プロセスは、ステップS606において、ロールバックログが出力されていると判断すれば(ステップS606、NO)、グローバル代表ロググループをロールバックし(ステップS610)、ステップS612に進む。
グローバル代表ロググループのトランザクション復旧プロセスは、ステップS612において、当該ロググループ(グローバル代表ロググループ)のデータのアクセス禁止区間を終了する。そして、本フローチャートの処理を終了する。
以上のようにして、グローバル代表ロググループのトランザクション復旧プロセスは、ダウンしたデータベース管理装置から管理権を引き継いだグローバル代表ロググループのトランザクションを復旧させる。この復旧処理の期間、グローバル代表ロググループのデータに対するアクセスを禁止させる。そして、グローバル代表ロググループのログ記憶装置に準備完了ログのみが出力(記録)されている場合、または、準備完了ログとコミットログが出力されている場合には、コミット再送信リストを主記憶装置上に作成し、グローバル代表ロググループのデータを“コミット状態”まで復元する。そして、インダウト状態復旧プロセスに対して、上記コミット再送信リストに登録されたロググループに対する「コミット依頼」の送信を依頼し、グローバル代表ロググループのデータに対するアクセス禁止を解除する。また、グローバル代表ロググループのログ記憶装置に準備完了ログとロールバックログが出力(記録)されている場合には、グローバル代表ロググループのデータをロールバックして、グローバル代表ロググループのデータに対するアクセス禁止を解除する。
また、グローバル代表ロググループのトランザクション復旧プロセスは、グローバル代表ロググループ以外のロググループが、グローバル代表ロググループと同一のデータベース管理装置(DBMS)にある場合は、即座に解決可能なトランザクションは自プロセスで実施し、即座に解決できないトランザクションについてはインダウト状態復旧プロセスに委託し、システム内のその他のロググループ全体に対するアプリケーションによる更新処理の再開を可能にする。
{グローバル代表ロググループ以外のロググループのトランザクション復旧プロセス}
図34は、グローバル代表ロググループ以外のロググループのトランザクション復旧プロセスの処理を示すフローチャートである。
グローバル代表ロググループ以外のロググループのトランザクション復旧プロセス(図32のトランザクション復旧プロセス2113に該当)は、当該ロググループ(自プロセスがトランザクション復旧処理を担当するロググループ)のデータのアクセス禁止区間(アクセス禁止期間)を開始し(ステップS621)、該ロググループのログ記憶装置からログを読み込む(ステップS622)。そして、該ロググループに対して準備完了ログのみが出力されているか判断する(ステップS623)。
グローバル代表ロググループ以外のロググループのトランザクション復旧プロセス(以下、便宜上、ロググループのトランザクション復旧プロセスを呼ぶ)は、ステップS623において、準備完了ログのみが出力されていると判断すれば(ステップS623、YES)、当該ロググループのデータをコミット状態まで復元し(ステップS624)、該準備完了ログに設定されたグローバル代表ロググループの復旧処理を、ユーザが設定した時間(図32のトランザクション復旧同期タイム時間2010に該当)だけ待つ(ステップS625)。そして、タイムアウト、つまり、グローバル代表ロググループの復旧処理が該ユーザの設定時間内に終了しなかったか判断し(ステップS626)、タイムアウトであれば(ステップS626、YES)、ステップS627に進み、タイムアウトでなければ(ステップS626、NO)ステップS630に進む。
ロググループのトランザクション復旧プロセスは、ステップS627において、当該ロググループのデータ(更新データ)を“インダウト状態”に設定する。そして、当該ロググループを主記憶装置上のインダウト状態リストに登録し(ステップS628)、該インダウト状態に設定されたデータ(更新データ)を更新抑止状態にする(ステップS629)。そして、インダウト状態復旧プロセス(図32のインダウト状態復旧プロセス2111に該当)にインダウト復旧依頼を行う(ステップS641)。該インダウト復旧依頼に対する処理は、本プロセスとは非同期で実行される。そして、ステップS642に進む。
ロググループのトランザクション復旧プロセスは、ステップS630において、グローバル代表ロググループの管理権を持つDBMS(データベース管理装置)へトランザクションの最終結果を問い合わせる。そして、該問合せに対する応答が“コミット指示”であるか判断し(ステップS631)、コミット指示であると判断すれば(ステップS631、YES)、当該ロググループをコミットし(ステップS632)、当該ロググループのログ記憶装置にコミットログを出力し(ステップS633)、ステップS642に進む。
ロググループのトランザクション復旧プロセスは、ステップS631において、ロールバック指示であると判断すれば(ステップS631、NO)、当該ロググループをロールバックし、当該ロググループのログ記憶装置にロールバックログを出力し(ステップS635)、ステップS642に進む。
ロググループのトランザクション復旧プロセスは、ステップS623において、準備完了ログとそれ以外のログが出力されていると判断すれば(ステップS623、NO)、コミットログが出力されているか判断する(ステップS636)。そして、コミットログが出力されている判断すれば(ステップS636、YES)、当該ロググループのデータを“コミット状態”まで復元し(ステップS637)、ステップS642に進む。
ロググループのトランザクション復旧プロセスは、ステップS636において、ロールバックログが出力されていると判断すれば(ステップS636、NO)、当該ロググルー
プをロールバックし(ステップS639)、ステップS642に進む。
ロググループのトランザクション復旧プロセスは、ステップS642において、当該ロググループのデータのアクセス禁止区間を終了する。そして、本フローチャートの処理を終了する。
このように、グローバル代表ロググループ以外のロググループのトランザクション復旧プロセスも、グローバル代表ロググループのトランザクション復旧プロセスと同様に、即座に解決可能なトランザクションは自プロセスで実施し、即座に解決できないトランザクションについてはインダウト状態復旧プロセスに委託し、システム内のその他のロググループ全体に対するアプリケーションによる更新処理の再開を可能にする。
また、インダウト状態のデータだけを更新抑止する処理(ステップS627〜S629)は、トランザクションのデータ量やデータ記憶装置に対するランダムアクセス頻度に応じて処理時間及びデータ記憶装置に対する入出力のアクセス時間がかかる。このため、本プロセスの処理時間を短くするためには、ステップS625におけるグローバル代表ロググループのトランザクション復旧処理が成功する(タイムアウトしない)、つまり、ステップS627〜S629のインダウト状態のデータだけを更新抑止する処理を実施しないことが望ましい。本プロセスでは、該タイムアウトの時間をユーザが設定可能にすることで、グローバル代表ロググループのトランザクション復旧処理が終了するまでの待ち合わせ時間を長くして、該インダウト状態のデータだけを更新抑止する処理時間を避けることで、本プロセスに要する処理時間を短くするか、前記待ち合わせ時間を短くして、当該ロググループ全体に対するアクセスが許可されるまでの時間を短くするかのどちらかを、ユーザが選択できるようにしている。
{インダウト状態復旧プロセス}
図35は、インダウト状態復旧プロセスの処理を示すフローチャートである。
インダウト状態復旧プロセスは、まず、終了指示であるか判断し(ステップS651)、終了指示であると判断すれば、本フローチャートの処理を終了する。一方、終了指示でないと判断すれば(ステップS651、NO)、コミット再送信リストの現在のエントリが終端であるか、または、コミット再送信リストが無いか判断する(ステップS652)。そして、コミット再送信リストの終端であると判断するか、または、コミット再送信リストが無いと判断すると(ステップS652、YES)ステップS659に進み、コミット再送信リストの終端でないと判断すると(ステップS652、NO)ステップS653に進む。
インダウト状態復旧プロセスは、ステップS653において、コミット再送信リストの現在のエントリに登録されているロググループのコミット依頼を、該ロググループの管理権を持つデータベース管理装置(DBMS)に送信する。そして、該コミット依頼の送信処理が失敗したか判断し(ステップS654)、該送信処理が失敗したと判断すると(ステップS654、YES)ステップS658に進み、該送信処理に成功したと判断すると(ステップS654、NO)ステップS655に進む。
インダウト状態復旧プロセスは、該コミット依頼に対する応答(応答パケット)を受信し(ステップS655)、その応答パケットに設定された「処理結果」を参照して、前記ロロググループのコミットに失敗したか判断する(ステップS656)。そして、該コミットに成功したと判断すれば(ステップS656、NO)、ステップS657に進み、コミット再送信リストの現在のエントリを削除する(ステップS657)。一方、該コミットに失敗したと判断すれば(ステップS656、YES)ステップS658に進む。
インダウト状態復旧プロセスは、ステップS657において、コミット再送信リストの現在のエントリを次のエントリに位置づけ、ステップS652に戻る。
このようして、インダウト状態復旧プロセスは、ステップS652において、コミット再送信リストの現在のエントリが終端となるまで、ステップS652〜S658の処理を繰り返す。以上の処理により、コミット再送信リストに登録されている全てのロググループについて、コミット依頼が、ロググループの管理権を持つデータベース管理装置に送信される。そして、コミットが成功したロググループについては、コミット再送信リストからそのエントリが削除される。また、コミットに失敗したロググループについては、コミット再送信リストのそのエントリは残ったままとまる。
インダウト状態復旧プロセスは、ステップS659において、インダウト状態リストの現在のエントリは終端であるか判断する。そして、終端であると判断すると(ステップS659、YES)ステップS668に進む。一方、終端でないと判断すると(ステップS659、NO)、ステップS660に進む。
インダウト状態復旧プロセスは、ステップS660において、グローバル代表ロググループの管理権を持つデータベース管理装置(DBMS)へトランザクションの最終結果を問い合わせる。そして、該問合せに対する応答を該データベース管理装置から受信し、該応答がコミット指示であるか判断する(ステップS661)。コミット指示であると判断すると(ステップS661、YES)、インダウト状態リストの現在のエントリに登録されているロググループをコミットし(ステップS662)、該ロググループのログ記憶装置にコミットログを出力する(ステップS663)。そして、ステップS666に進む。
一方、インダウト状態復旧プロセスは、ステップS661において、前記応答がロールバック指示であると判断すると(ステップS661、NO)、インダウト状態リストの現在のエントリに登録されているロググループをロールバックし(ステップS664)、該ロググループのログ記憶装置にロールバックログを出力する(ステップS665)。そして、ステップS666に進む。
インダウト状態復旧プロセスは、ステップS666において、現在のエントリを削除する。そして、インダウト状態リストの現在のエントリを次のエントリに位置づけ(ステップS667)、ステップS659に戻る。
このようにして、インダウト状態復旧プロセスは、インダウト状態リストの現在のエントリが終端となるまで、ステップS659〜S667の処理を繰り返す。以上の処理により、インダウト状態リストに登録されている全てのロググループについて、トランザクションの最終結果に応じた処理(コミットまたはロールバック)が行われ、各ロググループのログ記憶装置にコミットログまたはロールバックログが出力される。また、コミットまたはロールバックが実施されたロググループは、インダウト状態リストから削除される。
インダウト状態復旧プロセスは、ステップS668において、「トランザクション結果の問合せ(トランザクション結果問合せ)」、または「コミット依頼」を待つ。該トランザクション結果の問合せと該コミット依頼には、下記(1)〜(6)のようなものがある。
(1)インダウト状態であるときに、調整者のダウンを、クラスタ管理装置からの通知により検知した参加者からのトランザクション結果問合せ
(2)参加者ダウンによって、コミット処理の失敗を検知した調整者からのコミット依頼(3)他のデータベース管理装置(DBMS)のトランザクション復旧プロセスからのトランザクション結果問合せ
(4)他のデータベース管理装置(DBMS)のトランザクション復旧プロセスからのコ
ミット依頼
(5)他のデータベース管理装置(DBMS)のインダウト状態復旧プロセスからのトランザクション結果問合せ
(6)他のデータベース管理装置(DBMS)のインダウト状態復旧プロセスからのコミット依頼
インダウト状態復旧プロセスは、ステップS669において、トランザクション結果問合せであると判断すると(ステップS669、YES)ステップS670に進み、コミット依頼であると判断すると(ステップS669、NO)ステップS676に進む。
インダウト状態復旧プロセスは、ステップS670において、コミット再送信リストに、該トランザクション結果問合せのパケットに設定されているロググループ(以下、指定ロググループと記載)が登録されているエントリ(該当エントリ)があるか判断し(ステップS670)、該当エントリがあれば(ステップS670、YES)ステップS671に進み、該当エントリがなければ(ステップS670、NO)ステップS675に進む。
インダウト状態復旧プロセスは、ステップS671において、前記トランザクション結果問合せを送信してきたデータベース管理装置(DBMS)に「コミット(コミット指示)」を返信する。そして、該データベース管理装置から「該コミットの処理結果」が設定された応答を受信し(ステップS672)、該処理結果を調べ、該データベース管理装置が前記指定ロググループのコミットに失敗したか判断する(ステップS673)。そして、該コミットに成功したと判断すれば(ステップS673、NO)、コミット再送信リストから前記指定ロググループが登録されたエントリを削除し(ステップS674)、ステップS679に進む。一方、ステップS673において、前記コミットに失敗したと判断すれば(ステップS673、YES)、ステップS679に進む。
インダウト状態復旧プロセスは、ステップS675において、前記トランザクション結果問合せを送信してきたデータベース管理装置(DBMS)に「ロールバック(ロールバック指示)」を返信する。そして、ステップS679に進む。
インダウト状態復旧プロセスは、ステップS676において、コミットを依頼されたロググループをコミットする。そして、コミット処理が失敗したか判断し(ステップS676a)、成功していれば(ステップS678a、NO)ステップS677に進み、失敗していれば(ステップS676a、YES)ステップS677に進む。
インダウト状態復旧プロセスは、ステップS677において、該ロググループのログ記憶装置にコミットログを出力する。そして、該出力処理が失敗したか判断し(ステップS677a)、成功していれば(ステップS677a、NO)ステップS678に進み、失敗していれば(ステップS677a、YES)ステップS678aに進む。
インダウト状態復旧プロセスは、ステップS678において、インダウト状態リストから、該ロググループが登録されているエントリを削除する。そして、コミット処理結果を返信し(ステップS678a)、ステップS679に進む。
インダウト状態復旧プロセスは、ステップS679において、インダウト状態リストが空であるか判断する。そして、インダウト状態リストが“空”であれば(ステップS679、YES)ステップS651に進み、インダウト状態リストが“空”でなければ、ステップS659に進む。
インダウト状態復旧プロセスは、上述したように、グローバル代表ロググループの復旧プロセスから「コミット再送信処理」を依頼され、グローバル代表ロググループ以外のロ
ググループのトランザクション復旧プロセスからは「インダウト状態の復旧」を依頼される。グローバル代表ロググループのトランザクション復旧プロセスは、グローバル代表ロググループの管理権が別のデータベース管理装置(DBMS)に移動するたびに生成・起動される。また、グローバル代表ロググループ以外のロググループのトランザクション復旧プロセスは、グローバル代表ロググループ以外のロググループの管理権が別のデータベース管理装置(DBMS)に移動するたびに生成・起動される。したがって、インダウト状態復旧プロセスは、システム内で、バックグラウンドで自動的に実行されながら、ステップS648において終了指示があったと判断するまで、システム内に常駐し、ステップS648〜S679の処理を繰り返し実行し続け、コミット再送信リスト及びインダウト状態リストの状態を常時監視する。また、参加者や調整者、及び他のデータベース管理装置(DBMS)からの「トランザクション結果問合せ」や「コミット依頼」に常時対応する。
ここで、図32に示す状況にあるシステムでの、インダウト状態復旧プロセス2111、トランザクション復旧プロセス(グローバル代表ロググループのトランザクション復旧プロセス)2112及びトランザクション復旧プロセス(グローバル代表ロググループ以外のロググループの復旧プロセス)2113の動作の概要を説明する。
トランザクション復旧プロセス2112は、グローバル代表ロググループ11のログ記憶装置から準備完了ログ220−11を読み込み、それに設定された参加ロググループリスト(G12、G21,G31、G32)を、コミット再送信リスト180−2として主記憶装置に保持する。そして、グローバル代表ロググループ11をコミット状態まで復元し、インダウト状態復旧プロセス2111に「コミット再送信処理」を依頼する。
トランザクション復旧プロセス2113は、ロググループ12のログ記憶装置から準備完了ログ220−12を読み込み、ロググループ12をコミット状態まで復元する。そして、該準備完了ログ220−12に識別子G11が設定されたグローバル代表ロググループ11の復旧処理を、トランザクション復旧同期タイム時間2010に設定されている時間だけ待つ。そして、該設定時間内に、グローバル代表ロググループ11の復旧処理が終了すれば、グローバル代表ロググループ11の管理権を持つデータベース管理装置(この場合、データベース管理装置2)にトランザクションの最終結果を問い合わせる。
インダウト状態復旧プロセス2111は、該トランザクション結果問合せを受けると、トランザクション復旧プロセス2113に「コミット指示」または「ロールバック指示」を返信する。トランザクション復旧プロセス2113は、インダウト状態復旧プロセス2111から「コミット指示」を受信すると、ロググループ12をコミットし、ロググループ12のログ記憶装置に「コミットログ(不図示)」を出力・記録する。また、「ロールバック指示」を受信すると、ロググループ12をロールバックし、ロググループ12のログ記憶装置に「ロールバックログ(不図示)」を出力・記録する。
インダウト状態復旧プロセス2111は、コミット再送信リスト180−2を参照し、ロググループ12、21、31、32の管理権を持つデータベース管理装置(DBMS)に「コミット依頼」を送信する。ロググループ12、21のコミット依頼はデータベー管理装置2に送信され、ロググループ31、32のコミット依頼はデータベース管理装置3に送信される。インダウト状態復旧プロセス2111は、該コミット依頼を送信したロググループの内、コミットが成功したロググループについては、コミット再送信リストからその登録エントリを削除する。また、コミットに失敗したロググループについては、その登録エントリを残す。
インダウト状態復旧プロセス2111は、インダウト状態リスト170−2にロググル
ープ12の識別子G12が登録されていると判断すると、グローバル代表ロググループの管理権を持つデータベース管理装置(この場合、データベース管理装置2)へトランザクションの最終結果を問い合わせる。そして、データベース管理装置2から「コミット指示」を受信すると、ロググループ12をコミットし、ロググループ12のログ記憶装置に「コミットログ(不図示)」を出力・記録する。また、「ロールバック指示」を受信すると、ロググループ12をロールバックし、ロググループ12のログ記憶装置に「ロールバックログ(不図示)」を出力・記録する。
インダウト状態復旧プロセス2111は、データベース管理装置2からロググループ12のトランザクション結果問合せを、データベース管理装置3からロググループ31、32のトランザクション結果問合せを受信する。そして、コミット再送信リスト180を参照し、コミット再送信リスト180−2に識別子Gikが登録されているロググループについては、該ロググループの管理権を持つデータベース管理装置(DBMS)に「コミット(コミット指示)」を返信する。また、コミット再送信リスト180−2に識別子Gikが登録されていないロググループについては、該ロググループの管理権を持つデータベース管理装置(DBMS)に「ロールバック(ロールバック指示)」を返信する。そして、「コミット処理成功」の応答を受け取ったロググループについては、コミット再送信リスト180−2から、そのロググループの識別子Gikを削除する。また。「コミット処理失敗」の応答を受け取ったロググループについては、コミット再送信リスト180−2内のそのロググループの識別子Gikを削除しない。
本発明は、上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々に変形して実施することができる。
尚、上記実施形態では、主に、トランザクション結果が“コミット”である場合について説明したが、本発明は、トランザクション結果が“ロールバック”である場合も、コミットの場合とほぼ同様にして実施することが可能である。また、分散トランザクションシステムの構成例として、データベース管理装置を3台備えるシステムを取上げて説明したが、本発明は、4台以上のデータベース管理装置を備える分散トランザクションシステム1にも適用可能である。
以上の実施形態に関し、更に以下の付記を記載する。
(付記1)
データを記憶するデータ記憶装置と該データのログを記憶するログ記憶装置のパッケージであるロググループを備え、該ロググループの管理権がシステム内のデータベース管理装置間で移動可能な分散トランザクションシステムの2相コミットプロトコルにおけるインダウト状態の解決方法であって、
各ロググループに一意の識別子を付与し、各ロググループの管理権を持つデータベース管理装置に関する情報を第1のテーブルに登録するステップと、
複数のロググループが参加する分散トランザクションの2相コミットにおいて調整者となるデータベース管理装置が管理するロググループの中で代表となるロググループ(グローバル代表ロググループ)のログ記憶装置に出力される準備完了ログ(第1の準備完了ログ)に、該分散トランザクションの参加者となっているデータベース管理装置が管理するロググループの識別子のリスト(参加ロググループリスト)を記憶するステップと、
前記2相コミットにおいて参加者となるデータベース管理装置が管理するロググループのログ記憶装置に出力する準備完了ログ(第2の準備完了ログ)に、前記グローバル代表ロググループの識別子を記憶するステップと、
2相コミットのインダウト状態期間中に、前記グローバル代表ロググループの管理権が別のデータベース管理装置に移動した場合に、該グローバル代表ロググループの管理権を該別のデータベース管理装置が持つように、前記第1のテーブルを書き換えるステップと、
2相コミットのインダウト状態期間中に、前記グローバル代表ロググループ以外のロググループの管理権が別のデータベース管理装置に移動した場合に、該ロググループの管理権を該別のデータベース管理装置が持つように書き換えるステップと、
インダウト状態となっている参加者は、前記第2の準備完了ログに記憶されているグローバル代表ロググループの識別子と前記第1のテーブルを参照して、該グローバル代表ロググループの管理権を持つデータベース管理装置に、トランザクション結果の問合せを送信するステップと、
前記調整者は、インダウト状態となっている参加者からトランザクション結果の問合せを受信した場合に、前記第1の準備完了ログに記憶されているロググループの識別子のリストと前記第1のテーブルを参照して、前記参加者に該トランザクション結果を返信するステップと、
を備えることを特徴とする分散トランザクションの2相コミットにおけるインダウト状態の解決方法。
(付記2)
付記1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者は、
前記第1の準備完了ログに記憶されている識別子のリストと前記第1のテーブルを基に、該識別子とコミット指示またはロールバック指示が設定された通知を、該識別子を有するロググループを管理している参加者に送信し、該参加者に該ロググループのコミットまたはロールバックを依頼するステップと、
前記コミット依頼通知を受信した参加者がコミットに失敗した場合には、該参加者が管理している全ての更新ロググループの識別子のリスト(コミット再送信リスト)を記憶するステップを備え、
参加者は、調整者から前記コミットまたはロールバック依頼の通知を受信した場合には、前記第1のテーブルを参照して、該依頼に対する処理結果の応答を、該調整者に送信するステップを備える。
(付記3)
付記1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者が分散トランザクションにおいて自装置のロググループのデータを更新する場合の2相コミットの準備処理において、
調整者は、
参加者に対して、前記グローバル代表ロググループの識別子が設定された準備処理依頼の通知を送信するステップと、
該準備処理依頼通知を送信した参加者から準備処理成功の応答を受信した場合には、該応答から該参加者が更新したロググループの識別子を取得し、該識別子を該参加者に関連付けて記憶するステップと、
調整者が管理するグローバル代表ロググループ以外のロググループについてトランザクション準備処理を行い、グローバル代表ロググループの識別子が設定された準備完了ログを、該ロググループのログ記憶装置に出力するステップと、
を備え、
参加者は、
調整者から前記準備依頼の通知を受信すると、前記準備依頼通知から前記グローバル代表ロググループを取り出すステップと、
自装置が管理するロググループの準備処理を行い、該準備処理に成功したロググループのログ記憶装置には、前記取り出したグローバル代表ロググループの識別子を設定した準備完了ログを、自装置が管理しているロググループのログ記憶装置に出力するステップと

該準備完了ログを前記ログ記憶装置に出力する処理に成功した場合には、前記準備処理に成功したロググループの識別子をインダウト状態リストに登録し、調整者に準備成功した全ロググループ識別子を送信するステップを備える。
(付記4)
付記3記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
前記準備処理終了後の2相コミットのコミット処理において、
調整者は、
参加者にコミット依頼を送信するステップと、
該コミット依頼を送信した参加者のコミットが失敗したと判断した場合には、該参加者が管理している全ての更新ロググループの識別子を、前記グローバル代表ロググループのログ記憶装置に出力するステップと、
自装置が管理するグローバル代表ロググループ以外の更新ロググループのコミット処理を実行するステップと、
コミットに成功した更新ロググループについては、その更新ロググループのログ記憶装置にコミットログを出力し、コミットに失敗した更新ロググループについては、その更新ロググループの識別子をグローバル代表ロググループのログ記憶装置に出力するステップと、
グローバル代表ロググループのコミット処理を実行するステップと、
該グローバル代表ロググループのコミットログを、該グローバル代表ロググループのログ記憶装置に出力するステップを備え、
参加者は、
調整者から前記コミット依頼をすると、自装置が管理する全ての更新ロググループについてコミット処理を実行するステップと、
コミットに成功した更新ロググループについては、その識別子を前記インダウト状態リストから削除し、コミット完了の応答を調整者に送信するステップと、
コミットに失敗した更新ロググループについては、コミット失敗の応答を調整者に送信するステップを備える。
(付記5)
付記3記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者がダウンした場合、
参加者は、
前記インダウト状態リストに更新ロググループの識別子が登録されている場合には、グローバル代表ロググループの管理権を持つ参加者に対して、トランザクション結果の問合せ通知を送信するステップと、
該トランザクション結果の問合せに対する調整者の応答を受信し、該応答がコミット指示であれば、前記インダウト状態リストに登録されている更新ロググループについてコミット処理と該更新ロググループのログ記憶装置へのコミットログの出力を行い、該応答がロールバック指示であれば、前記インダウト状態リストに登録されている更新ロググループについてロールバック処理該更新ロググループのログ記憶装置へのロールバックログの出力を行うステップと、
を備える。
(付記6)
付記1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者が分散トランザクションにおいて自装置のロググループのデータを更新しない場合の2相コミットの準備処理において、
調整者は
参加者の中から代表参加者を決定するステップと、
該代表参加者が管理するロググループの中からグローバル代表ロググループを決定するステップと、
代表参加者以外の参加者である一般参加者に準備処理依頼の通知を送信する際に、該通知に前記グローバル代表ロググループの識別子を設定するステップと、
代表参加者に準備処理依頼の通知を送信する際に、該通知に全ての前記一般参加者が管理する全てのロググループの識別子と、代表参加者に決定された旨を示す情報を設定するステップを備え、
一般参加者は、
調整者から前記準備依頼の通知を受信すると、前記準備依頼通知から前記グローバル代表ロググループの識別子を取得するステップと、
自装置が管理するロググループの準備処理を行い、該準備処理に成功したロググループについては、そのログ記憶装置に、前記取得したグローバル代表ロググループの識別子を設定した準備完了ログを出力するステップと、
該準備完了ログを前記ログ記憶装置に出力する処理に成功した場合には、前記準備処理に成功したロググループの識別子をインダウト状態リストに登録するステップを備え、
代表参加者は、
前記調整者から前記準備依頼通知を受信すると、該通知から前記全ての一般参加者の全ロググループの識別子を取得・記憶するステップと、
自装置が管理するグローバル代表ロググループ以外のロググループの準備処理を行い、該準備処理に成功したロググループについては、そのログ記憶装置に、前記取得したグローバル代表ロググループの識別子を設定した準備完了ログを出力するステップと、
グローバル代表ロググループの準備処理を行い、該準備処理に成功した場合には、グローバル代表ロググループのログ記憶装置に、前記取得した全ての一般参加者の全ロググループの識別子を設定した準備完了ログを出力し、調整者に準備成功した全ロググループ識別子を送信するステップと、
調整者に対して、上記準備処理の結果を通知する応答を送信するステップを備える。
(付記7)
付記6記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
前記準備処理終了後の2相コミットのコミット処理において、
調整者は
一般参加者にコミット依頼の通知を送信するステップと、
該コミット依頼の通知を送信した一般参加者がコミットに失敗したか判断するステップと、
コミットに失敗した全ての一般参加者の全更新ロググループの識別子を設定したコミット依頼の通知を、代表参加者に送信するステップを備え、
一般参加者は、
調整者から前記コミット依頼の通知を受信すると、自装置が管理する全ての更新ロググループについてコミット処理を実行するステップと、
コミットに成功した更新ロググループについては、その識別子を前記インダウト状態リストから削除し、コミット完了の応答を調整者に送信するステップと、
コミットに失敗した更新ロググループについては、コミット失敗の応答を調整者に送信するステップを備え、
代表参加者は、
調整者から前記コミット依頼通知を受信すると、そのコミット依頼通知に設定されてい
る全ての識別子を取得するステップと、
該取得した全ての識別子を、グローバル代表ロググループのログ記憶装置に出力するステップと、
自装置の全ての更新ロググループについてコミット処理を実行し、コミットに失敗した更新ロググループの識別子の一覧を、グローバル代表ロググループのログ記憶装置にコミット再送信リストとして記憶するステップと、
グローバル代表ロググループのコミット処理を実行し、そのコミットログをグローバル代表ロググループのログ記憶装置に出力するステップと、
調整者に、コミット完了の応答を送信するステップを備える。
(付記8)
付記6記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者がダウンした場合、
一般参加者は、
前記インダウト状態リストに更新ロググループの識別子が登録されている場合には、グローバル代表ロググループの管理権を持つ参加者に対して、トランザクション結果の問合せ通知を送信するステップと、
該トランザクション結果の問合せに対する調整者の応答を受信し、該応答がコミット指示であれば、前記インダウト状態リストに登録されている更新ロググループについてコミット処理と該更新ロググループのログ記憶装置へのコミットログの出力を行い、該応答がロールバック指示であれば、前記インダウト状態リストに登録されている更新ロググループについてロールバック処理該更新ロググループのログ記憶装置へのロールバックログの出力を行うステップと、
を備える。
(付記9)
付記6記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者がダウンした場合、
代表参加者は、
グローバル代表ロググループが準備完了ログ後の状態である場合には、更新ロググループの管理権を持つ一般参加者に対してコミット依頼を送信するステップと、
グローバル代表ロググループが準備完了後の状態でない場合には、更新ロググループの管理権を持つ一般参加者にロールバック依頼を送信するステップと、
グローバル代表ロググループが準備完了後の状態であるときは、代表参加者の更新ロググループのコミット処理とコミットログの該更新ロググループのログ記憶装置への出力を行うステップと、
グローバル代表ロググループが準備完了後の状態の状態でないときは、代表参加者の更新ロググループについてロールバック処理とロールバックログの該更新ロググループのログ記憶装置に対する出力を行うステップと、
を備える。
(付記10)
付記3または6記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
グローバル代表ロググループ以外のロググループの管理権を取得したデータベース管理装置は、
前記管理権を取得したロググループのログ記憶装置に準備完了ログだけが記憶されているか判断し、該準備完了ログだけが記憶されていれば、該ロググループを前記インダウト
状態リストに登録するステップと、
前記準備完了ログからグローバル代表ロググループを取得し、該グローバル代表ロググループの管理権を持つデータベース管理装置に対してトランザクション結果の問合せを送信するステップと、
該グローバル代表ロググループの管理権を持つデータベース管理装置から該トランザクション結果の問合せに対する応答を受信し、その応答がコミット指示であれば、前記管理権を取得したロググループについてコミット処理と該ロググループのログ記憶装置へのコミットログの出力を行い、上記応答がロールバック指示であれば、前記管理権を取得したロググループについてロールバック処理と該ロググループのログ記憶装置へのロールバックログの出力を行うステップと、
前記管理権を取得したロググループを前記インダウト状態リストから削除するステップと、
備える。
(付記11)
付記3また6記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
グローバル代表ロググループの管理権を取得したデータベース管理装置は、
該グローバル代表ロググループのログ記憶装置にコミット再送信リストが存在すれば、そのコミット再送信リストをログ記憶装置から読み込み・記憶するステップと、
該グローバル代表ロググループのログ記憶装置にコミット再送信リストが存在せず、かつ、準備完了ログのみが記憶されていれば、該準備完了ログに設定されている識別子を取得して、該識別子の一覧をコミット再送信リストとして記憶するステップと、
インダウト状態リストから削除するステップと、
を備える。
(付記12)
付記1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
各データベース管理装置は、
他のデータベース管理装置がダウンしたこと旨の通知を受信するステップと、
前記第1のテーブルを参照して、該ダウンしたデータベース管理装置が管理していたロググループの識別子を取得するステップと、
該取得したロググループの識別子と該ロググループの管理権を持つデータ記憶装置の優先順位を基に、該ダウンしたデータ記憶装置は管理していたロググループの中から自装置が引き継ぐべきロググループを特定するステップと、
前記ダウンしたデータ記憶装置が管理していたロググループの管理権を引き継いだ場合には、該ロググループを復旧するステップと、
を備える。
(付記13)
付記1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
さらに、
調整者となるデータベース管理装置は、参加者となるデータベース管理装置の識別情報が登録されたリスト(参加者リスト)を備える。
本発明を適用した分散トランザクションシステムの一形態を示す図である。 本発明を適用した分散トランザクションシステムの別の形態を示す図である。 データベース管理装置がダウンした場合のロググループの管理権の移動によるシステム構成の変化を示す図である。 各データベース管理装置の主記憶装置内に記憶されるトランザクション完了ログ出力先の優先順位定義表と、外部記憶装置に記憶されるトランザクション完了ログ出力先の優先順位定義ファイルを示す図である。 分散トランザクションにおける調整者のデータ更新処理を示すフローチャートである。 分散トランザクションにおける参加者のデータ更新処理を示すフローチャートである。 図5及び図6のフローチャートに示す処理による、分散トランザクションシステムにおけるデータ更新処理の一例を示すシステム構成図である。 調整者となるデータベース管理装置がロググループを備えていない場合の分散トランザクションにおける処理を示すシステム構成図である。 本実施形態における2相コミット処理の全体の流れを示すフローチャートである。 調整者で更新が有る場合の調整者の準備処理を示すフローチャートである。 調整者で更新が有る場合の参加者の準備処理を示すフローチャートである。 図4に示す分散トランザクションシステムにおいて、2相コミットのトランザクション準備処理が行われた場合のシステムの構成状態を示す図である。 調整者で更新がある場合の調整者のコミット処理を示すフローチャートである。 調整者で更新が有る場合の参加者のコミット処理を示すフローチャートである。 図12に示すインダウト状態にある分散トランザクションシステムにおいて、図13及び図14のフローチャートに示すコミット処理が行われた場合における、該分散トランザクションシステムの状態の遷移を示すシステム構成図(その1)である。 図12に示すインダウト状態にある分散トランザクションシステムにおいて、上述した図13及び図14のフローチャートに示すコミット処理が行われた場合における、該分散トランザクションシステムの状態の遷移を示すシステム構成図(その2)である。 図12に示すように、参加者がインダウト状態であるときに、調整者が障害によりダウンした場合の参加者の処理を示すフローチャートである。 グローバル代表ロググループ表以外のロググループの管理権を取得したデータベース管理装置(DBMS)のトランザクション解決処理を示すフローチャートである。 グローバル代表ロググループの管理権を取得したデータベース管理装置のトランザクション解決処理を示すフローチャートである。 調整者で更新が有る場合に、調整者がダウンした場合のシステム状況の一例を示す図である。 調整者で更新が無い場合の調整者の準備処理を示すフローチャートである。 調整者で更新が無い場合の代表参加者の準備処理を示すフローチャートである。 図21及び図22のフローチャートの処理が実行された場合の分散トランザクションシステムの状況の一例を示す図である。 調整者で更新が無い場合の調整者のコミット処理を示すフローチャートである。 調整者で更新が無い場合の代表参加者のコミット処理を示すフローチャートである。 調整者で更新が無い分散トランザクションシステムにおいてのコミット処理が行われた場合のシステム状況(その1)を示す図である。 調整者で更新が無い分散トランザクションシステムにおいてのコミット処理が行われた場合のシステム状況(その2)を示す図である。 調整者で更新が無い分散トランザクションにおいて、調整者がダウンした時の一般参加者の処理を示すフローチャートである。 調整者で更新が無い分散トランザクションにおいて、調整者がダウンした時の代表参加者の処理を示すフローチャートである。 調整者で更新が無い場合に、調整者がダウンした場合のシステム状況を示す図である。 クラスタ管理装置がシステム内の、あるデータベース管理装置のダウンを検知した場合の他のデータベース管理装置の動作を示すフローチャートである。 調整者、第1の参加者及び第2の参加者を備える分散トランザクションシステムにおいて、調整者がダウンした場合のシステム復旧処理を説明するシステム構成図である。 グローバル代表ロググループのトランザクション復旧プロセスの処理を示すフローチャートである。 グローバル代表ロググループ以外のロググループのトランザクション復旧プロセスの処理を示すフローチャートである。 インダウト状態復旧プロセスの処理を示すフローチャートである。
符号の説明
1〜5 分散トランザクションシステム
100、100´ データベース管理装置
110、110´、110A ロググループ偏在表
120 トランザクション完了ログ出力先の優先順位定義表
130 更新ロググループリスト
140 ローカル代表ロググループ記憶表
150 参加者リスト
170 インダウト状態リスト
180 コミット再送信リスト
190 代表参加者記憶表
1010 代表参加者フラグ
1020 全一般参加者の全更新ロググループリスト
2010 トランザクション復旧同期タイム時間
2111 インダウト状態復旧プロセス
2112 トランザクション復旧プロセス(グローバル代表ロググループのトランザクション復旧プロセス)
2113 トランザクション復旧プロセス(グローバル代表ロググループ以外のロググループのトランザクション復旧プロセス)
200 ロググループ
201 ログ記憶装置
220 準備完了ログ
230 コミットログ
202 データ記憶装置
300、300´ 管理権の優先順位定義ファイル
310 トランザクション完了ログ出力先の優先順位定義ファイル
320 トランザクション復旧同期タイム時間設定ファイル
501〜503、601、602 更新依頼パケット
551〜553、651、652 更新応答パケット
701、702、1711、1712、2001、2002 コミット依頼パケット
751、752、1751、1752、1761、2051、2052 コミット応答パケット
1601、1602 準備依頼パケット
1651、1652 準備完了応答パケット
1701、1801、1802 トランザクション結果の問合せ依頼パケット
1751、1851、1852 コミット指示の応答パケット
2002 DBMS1ダウン通知

Claims (7)

  1. データを記憶するデータ記憶装置と該データのログを記憶するログ記憶装置のパッケージであるロググループを備え、該ロググループの管理権がシステム内のデータベース管理装置間で移動可能な分散トランザクションシステムの2相コミットプロトコルにおけるインダウト状態の解決方法であって、
    各ロググループに一意の識別子を付与し、各ロググループの管理権を持つデータベース管理装置に関する情報を第1のテーブルに登録するステップと、
    複数のロググループが参加する分散トランザクションの2相コミットにおいて調整者となるデータベース管理装置が管理するロググループの中で代表となるロググループ(グローバル代表ロググループ)のログ記憶装置に出力される準備完了ログ(第1の準備完了ログ)に、該分散トランザクションの参加者となっているデータベース管理装置が管理するロググループの識別子のリスト(参加ロググループリスト)を記憶するステップと、
    前記2相コミットにおいて参加者となるデータベース管理装置が管理するロググループのログ記憶装置に出力する準備完了ログ(第2の準備完了ログ)に、前記グローバル代表ロググループの識別子を記憶するステップと、
    2相コミットのインダウト状態期間中に、前記グローバル代表ロググループの管理権が別のデータベース管理装置に移動した場合に、該グローバル代表ロググループの管理権を該別のデータベース管理装置が持つように、前記第1のテーブルを書き換えるステップと、
    2相コミットのインダウト状態期間中に、前記グローバル代表ロググループ以外のロググループの管理権が別のデータベース管理装置に移動した場合に、該ロググループの管理権を該別のデータベース管理装置が持つように書き換えるステップと、
    インダウト状態となっている参加者は、前記第2の準備完了ログに記憶されているグローバル代表ロググループの識別子と前記第1のテーブルを参照して、該グローバル代表ロググループの管理権を持つデータベース管理装置に、トランザクション結果の問合せを送信するステップと、
    前記調整者は、インダウト状態となっている参加者からトランザクション結果の問合せを受信した場合に、前記第1の準備完了ログに記憶されているロググループの識別子のリストと前記第1のテーブルを参照して、前記参加者に該トランザクション結果を返信するステップと、
    を備えることを特徴とする分散トランザクションの2相コミットにおけるインダウト状態の解決方法。
  2. 請求項1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
    さらに、
    調整者は、
    前記第1の準備完了ログに記憶されている識別子のリストと前記第1のテーブルを基に、該識別子とコミット指示が設定されたコミット依頼通知、または、前記識別子とロールバック指示が設定されたロールバック依頼通知を、該識別子を有するロググループを管理している参加者に送信し、該参加者に該ロググループのコミットまたはロールバックを依頼するステップと、
    前記コミット依頼通知を受信した参加者がコミットに失敗した場合には、該参加者が管理している全ての更新ロググループの識別子のリスト(コミット再送信リスト)を記憶するステップを備え、
    参加者は、調整者から前記コミット依頼通知または前記ロールバック依頼通知を受信した場合には、前記第1のテーブルを参照して、該依頼に対する処理結果の応答を、該調整者に送信するステップを備える。
  3. 求項1記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
    さらに、
    調整者が分散トランザクションにおいて自装置のロググループのデータを更新する場合の2相コミットの準備処理において、
    調整者は、
    参加者に対して、前記グローバル代表ロググループの識別子が設定された準備処理依頼の通知を送信するステップと、
    該準備処理依頼通知を送信した参加者から準備処理成功の応答を受信した場合には、該応答から該参加者が更新したロググループの識別子を取得し、該識別子を該参加者に関連付けて記憶するステップと、
    調整者が管理するグローバル代表ロググループ以外のロググループについてトランザクション準備処理を行い、グローバル代表ロググループの識別子が設定された準備完了ログを、該ロググループのログ記憶装置に出力するステップと、
    を備え、
    参加者は、
    調整者から前記準備依頼の通知を受信すると、前記準備依頼通知から前記グローバル代表ロググループを取り出すステップと、
    自装置が管理するロググループの準備処理を行い、該準備処理に成功したロググループのログ記憶装置には、前記取り出したグローバル代表ロググループの識別子を設定した準備完了ログを、自装置が管理しているロググループのログ記憶装置に出力するステップと、
    該準備完了ログを前記ログ記憶装置に出力する処理に成功した場合には、前記準備処理に成功したロググループの識別子をインダウト状態リストに登録し、調整者に準備成功した全ロググループ識別子を送信するステップを備える。
  4. 請求項3記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
    さらに、
    前記準備処理終了後の2相コミットのコミット処理において、
    調整者は、
    参加者にコミット依頼を送信するステップと、
    該コミット依頼を送信した参加者のコミットが失敗したと判断した場合には、該参加者が管理している全ての更新ロググループの識別子を、前記グローバル代表ロググループのログ記憶装置に出力するステップと、
    自装置が管理するグローバル代表ロググループ以外の更新ロググループのコミット処理を実行するステップと、
    コミットに成功した更新ロググループについては、その更新ロググループのログ記憶装置にコミットログを出力し、コミットに失敗した更新ロググループについては、その更新ロググループの識別子をグローバル代表ロググループのログ記憶装置に出力するステップと、
    グローバル代表ロググループのコミット処理を実行するステップと、
    該グローバル代表ロググループのコミットログを、該グローバル代表ロググループのログ記憶装置に出力するステップを備え、
    参加者は、
    調整者から前記コミット依頼をすると、自装置が管理する全ての更新ロググループについてコミット処理を実行するステップと、
    コミットに成功した更新ロググループについては、その識別子を前記インダウト状態リストから削除し、コミット完了の応答を調整者に送信するステップと、
    コミットに失敗した更新ロググループについては、コミット失敗の応答を調整者に送信するステップを備える。
  5. 請求項3記載の分散トランザクションの2相コミットにおけるインダウト状態の解決方法であって、
    さらに、
    調整者がダウンした場合、
    参加者は、
    前記インダウト状態リストに更新ロググループの識別子が登録されている場合には、グローバル代表ロググループの管理権を持つ参加者に対して、トランザクション結果の問合せ通知を送信するステップと、
    該トランザクション結果の問合せに対する調整者の応答を受信し、該応答がコミット指示であれば、前記インダウト状態リストに登録されている更新ロググループについてコミット処理と該更新ロググループのログ記憶装置へのコミットログの出力を行い、該応答がロールバック指示であれば、前記インダウト状態リストに登録されている更新ロググループについてロールバック処理該更新ロググループのログ記憶装置へのロールバックログの出力を行うステップと、
    を備える。
  6. データを記憶するデータ記憶装置と該データのログを記憶するログ記憶装置の組を複数備え、かつ、複数の前記組を管理する管理装置を複数備えた分散トランザクションシステムのインダウト状態の解決方法であって、
    分散トランザクションにおいて、トランザクションの開始要求を受けた管理装置が管理する組の中に含まれる代表の組のログ記憶装置に出力される第1のログに、該分散トランザクションに関与する管理装置それぞれが管理する組を識別する識別情報を対応付けて記憶し、
    関与する前記管理装置のうち、前記要求を受けた管理装置以外の管理装置が管理する組のログ記憶装置に出力する第2のログに、前記代表の組の識別情報を対応付けて記憶し、
    インダウト状態期間中に、前記代表の組を管理する管理装置が前記要求を受けた管理装置と異なる管理装置に変更された場合、複数の前記組それぞれについて当該組を管理する管理装置に関する情報が登録された第1のテーブルを、前記代表の組の管理を前記異なる管理装置が行なう旨に更新し、
    インダウト状態の前記関与する管理装置は、前記第2のログに記憶されている前記代表の組の識別情報と前記第1のテーブルとに基づいて、前記代表の組を管理する前記異なる管理装置に、トランザクション結果の問合せを送信し、
    前記要求受けた管理装置は、前記第1のログに記憶されている識別情報と前記第1のテーブルとに基づいて、トランザクション結果の問合せを送信したインダウト状態の前記関与する管理装置にトランザクション結果を送信する、
    ことを特徴とする解決方法。
  7. 前記解決方法は、
    インダウト状態期間中に、前記代表の組以外の組を管理する管理装置が変更された場合に、前記第1のテーブルを、当該組を管理していた管理装置と異なる管理装置が行なう旨に更新する、
    ことを特徴とする請求項6記載の解決方法。
JP2008134840A 2008-05-22 2008-05-22 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法 Active JP5223457B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2008134840A JP5223457B2 (ja) 2008-05-22 2008-05-22 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法
US12/389,979 US8185493B2 (en) 2008-05-22 2009-02-20 Solution method of in-doubt state in two-phase commit protocol of distributed transaction
US13/466,558 US8433676B2 (en) 2008-05-22 2012-05-08 Solution method of in-doubt state in two-phase commit protocol of distributed transaction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008134840A JP5223457B2 (ja) 2008-05-22 2008-05-22 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法

Publications (2)

Publication Number Publication Date
JP2009282790A JP2009282790A (ja) 2009-12-03
JP5223457B2 true JP5223457B2 (ja) 2013-06-26

Family

ID=41342855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008134840A Active JP5223457B2 (ja) 2008-05-22 2008-05-22 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法

Country Status (2)

Country Link
US (2) US8185493B2 (ja)
JP (1) JP5223457B2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8266126B2 (en) * 2010-03-24 2012-09-11 Matrixx Software, Inc. System with multiple conditional commit databases
US9665392B2 (en) 2012-03-16 2017-05-30 Oracle International Corporation System and method for supporting intra-node communication based on a shared memory queue
US9760584B2 (en) 2012-03-16 2017-09-12 Oracle International Corporation Systems and methods for supporting inline delegation of middle-tier transaction logs to database
US9146944B2 (en) * 2012-03-16 2015-09-29 Oracle International Corporation Systems and methods for supporting transaction recovery based on a strict ordering of two-phase commit calls
EP2926252B1 (en) * 2012-11-28 2020-02-26 Telefonaktiebolaget LM Ericsson (publ) Method and apparatus for managing distributed transactions
US9384229B2 (en) 2012-11-29 2016-07-05 International Business Machines Corporation Data readiness using initiator region last commit selection
US9473545B2 (en) * 2013-09-13 2016-10-18 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Administering group identifiers of processes in a parallel computer
US10203981B2 (en) * 2014-02-28 2019-02-12 Red Hat, Inc. Systems and methods for prepare list communication to participants in two-phase commit protocol transaction processing
CN105893395B (zh) * 2015-01-26 2019-04-02 阿里巴巴集团控股有限公司 分布式事务的消息回查方法及其系统
US10289444B2 (en) 2015-10-05 2019-05-14 International Business Machines Corporation Client controlled transaction processing involving a plurality of participants
US10795881B2 (en) * 2015-12-18 2020-10-06 Sap Se Table replication in a database environment
US10235440B2 (en) * 2015-12-21 2019-03-19 Sap Se Decentralized transaction commit protocol
US10572510B2 (en) 2015-12-21 2020-02-25 Sap Se Distributed database transaction protocol
CN106302995A (zh) * 2016-07-29 2017-01-04 维沃移动通信有限公司 一种注册信息的获取方法及移动终端
CN107182041A (zh) * 2017-05-09 2017-09-19 王恩惠 通过短信管理手机号绑定与注册过网站或应用方法及装置
US10977227B2 (en) 2017-06-06 2021-04-13 Sap Se Dynamic snapshot isolation protocol selection
US11112970B2 (en) * 2017-06-12 2021-09-07 Sap Se Software system logging based on runtime analysis
US10666495B2 (en) * 2017-08-22 2020-05-26 International Business Machines Corporation Transaction processing
RU2718215C2 (ru) 2018-09-14 2020-03-31 Общество С Ограниченной Ответственностью "Яндекс" Система обработки данных и способ обнаружения затора в системе обработки данных
RU2714219C1 (ru) 2018-09-14 2020-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования передачи операций ввода/вывода
RU2731321C2 (ru) 2018-09-14 2020-09-01 Общество С Ограниченной Ответственностью "Яндекс" Способ определения потенциальной неисправности запоминающего устройства
RU2714602C1 (ru) 2018-10-09 2020-02-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки данных
RU2721235C2 (ru) 2018-10-09 2020-05-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для маршрутизации и выполнения транзакций
RU2711348C1 (ru) 2018-10-15 2020-01-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки запросов в распределенной базе данных
US11874816B2 (en) * 2018-10-23 2024-01-16 Microsoft Technology Licensing, Llc Lock free distributed transaction coordinator for in-memory database participants
RU2714373C1 (ru) 2018-12-13 2020-02-14 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования выполнения операций ввода/вывода
RU2749649C2 (ru) 2018-12-21 2021-06-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования обработки операций ввода/вывода
RU2720951C1 (ru) 2018-12-29 2020-05-15 Общество С Ограниченной Ответственностью "Яндекс" Способ и распределенная компьютерная система для обработки данных
US11314623B2 (en) * 2019-01-23 2022-04-26 Red Hat, Inc. Software tracing in a multitenant environment
RU2746042C1 (ru) 2019-02-06 2021-04-06 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для передачи сообщения
CN111858629B (zh) 2020-07-02 2023-08-22 北京奥星贝斯科技有限公司 二阶段提交分布式事务更新数据库的实现方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS638845A (ja) 1986-06-28 1988-01-14 Fujitsu Ltd 更新処理方式
US5333303A (en) * 1991-03-28 1994-07-26 International Business Machines Corporation Method for providing data availability in a transaction-oriented system during restart after a failure
JP3594248B2 (ja) 1993-03-30 2004-11-24 富士通株式会社 ログデータの分類取得システム
JP3094888B2 (ja) * 1996-01-26 2000-10-03 三菱電機株式会社 採番機構、データ整合性確認機構、トランザクション再実行機構及び分散トランザクション処理システム
US7076508B2 (en) * 2002-08-12 2006-07-11 International Business Machines Corporation Method, system, and program for merging log entries from multiple recovery log files

Also Published As

Publication number Publication date
US8185493B2 (en) 2012-05-22
JP2009282790A (ja) 2009-12-03
US20090292744A1 (en) 2009-11-26
US8433676B2 (en) 2013-04-30
US20120221537A1 (en) 2012-08-30

Similar Documents

Publication Publication Date Title
JP5223457B2 (ja) 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法
JP6564026B2 (ja) マルチテナントアプリケーションサーバ環境におけるトランザクション回復のためのシステムおよび方法
JP5841177B2 (ja) マルチサーバ予約システムにおける同期化メカニズムのための方法及びシステム
US6934247B2 (en) Recovery following process or system failure
US10942823B2 (en) Transaction processing system, recovery subsystem and method for operating a recovery subsystem
US8055735B2 (en) Method and system for forming a cluster of networked nodes
JP6220851B2 (ja) 2フェーズコミットコールの厳密な順序付けに基づいたトランザクションリカバリをサポートするためのシステムおよび方法
US20170177617A1 (en) Three phase commit for a distributed file system
CN103297268A (zh) 基于p2p技术的分布式数据一致性维护系统和方法
CN108958984B (zh) 基于ceph的双活同步在线热备方法
US20190258646A1 (en) Distributed transactions across multiple consensus groups
US9760529B1 (en) Distributed state manager bootstrapping
CN111538763A (zh) 一种确定集群中主节点的方法、电子设备和存储介质
CN107919977A (zh) 一种基于Paxos协议的分布式一致性系统的在线扩容、在线缩容的方法和装置
WO2022037268A1 (zh) 一种容器管理方法、设备以及介质
CN110825763B (zh) 基于共享存储的MySQL数据库高可用系统及其高可用方法
CN109144748B (zh) 一种服务器、分布式服务器集群及其状态驱动方法
JP2006012004A (ja) ホットスタンバイシステム
JP3846852B2 (ja) 分散コンピューティング環境の処理グループを管理する方法、システム、およびプログラム製品
JP5900094B2 (ja) データ整合システム、データ整合方法およびデータ整合プログラム
JP2005502957A (ja) 厳密に一回のキャッシュフレームワーク
JP5480046B2 (ja) 分散トランザクション処理システム、装置、方法およびプログラム
CN114363350B (zh) 一种服务治理系统及方法
US20220138177A1 (en) Fault tolerance for transaction mirroring
JP2011002970A (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130115

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130225

R150 Certificate of patent or registration of utility model

Ref document number: 5223457

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160322

Year of fee payment: 3