JPH08286964A - 分散トランザクション処理方法 - Google Patents
分散トランザクション処理方法Info
- Publication number
- JPH08286964A JPH08286964A JP7087982A JP8798295A JPH08286964A JP H08286964 A JPH08286964 A JP H08286964A JP 7087982 A JP7087982 A JP 7087982A JP 8798295 A JP8798295 A JP 8798295A JP H08286964 A JPH08286964 A JP H08286964A
- Authority
- JP
- Japan
- Prior art keywords
- log
- transaction
- processing
- data storage
- data
- 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.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
(57)【要約】
【目的】 2フェーズコミット処理のフェーズ2でのデ
ータ実更新時にエラーが発生した場合の、各データ管理
システム間のデータの不整合を防止する。 【構成】 フェーズ2の各RMのデータ実更新のあと、
すぐには各RMのログバッファ、ロック管理テーブルを
解放せず、一旦TMにおいて各RMの各データ実更新の
成否を確認する(S41)。もし、1つでも実更新に失
敗してロールバックしたRMがあれば、TMが、実更新
に成功したRMに対してロールバックを要求する(S5
7)。ロールバック要求を受けた各RMは、保持してい
たログバッファ及びロック管理テーブルを用いてロール
バック処理を行う。この結果、データ実更新時に一部の
RMでエラーが発生した場合でも、分散システムのデー
タの一貫性を保つことができる。
ータ実更新時にエラーが発生した場合の、各データ管理
システム間のデータの不整合を防止する。 【構成】 フェーズ2の各RMのデータ実更新のあと、
すぐには各RMのログバッファ、ロック管理テーブルを
解放せず、一旦TMにおいて各RMの各データ実更新の
成否を確認する(S41)。もし、1つでも実更新に失
敗してロールバックしたRMがあれば、TMが、実更新
に成功したRMに対してロールバックを要求する(S5
7)。ロールバック要求を受けた各RMは、保持してい
たログバッファ及びロック管理テーブルを用いてロール
バック処理を行う。この結果、データ実更新時に一部の
RMでエラーが発生した場合でも、分散システムのデー
タの一貫性を保つことができる。
Description
【0001】
【産業上の利用分野】この発明は、分散トランザクショ
ン処理方法に関するものである。
ン処理方法に関するものである。
【0002】
【従来の技術】ネットワーク等に分散する複数のデータ
ベース等のリソースを、1つのトランザクションにおい
て同時に更新する場合に、1つでも更新できないリソー
スがあると、更新に成功したリソースと失敗したリソー
スとでデータに矛盾が生じ、分散システム全体としての
データの一貫性(整合性)が保たれなくなる。このよう
なリソース間のデータの矛盾を防止するためには、すべ
てのリソースの更新が成功した場合に限って分散システ
ム全体の更新を確定し、1つでも更新に失敗したリソー
スがあった場合には、更新されたリソースも含め分散シ
ステム全体を更新前の状態に戻す(ロールバックす
る)、という制御が必要になる。
ベース等のリソースを、1つのトランザクションにおい
て同時に更新する場合に、1つでも更新できないリソー
スがあると、更新に成功したリソースと失敗したリソー
スとでデータに矛盾が生じ、分散システム全体としての
データの一貫性(整合性)が保たれなくなる。このよう
なリソース間のデータの矛盾を防止するためには、すべ
てのリソースの更新が成功した場合に限って分散システ
ム全体の更新を確定し、1つでも更新に失敗したリソー
スがあった場合には、更新されたリソースも含め分散シ
ステム全体を更新前の状態に戻す(ロールバックす
る)、という制御が必要になる。
【0003】このような複数リソースの同期更新を矛盾
なく行うための分散トランザクション処理方法として、
2フェーズコミット処理がある。
なく行うための分散トランザクション処理方法として、
2フェーズコミット処理がある。
【0004】2フェーズコミット処理は、2つの段階
(フェーズ)からなっている。すなわち、第1段階(フ
ェーズ1)では、まずアプリケーションプログラム等か
らコミット要求があった際に、トランザクションの処理
を管理するトランザクション・マネージャ(以下、「T
M」と略す)が、各リソースを管理するリソース・マネ
ージャ(以下、「RM」と略す)に対して、コミットが
できるか否か(すなわち、リソースの実更新が保証され
ているか)を確認する要求を行う。なお、コミット(com
mitment)とは、トランザクションが行った共有リソース
の更新を確定する処理をいう。そして、この要求に応じ
て、各RMが、コミット準備がOKか否か(すなわち、
コミットができるか否か)の通知をTMに対して行う。
(フェーズ)からなっている。すなわち、第1段階(フ
ェーズ1)では、まずアプリケーションプログラム等か
らコミット要求があった際に、トランザクションの処理
を管理するトランザクション・マネージャ(以下、「T
M」と略す)が、各リソースを管理するリソース・マネ
ージャ(以下、「RM」と略す)に対して、コミットが
できるか否か(すなわち、リソースの実更新が保証され
ているか)を確認する要求を行う。なお、コミット(com
mitment)とは、トランザクションが行った共有リソース
の更新を確定する処理をいう。そして、この要求に応じ
て、各RMが、コミット準備がOKか否か(すなわち、
コミットができるか否か)の通知をTMに対して行う。
【0005】次に、第2段階(フェーズ2)では、フェ
ーズ1の各RMからの通知において、すべてのRMのコ
ミット準備ができているならば、TMは、各RMに対し
てコミット処理(更新の確定)を要求する。一方、1つ
でもコミット準備のできていないRMがあるならば、T
Mは、各RMに対し、更新前の状態に戻すロールバック
処理を要求する。なお、各RMに対する各フェーズの処
理要求は、一般的にTMにより管理されている。
ーズ1の各RMからの通知において、すべてのRMのコ
ミット準備ができているならば、TMは、各RMに対し
てコミット処理(更新の確定)を要求する。一方、1つ
でもコミット準備のできていないRMがあるならば、T
Mは、各RMに対し、更新前の状態に戻すロールバック
処理を要求する。なお、各RMに対する各フェーズの処
理要求は、一般的にTMにより管理されている。
【0006】また、2フェーズコミット処理によれば、
システムダウン等の障害時においても、TM及び各RM
により採取されるログ情報により、整合性のとれた状態
に回復することができる。
システムダウン等の障害時においても、TM及び各RM
により採取されるログ情報により、整合性のとれた状態
に回復することができる。
【0007】以下、このような2フェーズコミット処理
を用いた従来の分散トランザクション処理方法として、
X/Open Companyが出版している "X/Open CAE Specifica
tionDistributed Transaction Processing:The XA Spec
ification" 及び "X/OpenGuide Distributed Transacti
on Processing Reference Model" に基づく処理方法
を、図面を参照して説明する。
を用いた従来の分散トランザクション処理方法として、
X/Open Companyが出版している "X/Open CAE Specifica
tionDistributed Transaction Processing:The XA Spec
ification" 及び "X/OpenGuide Distributed Transacti
on Processing Reference Model" に基づく処理方法
を、図面を参照して説明する。
【0008】図1は、例えば分散データベースシステム
等、2フェーズコミット処理を行う対象となるシステム
の構成の一例を示す図である。ここでは、説明を簡略化
するため、2つのRMからなるシステムを例として取り
上げている。
等、2フェーズコミット処理を行う対象となるシステム
の構成の一例を示す図である。ここでは、説明を簡略化
するため、2つのRMからなるシステムを例として取り
上げている。
【0009】図1において、RM1及び2には、それぞ
れRMの処理に関するログ情報を一時的に保持するログ
バッファ3及び4と、RMで処理する実データを一時的
に保持するデータバッファ5及び6とが接続されてい
る。ログバッファ3及び4は、ディスク上のログ領域9
及び10にそれぞれ接続されており、それらログバッフ
ァ上のログ情報は、最終的にはログ領域9及び10にそ
れぞれ格納される。また、データバッファ5及び6は、
ディスク上のデータ領域11及び12に接続されてい
る。さらに、RM1及びRM2は、データの整合性が失
われないようにするための排他制御の管理情報を格納す
るロック管理テーブル7及び8にそれぞれ接続されてい
る。
れRMの処理に関するログ情報を一時的に保持するログ
バッファ3及び4と、RMで処理する実データを一時的
に保持するデータバッファ5及び6とが接続されてい
る。ログバッファ3及び4は、ディスク上のログ領域9
及び10にそれぞれ接続されており、それらログバッフ
ァ上のログ情報は、最終的にはログ領域9及び10にそ
れぞれ格納される。また、データバッファ5及び6は、
ディスク上のデータ領域11及び12に接続されてい
る。さらに、RM1及びRM2は、データの整合性が失
われないようにするための排他制御の管理情報を格納す
るロック管理テーブル7及び8にそれぞれ接続されてい
る。
【0010】各RM1及びRM2のコミット処理の制御
を行うTM13は、TMログバッファ14を介してディ
スク上のTMログ領域15に接続されている。これらT
Mログバッファ14及びTMログ領域15には、システ
ムダウン等の障害時に各RM間のデータに矛盾がないよ
うにするために、TM13の処理に関するログ情報が保
持・格納される。
を行うTM13は、TMログバッファ14を介してディ
スク上のTMログ領域15に接続されている。これらT
Mログバッファ14及びTMログ領域15には、システ
ムダウン等の障害時に各RM間のデータに矛盾がないよ
うにするために、TM13の処理に関するログ情報が保
持・格納される。
【0011】この分散システムにおいて、アプリケーシ
ョンプログラム16は、TM13に対してトランザクシ
ョンの制御を依頼すると共に、各RM1及び2を介して
実際のデータアクセスを行う。
ョンプログラム16は、TM13に対してトランザクシ
ョンの制御を依頼すると共に、各RM1及び2を介して
実際のデータアクセスを行う。
【0012】次に、このシステムにおいて、2フェーズ
コミット処理による従来の分散トランザクション処理方
法を採用した場合の処理の流れについて、図面を参照し
て説明する。
コミット処理による従来の分散トランザクション処理方
法を採用した場合の処理の流れについて、図面を参照し
て説明する。
【0013】図11、図12及び図13は、この従来方
法による正常時(すなわち、障害が発生せずに正常にコ
ミット処理が行われる場合)の各処理段階における各バ
ッファ及びディスク領域内のデータの変化の様子を示す
説明図である。ここで、図11、図12及び図13は、
それぞれRM1、RM2及びTMについての図である。
なお、図11、図12及び図13は、RM1によってレ
コードx1のデータをx11からx12に更新する処理
と、RM2によってレコードx2のデータをx21から
x22に更新する処理とを同一のトランザクションで行
う場合の例を示している。
法による正常時(すなわち、障害が発生せずに正常にコ
ミット処理が行われる場合)の各処理段階における各バ
ッファ及びディスク領域内のデータの変化の様子を示す
説明図である。ここで、図11、図12及び図13は、
それぞれRM1、RM2及びTMについての図である。
なお、図11、図12及び図13は、RM1によってレ
コードx1のデータをx11からx12に更新する処理
と、RM2によってレコードx2のデータをx21から
x22に更新する処理とを同一のトランザクションで行
う場合の例を示している。
【0014】図11及び図12において、RM1及び2
のログバッファ3及び4に格納されるログ情報は、トラ
ンザクションのIDコード100(以下、TIDと略
す)、このトランザクションにおける操作履歴情報10
2、及びコミット処理状態を示すステータス104から
構成される。この例では、TIDを「α」とする。ま
た、RM1及びRM2のデータバッファ5及び6に格納
されるデータ情報は、レコード番号(リソース名)12
0とそれに対応するデータ領域122から構成される。
また、RM1及び2のロック管理テーブル7及び8に格
納されるデータは、排他制御を行う対象のリソース名1
30とそのリソースを用いる使用者(トランザクショ
ン)132のIDから構成される。
のログバッファ3及び4に格納されるログ情報は、トラ
ンザクションのIDコード100(以下、TIDと略
す)、このトランザクションにおける操作履歴情報10
2、及びコミット処理状態を示すステータス104から
構成される。この例では、TIDを「α」とする。ま
た、RM1及びRM2のデータバッファ5及び6に格納
されるデータ情報は、レコード番号(リソース名)12
0とそれに対応するデータ領域122から構成される。
また、RM1及び2のロック管理テーブル7及び8に格
納されるデータは、排他制御を行う対象のリソース名1
30とそのリソースを用いる使用者(トランザクショ
ン)132のIDから構成される。
【0015】また、図13において、TM13のログバ
ッファ14に格納されるログ情報は、トランザクション
のID(TID)160、このトランザクションに関連
のあるRM名162、及びコミット処理の状態を示すス
テータス164から構成される。
ッファ14に格納されるログ情報は、トランザクション
のID(TID)160、このトランザクションに関連
のあるRM名162、及びコミット処理の状態を示すス
テータス164から構成される。
【0016】図8は、この図11、図12及び図13に
対応した処理の流れを示すフローチャートである。以
下、このフローチャートと図11、図12及び図13を
参照して正常時のトランザクション処理の流れを説明す
る。なお、図8においては、アプリケーションプログラ
ム(「APP」と略す)16、TM13、RM1及びR
M2の各要素ごとに、それぞれ処理の流れが示されてい
る。
対応した処理の流れを示すフローチャートである。以
下、このフローチャートと図11、図12及び図13を
参照して正常時のトランザクション処理の流れを説明す
る。なお、図8においては、アプリケーションプログラ
ム(「APP」と略す)16、TM13、RM1及びR
M2の各要素ごとに、それぞれ処理の流れが示されてい
る。
【0017】図8のトランザクション処理において、ア
プリケーション(APP)からコミットの要求があると
(S20)、TMは、フェーズ1の処理として、各RM
に対して、コミット処理ができるか否かを確認する要求
を出す(S21)。このとき、ログバッファ3及び4に
は、図11及び図12に示すように、ビフォアイメージ
データ(更新前のデータ)106a,106bと、この
トランザクションにおける各RMに対する操作(アクセ
ス)の履歴108a,108bが格納されている。ま
た、更新対象のレコードに対しては、排他制御のためロ
ック134a,134bがかけられている。すなわち、
1つのトランザクションが開始されると、APPは、R
M1及びRM2にアクセスし、各更新対象リソースにつ
いての更新処理命令を伝達する。これを受けてRM1及
びRM2は、排他制御のためにロック管理テーブルによ
ってリソースの確保を行うとともに、更新対象リソース
の更新前のデータを取り込んでビフォアイメージデータ
としてログバッファに格納し、更にその更新処理命令を
操作履歴としてログバッファに格納する。従って、この
時点では、ロック管理テーブルにはロック情報が、また
ログバッファには前記ビフォアイメージデータ及び操作
履歴が、それぞれ格納されている。
プリケーション(APP)からコミットの要求があると
(S20)、TMは、フェーズ1の処理として、各RM
に対して、コミット処理ができるか否かを確認する要求
を出す(S21)。このとき、ログバッファ3及び4に
は、図11及び図12に示すように、ビフォアイメージ
データ(更新前のデータ)106a,106bと、この
トランザクションにおける各RMに対する操作(アクセ
ス)の履歴108a,108bが格納されている。ま
た、更新対象のレコードに対しては、排他制御のためロ
ック134a,134bがかけられている。すなわち、
1つのトランザクションが開始されると、APPは、R
M1及びRM2にアクセスし、各更新対象リソースにつ
いての更新処理命令を伝達する。これを受けてRM1及
びRM2は、排他制御のためにロック管理テーブルによ
ってリソースの確保を行うとともに、更新対象リソース
の更新前のデータを取り込んでビフォアイメージデータ
としてログバッファに格納し、更にその更新処理命令を
操作履歴としてログバッファに格納する。従って、この
時点では、ロック管理テーブルにはロック情報が、また
ログバッファには前記ビフォアイメージデータ及び操作
履歴が、それぞれ格納されている。
【0018】さて、TMからコミット可否確認の要求を
受けとった各RMは、コミット処理が行えるかどうか確
認を行う(S22,S25)。すなわち、コミットに必
要なログ等の情報を記録してコミットの準備を行い、こ
のコミット準備が成功したか失敗したかを確認する。こ
のケース(正常時)ではRM1、RM2共にコミット可
能なので、ログバッファ3及び4上にコミット準備がO
Kである旨を示したログ110a,110bを作成し、
このログをディスクのログ領域9及び10のジャーナル
に書き込む(S23,S26)。なお、ログ110a,
110bにおいてはステータス「P」がコミット可能の
状態を示している。
受けとった各RMは、コミット処理が行えるかどうか確
認を行う(S22,S25)。すなわち、コミットに必
要なログ等の情報を記録してコミットの準備を行い、こ
のコミット準備が成功したか失敗したかを確認する。こ
のケース(正常時)ではRM1、RM2共にコミット可
能なので、ログバッファ3及び4上にコミット準備がO
Kである旨を示したログ110a,110bを作成し、
このログをディスクのログ領域9及び10のジャーナル
に書き込む(S23,S26)。なお、ログ110a,
110bにおいてはステータス「P」がコミット可能の
状態を示している。
【0019】次に、各RMは、コミット準備がOKであ
ることをTMに対して通知する(S24,S27)。そ
の結果を受けてTMでは、すべてのRMが準備OKかの
チェックを行う(S28)。このケースでは、すべての
RMがOKなので、TMはその旨を記録したログをTM
ログバッファ14上に作成し、さらにTMログ領域15
に格納する(S29)。すなわち、図13に示すよう
に、TMは、TMログバッファ上にログデータ166を
作成し、これをさらにTMログ領域に書き込む。このケ
ースでは、すべてのRMがコミット準備OKなので、ロ
グデータ166には、その旨を示すステータス「P」が
含まれる。
ることをTMに対して通知する(S24,S27)。そ
の結果を受けてTMでは、すべてのRMが準備OKかの
チェックを行う(S28)。このケースでは、すべての
RMがOKなので、TMはその旨を記録したログをTM
ログバッファ14上に作成し、さらにTMログ領域15
に格納する(S29)。すなわち、図13に示すよう
に、TMは、TMログバッファ上にログデータ166を
作成し、これをさらにTMログ領域に書き込む。このケ
ースでは、すべてのRMがコミット準備OKなので、ロ
グデータ166には、その旨を示すステータス「P」が
含まれる。
【0020】以上のごとくフェーズ1の処理が正常に終
了すると、次にTMは、フェーズ2として、実際のコミ
ット処理の要求を各RMに対して行う(S30)。各R
Mは、その要求を受けとるとログ情報の更新(UPDA
TE)を行う(S31,S36)。すなわち、各RM1
及び2は、図11及び図12に示すように、ログバッフ
ァ3及び4に、コミット処理の確定を示すログ112
a,112bを作成する。ログ112a,112bにお
いては、ステータス「C」がコミット処理の確定状態を
示している。なお、このログ112a,112bは、デ
ィスクのログ領域9及び10のジャーナルに書き込まれ
る。
了すると、次にTMは、フェーズ2として、実際のコミ
ット処理の要求を各RMに対して行う(S30)。各R
Mは、その要求を受けとるとログ情報の更新(UPDA
TE)を行う(S31,S36)。すなわち、各RM1
及び2は、図11及び図12に示すように、ログバッフ
ァ3及び4に、コミット処理の確定を示すログ112
a,112bを作成する。ログ112a,112bにお
いては、ステータス「C」がコミット処理の確定状態を
示している。なお、このログ112a,112bは、デ
ィスクのログ領域9及び10のジャーナルに書き込まれ
る。
【0021】ログ情報の更新が終わると、各RMは、デ
ータ部の更新処理を行い、ディスクのデータ領域に対し
てその結果を反映させる(S32,S37)。すなわ
ち、各RMは、図11及び図12に示すように、更新対
象リソースのレコード番号及び更新処理内容からなる更
新処理データ124a,124bをデータバッファ5及
び6に書き込むと共に、ディスクのデータ領域の更新対
象リソースのデータを新しい値150a,150bに書
き換える。
ータ部の更新処理を行い、ディスクのデータ領域に対し
てその結果を反映させる(S32,S37)。すなわ
ち、各RMは、図11及び図12に示すように、更新対
象リソースのレコード番号及び更新処理内容からなる更
新処理データ124a,124bをデータバッファ5及
び6に書き込むと共に、ディスクのデータ領域の更新対
象リソースのデータを新しい値150a,150bに書
き換える。
【0022】そして、その処理が終了した後、各RM
は、対応するTID(α)のトランザクションに対する
ログバッファの解放処理(S33,S38)とロックの
解放処理(S34,S39)を行う。すなわち、ログバ
ッファは、そのトランザクション(α)に関する情報を
なくしてもよい状態となり、また各ロック管理テーブル
は、更新対象リソースについての使用者がない状態(図
11の136a,図12の136b)となる。
は、対応するTID(α)のトランザクションに対する
ログバッファの解放処理(S33,S38)とロックの
解放処理(S34,S39)を行う。すなわち、ログバ
ッファは、そのトランザクション(α)に関する情報を
なくしてもよい状態となり、また各ロック管理テーブル
は、更新対象リソースについての使用者がない状態(図
11の136a,図12の136b)となる。
【0023】以上の処理が無事に終了すると、各RM
は、処理結果(このケースでは、正常に処理したことを
示す値(OK))をTMに通知する(S35,S4
0)。
は、処理結果(このケースでは、正常に処理したことを
示す値(OK))をTMに通知する(S35,S4
0)。
【0024】各RMのフェーズ2の処理結果を受けとっ
たTMは、すべてのRMの処理結果がOKか確認するが
(S41)、このケース(正常時)ではすべてOKなの
で、その旨を記録したログをTMログバッファ14上に
作成し、さらにTMログ領域15に格納する(S4
2)。すなわち、図13に示すように、TMは、TMロ
グバッファの内容をクリアし(この結果、TMログバッ
ファの内容はログデータ168となる)、さらにこれを
TMログ領域に書き込む。この後、TMは、正常終了を
示す値をアプリケーション(APP)に返す(S4
3)。これによってアプリケーションによるRM1及び
2のコミット処理が正常終了する。この時、図11及び
図12における最終的なログ領域及びデータ領域のイメ
ージは、それぞれログ140a,140b,及びデータ
150a,150bに示すようになっている。
たTMは、すべてのRMの処理結果がOKか確認するが
(S41)、このケース(正常時)ではすべてOKなの
で、その旨を記録したログをTMログバッファ14上に
作成し、さらにTMログ領域15に格納する(S4
2)。すなわち、図13に示すように、TMは、TMロ
グバッファの内容をクリアし(この結果、TMログバッ
ファの内容はログデータ168となる)、さらにこれを
TMログ領域に書き込む。この後、TMは、正常終了を
示す値をアプリケーション(APP)に返す(S4
3)。これによってアプリケーションによるRM1及び
2のコミット処理が正常終了する。この時、図11及び
図12における最終的なログ領域及びデータ領域のイメ
ージは、それぞれログ140a,140b,及びデータ
150a,150bに示すようになっている。
【0025】また、以上説明したケースにおいて、シス
テムダウンが起こった場合には、以下のようにして回復
処理が行われる。
テムダウンが起こった場合には、以下のようにして回復
処理が行われる。
【0026】すなわち、フェーズ1においてTMのログ
書込処理(S29)が行われる前にシステムダウンが起
こった場合には、TMのログにはそのトランザクション
に関する情報がない一方、各RMにはコミット準備OK
の状態を示すログが残っている。従って、システム回復
時には、各RMは、TMに対してそのトランザクション
に関して問い合わせを行い、TMからそのトランザクシ
ョンに関して確定したログがないとの情報を受ける。す
ると、各RMは、そのトランザクションの確定処理を行
わず、ロールバック処理を行って回復する。従って、こ
の場合、両方のRMがロールバックして更新前の状態に
戻るので、データの矛盾は発生しない。
書込処理(S29)が行われる前にシステムダウンが起
こった場合には、TMのログにはそのトランザクション
に関する情報がない一方、各RMにはコミット準備OK
の状態を示すログが残っている。従って、システム回復
時には、各RMは、TMに対してそのトランザクション
に関して問い合わせを行い、TMからそのトランザクシ
ョンに関して確定したログがないとの情報を受ける。す
ると、各RMは、そのトランザクションの確定処理を行
わず、ロールバック処理を行って回復する。従って、こ
の場合、両方のRMがロールバックして更新前の状態に
戻るので、データの矛盾は発生しない。
【0027】また、TMのログ書込処理(S29)の
後、RM1及びRM2のログ情報の更新(S31,S3
6)の前にシステムダウンした場合は、TMのログには
そのトランザクションに関するログ(図13のログ16
6)が存在しており、各RMにはコミット準備OKの状
態を示すログが残っている。従って、システム回復時に
は、各RMは、TMに対してそのトランザクションに関
して問い合わせを行い、TMからログ情報が存在する旨
の情報を受ける。すると、各RMは、そのトランザクシ
ョンに関して確定処理(フェーズ2)を行って回復す
る。従ってこの場合は、両方のRMが確定処理により更
新されるので、データの矛盾は発生しない。
後、RM1及びRM2のログ情報の更新(S31,S3
6)の前にシステムダウンした場合は、TMのログには
そのトランザクションに関するログ(図13のログ16
6)が存在しており、各RMにはコミット準備OKの状
態を示すログが残っている。従って、システム回復時に
は、各RMは、TMに対してそのトランザクションに関
して問い合わせを行い、TMからログ情報が存在する旨
の情報を受ける。すると、各RMは、そのトランザクシ
ョンに関して確定処理(フェーズ2)を行って回復す
る。従ってこの場合は、両方のRMが確定処理により更
新されるので、データの矛盾は発生しない。
【0028】また、RMの一方がコミット処理確定済み
を示すログ(図11又は図12のログ112a又は11
2b)を有し、他方がコミット準備OKのログ(図11
又は図12のログ110a又は110b)を有する場合
には、システム回復時に、前者のRMについてはそのま
ま確定処理が行われ、後者のRMについては、TMに問
い合わせればTMにはトランザクションに関するログが
存在するので、これもまた確定処理が行われる。従っ
て、この場合も、両方のコミット処理が確定されるの
で、各RM間にデータの矛盾が発生しない。
を示すログ(図11又は図12のログ112a又は11
2b)を有し、他方がコミット準備OKのログ(図11
又は図12のログ110a又は110b)を有する場合
には、システム回復時に、前者のRMについてはそのま
ま確定処理が行われ、後者のRMについては、TMに問
い合わせればTMにはトランザクションに関するログが
存在するので、これもまた確定処理が行われる。従っ
て、この場合も、両方のコミット処理が確定されるの
で、各RM間にデータの矛盾が発生しない。
【0029】このように、このトランザクション処理方
法によれば、システムダウン等の障害からの回復時に
も、各RMのデータの一貫性を維持できる。
法によれば、システムダウン等の障害からの回復時に
も、各RMのデータの一貫性を維持できる。
【0030】次にフェーズ1処理時にエラーが発生した
際の処理の流れについて図9のフローチャートと図14
のデータの流れ図とを用いて説明する。この例では、R
M1は正常で、RM2でエラーが発生したものとする。
その他前提条件等は、前述の正常時の場合と同様であ
る。
際の処理の流れについて図9のフローチャートと図14
のデータの流れ図とを用いて説明する。この例では、R
M1は正常で、RM2でエラーが発生したものとする。
その他前提条件等は、前述の正常時の場合と同様であ
る。
【0031】図9のトランザクション処理において、ア
プリケーション(APP)からのコミット処理の要求が
あると(S20)、TMは、フェーズ1として、各RM
に対して、コミット準備の状態を確認する要求を行う
(S21)。すると、RM1については、図2と同様の
処理が行われる(S22,23,24)。従って、RM
1については、前述の正常時と同様、図14に示すよう
に、ログバッファにコミット準備がOKである旨を示し
たログ110aが作成される。一方、RM2は、何らか
のエラーによりコミット処理が行えない(コミット処理
NG)ため(S44)、そのトランザクションに対して
のロールバック処理を行い(S45)、コミット準備が
できない旨(NG)をTMに対して通知する(S4
6)。
プリケーション(APP)からのコミット処理の要求が
あると(S20)、TMは、フェーズ1として、各RM
に対して、コミット準備の状態を確認する要求を行う
(S21)。すると、RM1については、図2と同様の
処理が行われる(S22,23,24)。従って、RM
1については、前述の正常時と同様、図14に示すよう
に、ログバッファにコミット準備がOKである旨を示し
たログ110aが作成される。一方、RM2は、何らか
のエラーによりコミット処理が行えない(コミット処理
NG)ため(S44)、そのトランザクションに対して
のロールバック処理を行い(S45)、コミット準備が
できない旨(NG)をTMに対して通知する(S4
6)。
【0032】その結果を受けてTMは、すべてのRMが
準備OKかチェックを行う(S28)。このケースでは
RM2がNGなので、TMは、フェーズ2としてロール
バック要求をRM1に対して行う(S47)。RM1
は、その要求を受けとると、まずログ情報の更新を行う
(S48)。すなわち、図14に示すように、RM1
は、対応するログバッファ上に、コミット処理のキャン
セルを示すログ114aを作成し、このログをディスク
のログ領域に書込む。その後、RM1は、そのトランザ
クションのロールバック処理を行い(S49)、その旨
をTMに通知する。その通知を受けてTMは、APPに
対してエラーリターンを行う(S50)。このように、
フェーズ1において、RMの一つにエラーが起こった場
合は、すべてのRMについてロールバック処理が行わ
れ、データの整合性が保たれる。なお、このときRM1
のログ領域には、図14に示すログ142aが記録され
ている。
準備OKかチェックを行う(S28)。このケースでは
RM2がNGなので、TMは、フェーズ2としてロール
バック要求をRM1に対して行う(S47)。RM1
は、その要求を受けとると、まずログ情報の更新を行う
(S48)。すなわち、図14に示すように、RM1
は、対応するログバッファ上に、コミット処理のキャン
セルを示すログ114aを作成し、このログをディスク
のログ領域に書込む。その後、RM1は、そのトランザ
クションのロールバック処理を行い(S49)、その旨
をTMに通知する。その通知を受けてTMは、APPに
対してエラーリターンを行う(S50)。このように、
フェーズ1において、RMの一つにエラーが起こった場
合は、すべてのRMについてロールバック処理が行わ
れ、データの整合性が保たれる。なお、このときRM1
のログ領域には、図14に示すログ142aが記録され
ている。
【0033】次に、フェーズ2における実際のコミット
処理時にエラーが発生した場合の処理の流れについて図
10のフローチャートと図11及び図15のデータの流
れ図とを用いて説明する。この例では、RM1は正常
で、RM2でエラーが発生したものとする。その他前提
条件等は、前述の正常時の場合と同様である。
処理時にエラーが発生した場合の処理の流れについて図
10のフローチャートと図11及び図15のデータの流
れ図とを用いて説明する。この例では、RM1は正常
で、RM2でエラーが発生したものとする。その他前提
条件等は、前述の正常時の場合と同様である。
【0034】図10のトランザクション処理において、
アプリケーション(APP)のコミット要求(S20)
からフェーズ2におけるTMからRMへのコミット要求
(S30)までの処理は、前述の正常時(図8)の処理
と同じである。従って、S30までの処理についての説
明は省略し、以下ではそれより後の処理について説明す
る。
アプリケーション(APP)のコミット要求(S20)
からフェーズ2におけるTMからRMへのコミット要求
(S30)までの処理は、前述の正常時(図8)の処理
と同じである。従って、S30までの処理についての説
明は省略し、以下ではそれより後の処理について説明す
る。
【0035】TMからコミット処理の要求を受けとった
RM1では、前述の正常時と同様の処理が行われる(S
31〜35)。従って、RM1についてのログバッファ
やデータバッファの状態変化は、前述の正常時と同様、
図11に示したようになる。一方、RM2では、TMか
らコミット要求うけると、正常時と同様にログ情報の更
新を行う(S36)。従って、RM2のログバッファに
は、図15に示すごとく、コミット処理の確定(ステー
タス「C」)を示すログ112bが作成され、そのログ
はログ領域に格納される。
RM1では、前述の正常時と同様の処理が行われる(S
31〜35)。従って、RM1についてのログバッファ
やデータバッファの状態変化は、前述の正常時と同様、
図11に示したようになる。一方、RM2では、TMか
らコミット要求うけると、正常時と同様にログ情報の更
新を行う(S36)。従って、RM2のログバッファに
は、図15に示すごとく、コミット処理の確定(ステー
タス「C」)を示すログ112bが作成され、そのログ
はログ領域に格納される。
【0036】さて、ここでデータ部の更新処理をおいて
エラーが発生し(S51)、ここからコミット準備OK
の状態に戻ることができなくなったとすると、RM2
は、再びログ情報の更新を行う(S52)。すなわち、
図15に示すように、RM2は、対応するログバッファ
上にコミット処理のキャンセルを示すログ114bを作
成し、さらにこのログをディスクの対応ログ領域へ書き
込む。
エラーが発生し(S51)、ここからコミット準備OK
の状態に戻ることができなくなったとすると、RM2
は、再びログ情報の更新を行う(S52)。すなわち、
図15に示すように、RM2は、対応するログバッファ
上にコミット処理のキャンセルを示すログ114bを作
成し、さらにこのログをディスクの対応ログ領域へ書き
込む。
【0037】その後、RM2は、そのトランザクション
のロールバック処理を行う(S53)。このとき、RM
2のデータバッファは、図15に示すように、更新対象
リソースの値をそのトランザクションが行われる前に戻
す処理を示すデータ126bに書き換えられる。そし
て、RM2は、TMに対しロールバックを行った結果を
通知する(S54)。
のロールバック処理を行う(S53)。このとき、RM
2のデータバッファは、図15に示すように、更新対象
リソースの値をそのトランザクションが行われる前に戻
す処理を示すデータ126bに書き換えられる。そし
て、RM2は、TMに対しロールバックを行った結果を
通知する(S54)。
【0038】各RMからの処理結果通知を受け取ったT
Mでは、すべてのRMのコミット処理が正常終了したか
チェックを行う(S41)。このケースでは、RM2で
ロールバック処理を行ったため、このチェックの結果は
NOとなる。従って、両RM間でデータに矛盾が生じて
いることになり、TMはこの旨をAPPに対して通知す
る(S55)。そして、TMは、APPに対してエラー
を示す値を返して終了する(S50)。なお、このとき
のRM1及びRM2の最終的なログ領域の内容は、それ
ぞれ図11のログ140a、図15のログ142bに示
すようになっており、またRM1及びRM2の最終的な
データ領域の内容は、それぞれ図11のデータ150
a、図15のデータ152bに示すようになっている。
Mでは、すべてのRMのコミット処理が正常終了したか
チェックを行う(S41)。このケースでは、RM2で
ロールバック処理を行ったため、このチェックの結果は
NOとなる。従って、両RM間でデータに矛盾が生じて
いることになり、TMはこの旨をAPPに対して通知す
る(S55)。そして、TMは、APPに対してエラー
を示す値を返して終了する(S50)。なお、このとき
のRM1及びRM2の最終的なログ領域の内容は、それ
ぞれ図11のログ140a、図15のログ142bに示
すようになっており、またRM1及びRM2の最終的な
データ領域の内容は、それぞれ図11のデータ150
a、図15のデータ152bに示すようになっている。
【0039】このように、フェーズ2の実際のコミット
処理時に一つのRMにおいてエラーが発生すると、各R
M間でデータの一貫性がとれていない状態となる。
処理時に一つのRMにおいてエラーが発生すると、各R
M間でデータの一貫性がとれていない状態となる。
【0040】
【発明が解決しようとする課題】以上説明したように、
従来の分散トランザクション処理方法では、システムダ
ウンが起こった場合や、フェーズ1でエラーがあった場
合等には、適切な回復処理を行って各リソース間のデー
タの矛盾を回避することができるが、フェーズ2におけ
る実際のコミット処理時、すなわちデータの実更新処理
時に1つのRMにおいてエラーが発生してそのRMがロ
ールバック処理を行うと、各RM間のデータの一貫性が
保てなくなるという問題があった。従って、従来は、フ
ェーズ2でエラーが発生すると、TMの処理ではデータ
の一貫性が回復できず、いったんAPPの処理を止め、
ユーザ自身がデータの照合を行うの障害回復処理が必要
であった。
従来の分散トランザクション処理方法では、システムダ
ウンが起こった場合や、フェーズ1でエラーがあった場
合等には、適切な回復処理を行って各リソース間のデー
タの矛盾を回避することができるが、フェーズ2におけ
る実際のコミット処理時、すなわちデータの実更新処理
時に1つのRMにおいてエラーが発生してそのRMがロ
ールバック処理を行うと、各RM間のデータの一貫性が
保てなくなるという問題があった。従って、従来は、フ
ェーズ2でエラーが発生すると、TMの処理ではデータ
の一貫性が回復できず、いったんAPPの処理を止め、
ユーザ自身がデータの照合を行うの障害回復処理が必要
であった。
【0041】この発明は、上記のような問題点を解消す
るためになされたものであり、フェーズ2のデータ実更
新処理時にエラーが発生した場合でも、自動的に各RM
間のデータの一貫性を保つことが可能な分散トランザク
ション処理方法を提供することを目的とする。
るためになされたものであり、フェーズ2のデータ実更
新処理時にエラーが発生した場合でも、自動的に各RM
間のデータの一貫性を保つことが可能な分散トランザク
ション処理方法を提供することを目的とする。
【0042】
【課題を解決するための手段】上記問題を解決するため
に、本発明に係る分散トランザクション処理方法は、デ
ータの記憶及び更新を行う複数のデータ記憶部と、各デ
ータ記憶部のロールバックに必要な情報を保持するロー
ルバック情報保持部と、前記複数のデータ記憶部と通信
を行ってトランザクション処理の管理を行うトランザク
ション管理部と、このトランザクション管理部の処理に
関するログを保持するトランザクションログ保持部と、
を有する分散システムにおいて、トランザクション処理
の終了時に、各データ記憶部についてコミット処理が可
能か否かの確認を行い、すべてのデータ記憶部がコミッ
ト処理可能な場合にのみ各データ記憶部のデータの実更
新を行うことにより、複数のデータ記憶部のデータの同
期更新を保証する分散トランザクション処理方法であっ
て、各データ記憶部のデータ実更新処理の後に、トラン
ザクション管理部にてすべてのデータ記憶部の実更新が
成功したか否かを判定し、判定の結果すべてのデータ記
憶部の実更新が成功であった場合には、前記ロールバッ
ク情報保持部を解放してトランザクションを終了し、判
定の結果一つでも実更新が失敗したデータ記憶部があっ
た場合には、当該実更新の失敗したデータ記憶部以外の
データ記憶部において前記ロールバック情報保持部及び
トランザクションログ保持部の情報を用いてロールバッ
ク処理を行い、このロールバック処理の後に前記ロール
バック情報保持部を解放してトランザクションを終了す
ることを特徴とする。
に、本発明に係る分散トランザクション処理方法は、デ
ータの記憶及び更新を行う複数のデータ記憶部と、各デ
ータ記憶部のロールバックに必要な情報を保持するロー
ルバック情報保持部と、前記複数のデータ記憶部と通信
を行ってトランザクション処理の管理を行うトランザク
ション管理部と、このトランザクション管理部の処理に
関するログを保持するトランザクションログ保持部と、
を有する分散システムにおいて、トランザクション処理
の終了時に、各データ記憶部についてコミット処理が可
能か否かの確認を行い、すべてのデータ記憶部がコミッ
ト処理可能な場合にのみ各データ記憶部のデータの実更
新を行うことにより、複数のデータ記憶部のデータの同
期更新を保証する分散トランザクション処理方法であっ
て、各データ記憶部のデータ実更新処理の後に、トラン
ザクション管理部にてすべてのデータ記憶部の実更新が
成功したか否かを判定し、判定の結果すべてのデータ記
憶部の実更新が成功であった場合には、前記ロールバッ
ク情報保持部を解放してトランザクションを終了し、判
定の結果一つでも実更新が失敗したデータ記憶部があっ
た場合には、当該実更新の失敗したデータ記憶部以外の
データ記憶部において前記ロールバック情報保持部及び
トランザクションログ保持部の情報を用いてロールバッ
ク処理を行い、このロールバック処理の後に前記ロール
バック情報保持部を解放してトランザクションを終了す
ることを特徴とする。
【0043】また、本発明に係る分散トランザクション
処理方法は、各データ記憶部についてのコミット処理の
可否の確認の前にコミット処理の開始を示すログを前記
トランザクションログ保持部に記憶し、すべてのデータ
記憶部の実更新が成功したか否かの判定の結果すべての
データ記憶部の実更新が成功であったら、実更新が成功
した旨を示すログをトランザクションログ保持部に記憶
し、分散システムに障害が発生した場合においてその障
害から回復したときには、各データ記憶部はトランザク
ションログ保持部を参照し、トランザクションログ保持
部に前記実更新が成功した旨を示すログが存在する場合
には各データ記憶部はコミット処理を続行して前記ロー
ルバック情報保持部を解放し、前記実更新が成功した旨
を示すログが存在せず前記コミット処理の開始を示すロ
グが存在する場合には各データ記憶部はロールバック処
理を行ったのち前記ロールバック情報保持部を解放する
ことを特徴とする。
処理方法は、各データ記憶部についてのコミット処理の
可否の確認の前にコミット処理の開始を示すログを前記
トランザクションログ保持部に記憶し、すべてのデータ
記憶部の実更新が成功したか否かの判定の結果すべての
データ記憶部の実更新が成功であったら、実更新が成功
した旨を示すログをトランザクションログ保持部に記憶
し、分散システムに障害が発生した場合においてその障
害から回復したときには、各データ記憶部はトランザク
ションログ保持部を参照し、トランザクションログ保持
部に前記実更新が成功した旨を示すログが存在する場合
には各データ記憶部はコミット処理を続行して前記ロー
ルバック情報保持部を解放し、前記実更新が成功した旨
を示すログが存在せず前記コミット処理の開始を示すロ
グが存在する場合には各データ記憶部はロールバック処
理を行ったのち前記ロールバック情報保持部を解放する
ことを特徴とする。
【0044】また、本発明に係る分散トランザクション
処理方法は、各データ記憶部のデータ実更新処理の後
に、トランザクション管理部にてすべてのデータ記憶部
の実更新が成功したか否かを判定し、判定の結果一つで
も実更新が失敗したデータ記憶部があった場合には、当
該実更新の失敗したデータ記憶部以外のデータ記憶部に
おいて前記ロールバック情報保持部の情報を用いてロー
ルバック処理を行い、このロールバック処理の後に前記
ロールバック情報保持部を解放してトランザクションを
終了し、判定の結果すべてのデータ記憶部の実更新が成
功であった場合には、このトランザクションに関する前
記ロールバック情報保持部の情報を保持したままトラン
ザクションを終了し、次のトランザクションの開始時に
おけるトランザクション管理部からデータ記憶部へのト
ランザクション開始指示と同時に当該ロールバック情報
保持部の解放指示を行い、この解放指示に従って前記ロ
ールバック情報保持部を解放することを特徴とする。
処理方法は、各データ記憶部のデータ実更新処理の後
に、トランザクション管理部にてすべてのデータ記憶部
の実更新が成功したか否かを判定し、判定の結果一つで
も実更新が失敗したデータ記憶部があった場合には、当
該実更新の失敗したデータ記憶部以外のデータ記憶部に
おいて前記ロールバック情報保持部の情報を用いてロー
ルバック処理を行い、このロールバック処理の後に前記
ロールバック情報保持部を解放してトランザクションを
終了し、判定の結果すべてのデータ記憶部の実更新が成
功であった場合には、このトランザクションに関する前
記ロールバック情報保持部の情報を保持したままトラン
ザクションを終了し、次のトランザクションの開始時に
おけるトランザクション管理部からデータ記憶部へのト
ランザクション開始指示と同時に当該ロールバック情報
保持部の解放指示を行い、この解放指示に従って前記ロ
ールバック情報保持部を解放することを特徴とする。
【0045】更に、本発明に係る分散トランザクション
処理方法は、各データ記憶部についてのコミット処理の
可否の確認の前に、コミット処理の開始を示すログを前
記トランザクションログ保持部に記憶し、すべてのデー
タ記憶部の実更新が成功したか否かの判定の結果、すべ
てのデータ記憶部の実更新が成功であったら、実更新が
成功した旨を示すログをトランザクションログ保持部に
記憶し、分散システムに障害が発生した場合においてそ
の障害から回復したときに、各データ記憶部がトランザ
クションログ保持部を参照し、トランザクションログ保
持部に前記実更新が成功した旨を示すログが存在せず前
記コミット処理の開始を示すログが存在する場合には各
データ記憶部はロールバック処理を行ったのち前記ロー
ルバック情報保持部を解放し、前記実更新が成功した旨
を示すログが存在する場合には各データ記憶部はコミッ
ト処理を続行して前記ロールバック情報保持部を解放せ
ずにトランザクションを終了し次のトランザクションの
開始時に前記ロールバック情報保持部を解放することを
特徴とする。
処理方法は、各データ記憶部についてのコミット処理の
可否の確認の前に、コミット処理の開始を示すログを前
記トランザクションログ保持部に記憶し、すべてのデー
タ記憶部の実更新が成功したか否かの判定の結果、すべ
てのデータ記憶部の実更新が成功であったら、実更新が
成功した旨を示すログをトランザクションログ保持部に
記憶し、分散システムに障害が発生した場合においてそ
の障害から回復したときに、各データ記憶部がトランザ
クションログ保持部を参照し、トランザクションログ保
持部に前記実更新が成功した旨を示すログが存在せず前
記コミット処理の開始を示すログが存在する場合には各
データ記憶部はロールバック処理を行ったのち前記ロー
ルバック情報保持部を解放し、前記実更新が成功した旨
を示すログが存在する場合には各データ記憶部はコミッ
ト処理を続行して前記ロールバック情報保持部を解放せ
ずにトランザクションを終了し次のトランザクションの
開始時に前記ロールバック情報保持部を解放することを
特徴とする。
【0046】
【作用】エラー発生時や障害回復時の各データ記憶部の
ロールバック処理は、ロールバック情報保持部及びトラ
ンザクションログ保持部に保持されているログ等のデー
タに基づいて行われる。本発明の第1の構成では、デー
タ記憶部におけるデータの実更新処理の後すぐにはロー
ルバック情報保持部及びトランザクションログ保持部を
解放せず、全データ記憶部における実更新が成功したこ
とを確認して初めてそれらログ保持部の解放を行う。従
って、データの実更新処理においてエラーが発生した場
合にも、解放していないロールバック情報保持部及びト
ランザクションログ保持部の情報を用いて、各データ記
憶部についてロールバック処理を行うことができる。よ
って、データ実更新処理時に一部のデータ記憶部におい
てエラーが生じた場合でも、分散システム全体のデータ
の一貫性を保つことができる。なお、本発明に構成にお
けるデータ記憶部は、図1の構成では各RM1,2及び
データ領域11,12に相当し、ロールバック情報保持
部は、図1ではログバッファ3,4及びロック管理テー
ブル7,8に相当する。また、トランザクション管理部
は、図1ではTM13に相当し、トランザクションログ
保持部は、図1ではTMログバッファ14に相当する。
ロールバック処理は、ロールバック情報保持部及びトラ
ンザクションログ保持部に保持されているログ等のデー
タに基づいて行われる。本発明の第1の構成では、デー
タ記憶部におけるデータの実更新処理の後すぐにはロー
ルバック情報保持部及びトランザクションログ保持部を
解放せず、全データ記憶部における実更新が成功したこ
とを確認して初めてそれらログ保持部の解放を行う。従
って、データの実更新処理においてエラーが発生した場
合にも、解放していないロールバック情報保持部及びト
ランザクションログ保持部の情報を用いて、各データ記
憶部についてロールバック処理を行うことができる。よ
って、データ実更新処理時に一部のデータ記憶部におい
てエラーが生じた場合でも、分散システム全体のデータ
の一貫性を保つことができる。なお、本発明に構成にお
けるデータ記憶部は、図1の構成では各RM1,2及び
データ領域11,12に相当し、ロールバック情報保持
部は、図1ではログバッファ3,4及びロック管理テー
ブル7,8に相当する。また、トランザクション管理部
は、図1ではTM13に相当し、トランザクションログ
保持部は、図1ではTMログバッファ14に相当する。
【0047】また、本発明の第2の構成によれば、前記
第1の構成において、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に記憶し、すべてのデ
ータ記憶部の実更新が成功したか否かの判定の結果、全
データ記憶部の実更新が成功であったら実更新が成功し
た旨を示すログをトランザクションログ保持部に記憶す
る。そして、分散システムに障害が発生した場合におい
てその障害から回復したときには、各データ記憶部は、
トランザクションログ保持部を参照し、最新のログがコ
ミット処理開始のログと実更新成功のログのいずれであ
るかによって、障害回復処理においてコミット処理の続
行を行うかロールバック処理を行うかの判断を行う。こ
のような手順により、障害回復時においても分散システ
ムにおけるデータの一貫性を保つことができる。更に
は、従来は、各データ記憶部において障害回復処理判断
のための情報、すなわち「コミット準備OK」を示すロ
グを生成し、ロールバック情報保持部に保持していた
が、本発明によれば、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に登録し、このログを
障害回復処理判断の情報として用いることにより、各デ
ータ記憶部について障害回復処理判断のための情報を生
成及び保持する必要がなくなり、各データ記憶部におけ
る処理ステップ(I/O回数)を削減することができ
る。
第1の構成において、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に記憶し、すべてのデ
ータ記憶部の実更新が成功したか否かの判定の結果、全
データ記憶部の実更新が成功であったら実更新が成功し
た旨を示すログをトランザクションログ保持部に記憶す
る。そして、分散システムに障害が発生した場合におい
てその障害から回復したときには、各データ記憶部は、
トランザクションログ保持部を参照し、最新のログがコ
ミット処理開始のログと実更新成功のログのいずれであ
るかによって、障害回復処理においてコミット処理の続
行を行うかロールバック処理を行うかの判断を行う。こ
のような手順により、障害回復時においても分散システ
ムにおけるデータの一貫性を保つことができる。更に
は、従来は、各データ記憶部において障害回復処理判断
のための情報、すなわち「コミット準備OK」を示すロ
グを生成し、ロールバック情報保持部に保持していた
が、本発明によれば、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に登録し、このログを
障害回復処理判断の情報として用いることにより、各デ
ータ記憶部について障害回復処理判断のための情報を生
成及び保持する必要がなくなり、各データ記憶部におけ
る処理ステップ(I/O回数)を削減することができ
る。
【0048】また、本発明の第3の構成によれば、デー
タの実更新処理の後すぐにはロールバック情報保持部の
解放を行わず、次のトランザクションの開始時における
トランザクション管理部からデータ記憶部へのトランザ
クション開始指示と同時に当該ロールバック情報保持部
の解放指示を行うことにより、トランザクションが正常
に行われる場合におけるトランザクション管理部とデー
タ記憶部との間の通信回数を低減し、処理効率を向上さ
せることができる。
タの実更新処理の後すぐにはロールバック情報保持部の
解放を行わず、次のトランザクションの開始時における
トランザクション管理部からデータ記憶部へのトランザ
クション開始指示と同時に当該ロールバック情報保持部
の解放指示を行うことにより、トランザクションが正常
に行われる場合におけるトランザクション管理部とデー
タ記憶部との間の通信回数を低減し、処理効率を向上さ
せることができる。
【0049】また、本発明の第4の構成によれば、前記
第3の構成において、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に登録し、このログを
障害回復処理判断の情報として用いることにより、上記
第2の構成と同様、各データ記憶部について障害回復処
理判断のための情報を生成及び保持する必要がなくな
り、各データ記憶部における処理ステップ(I/O回
数)を削減することができる。
第3の構成において、各データ記憶部についてのコミッ
ト処理の可否の確認の前にコミット処理の開始を示すロ
グをトランザクションログ保持部に登録し、このログを
障害回復処理判断の情報として用いることにより、上記
第2の構成と同様、各データ記憶部について障害回復処
理判断のための情報を生成及び保持する必要がなくな
り、各データ記憶部における処理ステップ(I/O回
数)を削減することができる。
【0050】
【実施例】以下、図面に基づき、本発明の好適な実施例
について説明する。なお、実施例の方法が適用される分
散システムの構成は、従来技術と同様、図1に示す構成
である。また、以下の実施例の説明におけるトランザク
ションで行われる処理操作は、前記従来技術の説明にお
ける処理操作(RM1によってレコードx1のデータを
x11からx12に更新する処理と、RM2によってレ
コードx2のデータをx21からx22に更新する処理
とを同一のトランザクションで行う)と同じものであ
る。
について説明する。なお、実施例の方法が適用される分
散システムの構成は、従来技術と同様、図1に示す構成
である。また、以下の実施例の説明におけるトランザク
ションで行われる処理操作は、前記従来技術の説明にお
ける処理操作(RM1によってレコードx1のデータを
x11からx12に更新する処理と、RM2によってレ
コードx2のデータをx21からx22に更新する処理
とを同一のトランザクションで行う)と同じものであ
る。
【0051】第1実施例 まず、本発明の第1の実施例について説明する。
【0052】この第1実施例は、従来方法においてはフ
ェーズ2で一連の処理として行われていたRMのデータ
部への書込み(データの実更新)処理及びRMのログバ
ッファ、ロックの解放処理を2つの段階に分けたもので
ある。すなわち、データ部の実更新のフェーズの後に、
この実更新時にエラーが起こっていないかどうかを判断
するステップを設け、この判断ステップの後にログバッ
ファ等の解放を行うフェーズを設けたことにより、一部
のRMにおいてデータ部の実更新時にエラーが起こった
場合でも、他のデータの実更新に成功したRMのログバ
ッファ等はその時点ではまだ解放されていないため、ロ
ールバック処理を行うことができる。
ェーズ2で一連の処理として行われていたRMのデータ
部への書込み(データの実更新)処理及びRMのログバ
ッファ、ロックの解放処理を2つの段階に分けたもので
ある。すなわち、データ部の実更新のフェーズの後に、
この実更新時にエラーが起こっていないかどうかを判断
するステップを設け、この判断ステップの後にログバッ
ファ等の解放を行うフェーズを設けたことにより、一部
のRMにおいてデータ部の実更新時にエラーが起こった
場合でも、他のデータの実更新に成功したRMのログバ
ッファ等はその時点ではまだ解放されていないため、ロ
ールバック処理を行うことができる。
【0053】以下、この第1実施例の方法において、正
常に処理が行われた場合、及びデータ部の更新処理時に
エラーが起こった場合について、それぞれフローチャー
トを参照しつつ説明する。
常に処理が行われた場合、及びデータ部の更新処理時に
エラーが起こった場合について、それぞれフローチャー
トを参照しつつ説明する。
【0054】図2は、この第1実施例の処理方法を用い
た場合において、トランザクションの処理がすべて正常
に行われた場合の処理の流れを示すフローチャートであ
る。なお、このケースにおけるログバッファ及びディス
ク内におけるデータの流れの様子は、従来方法の正常時
の場合とほぼ同様であり、図11、図12及び図13に
示すごとくになる。
た場合において、トランザクションの処理がすべて正常
に行われた場合の処理の流れを示すフローチャートであ
る。なお、このケースにおけるログバッファ及びディス
ク内におけるデータの流れの様子は、従来方法の正常時
の場合とほぼ同様であり、図11、図12及び図13に
示すごとくになる。
【0055】図2のトランザクション処理において、ア
プリケーション(APP)のコミット要求(S20)か
らフェーズ2におけるデータ部の実更新処理(S32,
S37)までの処理は、従来方法における正常時(図
8)の処理と同じである。従って、S32及びS37ま
での処理についての説明は省略し、以下ではそれより後
の処理について説明する。
プリケーション(APP)のコミット要求(S20)か
らフェーズ2におけるデータ部の実更新処理(S32,
S37)までの処理は、従来方法における正常時(図
8)の処理と同じである。従って、S32及びS37ま
での処理についての説明は省略し、以下ではそれより後
の処理について説明する。
【0056】本実施例が、従来方法と異なるのは、フェ
ーズ2で各RMについてデータバッファ及びデータ領域
に書込みを行った後、すぐにはログバッファ及びロック
管理テーブルの解放を行わない点である。すなわち、本
実施例の方法では、データ部の実更新処理(S32,S
37)が終わると、各RMは、ログバッファ及びロック
管理テーブルの解放を行わずに、これまでの処理が成功
した旨(OK)のみをTMに通知する(S35a,S4
0a)。
ーズ2で各RMについてデータバッファ及びデータ領域
に書込みを行った後、すぐにはログバッファ及びロック
管理テーブルの解放を行わない点である。すなわち、本
実施例の方法では、データ部の実更新処理(S32,S
37)が終わると、各RMは、ログバッファ及びロック
管理テーブルの解放を行わずに、これまでの処理が成功
した旨(OK)のみをTMに通知する(S35a,S4
0a)。
【0057】各RMのフェーズ2の処理結果を受けとっ
たTMは、すべてのRMの処理結果がOKか否か確認す
る(S41a)。このケース(正常時)ではすべてOK
なので、TMは、フェーズ3として、ログバッファ及び
ロックの解放を要求するためのリソース解放要求を各R
Mに通知する(S56)。また、TMは、この通知と同
時にTMログ情報の更新を行う(S42a)。すなわ
ち、TMは、S29で書込んだTMログバッファの内容
をクリアし、さらにこのクリアしたログをTMログ領域
に書込む(図13のログ168、172参照)。この
後、TMは、正常終了を示す値をアプリケーション(A
PP)に返す(S43a)。
たTMは、すべてのRMの処理結果がOKか否か確認す
る(S41a)。このケース(正常時)ではすべてOK
なので、TMは、フェーズ3として、ログバッファ及び
ロックの解放を要求するためのリソース解放要求を各R
Mに通知する(S56)。また、TMは、この通知と同
時にTMログ情報の更新を行う(S42a)。すなわ
ち、TMは、S29で書込んだTMログバッファの内容
をクリアし、さらにこのクリアしたログをTMログ領域
に書込む(図13のログ168、172参照)。この
後、TMは、正常終了を示す値をアプリケーション(A
PP)に返す(S43a)。
【0058】一方、TMから確定要求を受けとった各R
Mでは、ログバッファの解放(S33a,S38a)と
ロックの解放(S34a,S39a)を行う。すなわ
ち、各ログバッファは、トランザクション(TID:
α)に関する情報をなくしてもよい状態となり、また各
ロック管理テーブルは、更新対象リソースについての使
用者がないことを示す内容(図11のデータ136a,
図12のデータ136b)に変更される。
Mでは、ログバッファの解放(S33a,S38a)と
ロックの解放(S34a,S39a)を行う。すなわ
ち、各ログバッファは、トランザクション(TID:
α)に関する情報をなくしてもよい状態となり、また各
ロック管理テーブルは、更新対象リソースについての使
用者がないことを示す内容(図11のデータ136a,
図12のデータ136b)に変更される。
【0059】上述した正常時の処理における最終的なロ
グ領域及びデータ領域のイメージは、従来方法の場合と
同様に、図11及び図12のそれぞれ、ログ140a,
140b及びデータ150a,150bに示したごとく
になる。
グ領域及びデータ領域のイメージは、従来方法の場合と
同様に、図11及び図12のそれぞれ、ログ140a,
140b及びデータ150a,150bに示したごとく
になる。
【0060】なお、本実施例の方法において、フェーズ
1でエラーが発生した場合は、従来方法と全く同様の処
理(図9参照)によってロールバックがなされ、各リソ
ース(データベース等)間のデータの矛盾が解消され
る。
1でエラーが発生した場合は、従来方法と全く同様の処
理(図9参照)によってロールバックがなされ、各リソ
ース(データベース等)間のデータの矛盾が解消され
る。
【0061】また、各リソースのデータ部の実更新処理
の前にシステムダウンが起こった場合も、従来方法と同
様の流れで回復処理がなされるため、各リソース(デー
タベース等)間のデータの一貫性が保たれる。
の前にシステムダウンが起こった場合も、従来方法と同
様の流れで回復処理がなされるため、各リソース(デー
タベース等)間のデータの一貫性が保たれる。
【0062】次に、フェーズ2のコミット処理時、すな
わちデータ部の実更新処理時、にエラーが発生した場合
における本実施例の方法の処理の流れについて、図3の
フローチャートを参照して説明する。この例では、RM
1は正常で、RM2でエラーが発生したものとする。な
お、このケースにおけるRM1及びRM2の各バッファ
及びディスクの各記憶領域内のデータの変化の様子は、
それぞれ図16及び図15に示される。
わちデータ部の実更新処理時、にエラーが発生した場合
における本実施例の方法の処理の流れについて、図3の
フローチャートを参照して説明する。この例では、RM
1は正常で、RM2でエラーが発生したものとする。な
お、このケースにおけるRM1及びRM2の各バッファ
及びディスクの各記憶領域内のデータの変化の様子は、
それぞれ図16及び図15に示される。
【0063】図3のトランザクション処理において、ア
プリケーションからのコミット要求(S20)からフェ
ーズ2におけるログ情報の更新処理(S31,S36)
までの処理は、前述の正常ケース(図2)と同じであ
る。従って、S31、S36までの処理についての説明
は省略し、以下ではそれより後の処理について説明す
る。
プリケーションからのコミット要求(S20)からフェ
ーズ2におけるログ情報の更新処理(S31,S36)
までの処理は、前述の正常ケース(図2)と同じであ
る。従って、S31、S36までの処理についての説明
は省略し、以下ではそれより後の処理について説明す
る。
【0064】まず、RM1では、前述の正常時と同様、
データ部の更新処理(S32)を行い、処理結果(コミ
ットOK)をTMに通知する(S35a)。このとき、
RM1のログバッファには、図16に示すように、コミ
ット処理が確定した旨を示すログ112aが作成されて
いる。
データ部の更新処理(S32)を行い、処理結果(コミ
ットOK)をTMに通知する(S35a)。このとき、
RM1のログバッファには、図16に示すように、コミ
ット処理が確定した旨を示すログ112aが作成されて
いる。
【0065】一方、RM2では、TMからコミット要求
うけると、正常時と同様にログ情報の更新を行う(S3
6)。従って、RM2のログバッファには、図15に示
すごとく、コミット処理の確定を示すログ112bが作
成され、そのログはログ領域に格納される。
うけると、正常時と同様にログ情報の更新を行う(S3
6)。従って、RM2のログバッファには、図15に示
すごとく、コミット処理の確定を示すログ112bが作
成され、そのログはログ領域に格納される。
【0066】さて、ここでデータ部の更新処理をおいて
エラーが発生し(S51)、ここからコミット準備OK
の状態に戻ることができなくなったとすると、RM2
は、再びログ情報の更新を行う(S52)。すなわち、
図15に示すように、RM2は、対応するログバッファ
上にコミット処理のキャンセルを示すログ114bを作
成し、さらにこのログをディスクの対応ログ領域へ書き
込む。
エラーが発生し(S51)、ここからコミット準備OK
の状態に戻ることができなくなったとすると、RM2
は、再びログ情報の更新を行う(S52)。すなわち、
図15に示すように、RM2は、対応するログバッファ
上にコミット処理のキャンセルを示すログ114bを作
成し、さらにこのログをディスクの対応ログ領域へ書き
込む。
【0067】その後、RM2は、そのトランザクション
のロールバック処理を行う。すなわち、データ部を更新
前の状態に戻し(S56)、ログバッファとロックの解
放を行う(S38a,S39a)。このとき、RM2の
データバッファは、図15に示すように、更新対象リソ
ースの値をそのトランザクションが行われる前の状態に
戻す処理を示すデータ126bに書き換えられる。そし
て、RM2は、TMに対しロールバックを行った結果
(コミットNG)を通知する(S54a)。
のロールバック処理を行う。すなわち、データ部を更新
前の状態に戻し(S56)、ログバッファとロックの解
放を行う(S38a,S39a)。このとき、RM2の
データバッファは、図15に示すように、更新対象リソ
ースの値をそのトランザクションが行われる前の状態に
戻す処理を示すデータ126bに書き換えられる。そし
て、RM2は、TMに対しロールバックを行った結果
(コミットNG)を通知する(S54a)。
【0068】TMでは、すべてRMの処理結果がOKか
否かチェックを行い(S41a)、このケースではRM
2でロールバック処理を行ったため、このチェックの結
果はNOとなる。すると、TMは、フェーズ2の実更新
処理が失敗したRM以外の各RM(このケースではRM
1)に対して、既に行われたデータの実更新を取り消す
ためのロールバック要求を通知する(S57)。また、
TMは、このロールバック要求の発信と同時に、TMロ
グ情報の更新(クリア)を行う(S42a)。そして、
TMは、アプリケーション(APP)に対してエラーリ
ターンを行う(S50a)。
否かチェックを行い(S41a)、このケースではRM
2でロールバック処理を行ったため、このチェックの結
果はNOとなる。すると、TMは、フェーズ2の実更新
処理が失敗したRM以外の各RM(このケースではRM
1)に対して、既に行われたデータの実更新を取り消す
ためのロールバック要求を通知する(S57)。また、
TMは、このロールバック要求の発信と同時に、TMロ
グ情報の更新(クリア)を行う(S42a)。そして、
TMは、アプリケーション(APP)に対してエラーリ
ターンを行う(S50a)。
【0069】一方、TMからロールバック要求を受けと
ったRM1では、まずログ情報の更新を行う(S5
8)。すなわち、図16に示すように、RM1のログバ
ッファ上のキャンセルを示すログ114aを作成し、こ
れをディスクへ書込む。
ったRM1では、まずログ情報の更新を行う(S5
8)。すなわち、図16に示すように、RM1のログバ
ッファ上のキャンセルを示すログ114aを作成し、こ
れをディスクへ書込む。
【0070】この後、RM1は、データ部を元に戻す
(S59)。すなわち、RM1のデータバッファは、図
16に示すように、更新対象リソースの値をそのトラン
ザクションが行われる前の状態に戻す処理を示すデータ
126aに書き換えられ、またディスクのデータ領域も
更新前の状態(x11)に戻される。従って、RM1と
RM2の最終的なログ及びデータのイメージは、それぞ
れ図16及び図15のログ142a,142b及びデー
タ152a,152bに示すごとくになり、各RM間で
データの一貫性がとれている状態となる。
(S59)。すなわち、RM1のデータバッファは、図
16に示すように、更新対象リソースの値をそのトラン
ザクションが行われる前の状態に戻す処理を示すデータ
126aに書き換えられ、またディスクのデータ領域も
更新前の状態(x11)に戻される。従って、RM1と
RM2の最終的なログ及びデータのイメージは、それぞ
れ図16及び図15のログ142a,142b及びデー
タ152a,152bに示すごとくになり、各RM間で
データの一貫性がとれている状態となる。
【0071】そして、データ部の回復処理が終わると、
RM1は、ログバッファとロックの解放を行う(S33
a,S34a)。すなわち、RM1のログバッファは、
トランザクション(TID:α)に関する情報をなくし
てもよい状態となり、またロック管理テーブルは、更新
対象リソースについての使用者がないことを示す内容
(図16のデータ136a)に変更される。
RM1は、ログバッファとロックの解放を行う(S33
a,S34a)。すなわち、RM1のログバッファは、
トランザクション(TID:α)に関する情報をなくし
てもよい状態となり、またロック管理テーブルは、更新
対象リソースについての使用者がないことを示す内容
(図16のデータ136a)に変更される。
【0072】このように、本実施例では、ログバッファ
及びロック管理テーブルの解放処理を各RMのデータ実
更新処理の成否を判定した後に行うようにしたため、フ
ェーズ2のコミット処理時、すなわちデータの実更新時
に一部のRMがエラーによりロールバックを行った場合
でも、既にデータの実更新が終了したRMのログバッフ
ァ等はその時点ではまだ解放されずに保持されている。
従って、本実施例では、フェーズ2を正常処理したRM
は、保持されているログバッファ及びロック管理テーブ
ルに基づきロールバックすることができるので、システ
ム全体のデータの一貫性を維持することができる。
及びロック管理テーブルの解放処理を各RMのデータ実
更新処理の成否を判定した後に行うようにしたため、フ
ェーズ2のコミット処理時、すなわちデータの実更新時
に一部のRMがエラーによりロールバックを行った場合
でも、既にデータの実更新が終了したRMのログバッフ
ァ等はその時点ではまだ解放されずに保持されている。
従って、本実施例では、フェーズ2を正常処理したRM
は、保持されているログバッファ及びロック管理テーブ
ルに基づきロールバックすることができるので、システ
ム全体のデータの一貫性を維持することができる。
【0073】第2実施例 本発明の第2実施例は、前記第1実施例の変形であり、
前記第1実施例のフェーズ3で行っていたRMのログバ
ッファ及びロック管理テーブルの解放処理を次のトラン
ザクションに移したものである。
前記第1実施例のフェーズ3で行っていたRMのログバ
ッファ及びロック管理テーブルの解放処理を次のトラン
ザクションに移したものである。
【0074】図4のフローチャートは、この第2実施例
の方法を用いた場合の正常時の処理の流れを示すフロー
チャートである。
の方法を用いた場合の正常時の処理の流れを示すフロー
チャートである。
【0075】図4のトランザクション処理において、ア
プリケーション(APP)のコミット要求(S20)か
らフェーズ2のコミット(データ実更新)処理の結果の
判定(S41a)までは、前述の第1実施例(図2のフ
ローチャート)と同じ処理である。
プリケーション(APP)のコミット要求(S20)か
らフェーズ2のコミット(データ実更新)処理の結果の
判定(S41a)までは、前述の第1実施例(図2のフ
ローチャート)と同じ処理である。
【0076】本実施例が前記第1実施例と異なるのは、
S41aの判定の結果がすべてOKの場合には、フェー
ズ3(ログバッファ及びロックの解放)の処理を行わず
にAPPにリターンしてしまう点である。すなわち、本
実施例の処理では、S41aの判定においてすべてRM
の通知がOKである場合には、TMは、まずTMログバ
ッファ上のログ情報(S29で書き込まれたもの)をメ
モリ(例えばメインメモリ)上の所定領域にいったんセ
ーブ(保存)し(S60)、その後、TMログバッファ
及びディスクのTMログ領域のログ情報のクリアを行う
(S42b)。そして、TMは、正常終了を示す値をア
プリケーション(APP)に返し(S43b)、これに
より一つのトランザクションを終了する。
S41aの判定の結果がすべてOKの場合には、フェー
ズ3(ログバッファ及びロックの解放)の処理を行わず
にAPPにリターンしてしまう点である。すなわち、本
実施例の処理では、S41aの判定においてすべてRM
の通知がOKである場合には、TMは、まずTMログバ
ッファ上のログ情報(S29で書き込まれたもの)をメ
モリ(例えばメインメモリ)上の所定領域にいったんセ
ーブ(保存)し(S60)、その後、TMログバッファ
及びディスクのTMログ領域のログ情報のクリアを行う
(S42b)。そして、TMは、正常終了を示す値をア
プリケーション(APP)に返し(S43b)、これに
より一つのトランザクションを終了する。
【0077】そして、その後APPにおいて、別のトラ
ンザクションが発生したとき(S61)には、まずTM
において、前記メモリ上の所定領域に前回トランザクシ
ョンの際にセーブされたTMログ情報が存在するかチェ
ックを行う(S62)。このケースでは、前回トランザ
クションのTMログ情報が存在するので、TMは、この
TMログ情報を各RMに対するトランザクションの開始
要求の際に送信する通知情報に付加する(S63)。そ
の後、TMは、メインメモリ等にセーブしておいた前回
トランザクションのTMログ情報をクリアし(S6
4)、トランザクションの開始要求を各RMに通知する
(S65)。
ンザクションが発生したとき(S61)には、まずTM
において、前記メモリ上の所定領域に前回トランザクシ
ョンの際にセーブされたTMログ情報が存在するかチェ
ックを行う(S62)。このケースでは、前回トランザ
クションのTMログ情報が存在するので、TMは、この
TMログ情報を各RMに対するトランザクションの開始
要求の際に送信する通知情報に付加する(S63)。そ
の後、TMは、メインメモリ等にセーブしておいた前回
トランザクションのTMログ情報をクリアし(S6
4)、トランザクションの開始要求を各RMに通知する
(S65)。
【0078】トランザクションの開始要求を受けとった
各RMでは、通知情報を調べてTMログ情報の有無をチ
ェックし(S66,S68)、TMログ情報が存在して
いた場合には、保持していたログバッファの解放(S3
3b,S38b)とロックの解放(S34b,S39
b)を行う。各RMは、以上の処理によりログバッファ
及びロック管理テーブルを初期化した後で、通常どおり
のトランザクションの開始処理を行う(S67,S6
9)。
各RMでは、通知情報を調べてTMログ情報の有無をチ
ェックし(S66,S68)、TMログ情報が存在して
いた場合には、保持していたログバッファの解放(S3
3b,S38b)とロックの解放(S34b,S39
b)を行う。各RMは、以上の処理によりログバッファ
及びロック管理テーブルを初期化した後で、通常どおり
のトランザクションの開始処理を行う(S67,S6
9)。
【0079】以上説明したように、本実施例では、正常
処理の場合は、ログバッファ等の解放のための通信を次
回トランザクションの開始時の通信に含めてしまうこと
によりフェーズ3の通信を行う必要がなくなるので、T
Mと各RMとの間の通信量を減らすことが可能である。
処理の場合は、ログバッファ等の解放のための通信を次
回トランザクションの開始時の通信に含めてしまうこと
によりフェーズ3の通信を行う必要がなくなるので、T
Mと各RMとの間の通信量を減らすことが可能である。
【0080】なお、この第2実施例において、フェーズ
1又はフェーズ2で一部のRMにエラーが起こった場
合、及びシステムダウンが起こった場合は、前述の第1
実施例と同様の処理の処理の流れにより、それぞれ正常
に回復処理がなされ、各リソース間のデータの一貫性が
維持される。
1又はフェーズ2で一部のRMにエラーが起こった場
合、及びシステムダウンが起こった場合は、前述の第1
実施例と同様の処理の処理の流れにより、それぞれ正常
に回復処理がなされ、各リソース間のデータの一貫性が
維持される。
【0081】第3実施例 前述の第1実施例は、コミット処理(データの実更新処
理)の後に各RMのコミット処理の成否を確認するステ
ップを設け、各RMのログバッファやロックの解除をそ
のステップの後に行うという構成としたことにより、コ
ミット処理後の各RMのロールバック処理を可能にした
ものであった。これに対し、第3実施例は、このコミッ
ト処理後にも各RMのロールバック処理が可能な点に注
目して、第1実施例ではフェーズ2で行われていたデー
タの実更新処理をフェーズ1に移し、フェーズ1におい
てコミット確認とデータの実更新の両方を行うようにし
た方法である。この方法では、フェーズ1(コミット確
認及びデータの実更新)ではログバッファ及びロック管
理テーブルを解放せずに保持したままにし、フェーズ2
でのロールバックを可能とする。
理)の後に各RMのコミット処理の成否を確認するステ
ップを設け、各RMのログバッファやロックの解除をそ
のステップの後に行うという構成としたことにより、コ
ミット処理後の各RMのロールバック処理を可能にした
ものであった。これに対し、第3実施例は、このコミッ
ト処理後にも各RMのロールバック処理が可能な点に注
目して、第1実施例ではフェーズ2で行われていたデー
タの実更新処理をフェーズ1に移し、フェーズ1におい
てコミット確認とデータの実更新の両方を行うようにし
た方法である。この方法では、フェーズ1(コミット確
認及びデータの実更新)ではログバッファ及びロック管
理テーブルを解放せずに保持したままにし、フェーズ2
でのロールバックを可能とする。
【0082】図5のフローチャートは、この第3実施例
の処理方法における正常時の処理の流れを示すフローチ
ャートである。このケースにおけるRM1、RM2の各
バッファ及びディスクの各記憶領域内のデータの変化の
様子は、それぞれ図17、図18に示すごとくになる。
また、TMのログバッファ及びディスクのログ領域内の
データの変化の様子は図19に示される。
の処理方法における正常時の処理の流れを示すフローチ
ャートである。このケースにおけるRM1、RM2の各
バッファ及びディスクの各記憶領域内のデータの変化の
様子は、それぞれ図17、図18に示すごとくになる。
また、TMのログバッファ及びディスクのログ領域内の
データの変化の様子は図19に示される。
【0083】図5に示すように、本実施例では、APP
からコミット要求(S20)があると,TMは、まずそ
の要求があったことを示すTMログ情報を作成し、TM
ログ領域に書き込む(S70)。すなわち、図19に示
すように、TMは、TMログバッファ上にログ170
(ステータス「S」)を作成し、このログをディスクの
TMログ領域に書き込む。その後、TMは、フェーズ1
として、各RMに対して、コミット処理の要求を出す
(S71)。
からコミット要求(S20)があると,TMは、まずそ
の要求があったことを示すTMログ情報を作成し、TM
ログ領域に書き込む(S70)。すなわち、図19に示
すように、TMは、TMログバッファ上にログ170
(ステータス「S」)を作成し、このログをディスクの
TMログ領域に書き込む。その後、TMは、フェーズ1
として、各RMに対して、コミット処理の要求を出す
(S71)。
【0084】各RMは、その要求を受けとると、まずコ
ミット処理が行えるかどうか確認を行う(S72,S7
7)。従来方法や前記第1実施例では、この後コミット
準備OKの状態(ステータス「P」)を示したログをロ
グバッファを作成していたが、本実施例の方法では、図
17及び図18に示すように、この段階でコミット確定
(ステータス「C」)を示すログ112a,112bを
ログバッファに作成し、ディスクのログ領域に書き込
む。
ミット処理が行えるかどうか確認を行う(S72,S7
7)。従来方法や前記第1実施例では、この後コミット
準備OKの状態(ステータス「P」)を示したログをロ
グバッファを作成していたが、本実施例の方法では、図
17及び図18に示すように、この段階でコミット確定
(ステータス「C」)を示すログ112a,112bを
ログバッファに作成し、ディスクのログ領域に書き込
む。
【0085】この後、各RMは、データバッファ及びデ
ィスクのデータ領域の更新処理を行う(S73,S7
7)。すなわち、各RMは、図17及び図18に示すよ
うに、更新対象リソースのレコード番号及び更新処理内
容からなる更新処理データを124a,124bをデー
タバッファに書き込むと共に、ディスクのデータ領域の
更新対象リソースのデータを新しい値150a,150
bに書き換える。そして、各RMは、コミット処理が正
常終了した旨をTMに対して通知する(S75,S7
9)。
ィスクのデータ領域の更新処理を行う(S73,S7
7)。すなわち、各RMは、図17及び図18に示すよ
うに、更新対象リソースのレコード番号及び更新処理内
容からなる更新処理データを124a,124bをデー
タバッファに書き込むと共に、ディスクのデータ領域の
更新対象リソースのデータを新しい値150a,150
bに書き換える。そして、各RMは、コミット処理が正
常終了した旨をTMに対して通知する(S75,S7
9)。
【0086】その通知を受けてTMでは、各RMのコミ
ット処理が正常かチェックを行う(S80)。このケー
スではすべてRMのコミット処理が正常なので、TM
は、TMログ情報の更新を行う(S82)と同時に、フ
ェーズ2として、ログバッファ及びロックの解放を要求
するためのリソース解放要求を各RMに通知する(S8
1)。このログの更新においては、TMは、S70で書
込んだTMログバッファの内容をクリアし、さらにこの
クリアしたログをTMログ領域に書込む(図19のログ
168,172参照)。この後、TMは、正常終了を示
す値をアプリケーション(APP)に返す(S83)。
ット処理が正常かチェックを行う(S80)。このケー
スではすべてRMのコミット処理が正常なので、TM
は、TMログ情報の更新を行う(S82)と同時に、フ
ェーズ2として、ログバッファ及びロックの解放を要求
するためのリソース解放要求を各RMに通知する(S8
1)。このログの更新においては、TMは、S70で書
込んだTMログバッファの内容をクリアし、さらにこの
クリアしたログをTMログ領域に書込む(図19のログ
168,172参照)。この後、TMは、正常終了を示
す値をアプリケーション(APP)に返す(S83)。
【0087】一方、そのリソース解放要求を受けとった
各RMでは、フェーズ1で解放せずに保持していたログ
バッファ及びロック管理テーブルの解放処理(S84,
S85,S86,S87)を行う。すなわち、各ログバ
ッファは、トランザクション(TID:α)に関する情
報をなくしてもよい状態となり、また各ロック管理テー
ブルは、更新対象リソースについての使用者がないこと
を示す内容(図17のデータ136a,図18のデータ
136b)に変更される。
各RMでは、フェーズ1で解放せずに保持していたログ
バッファ及びロック管理テーブルの解放処理(S84,
S85,S86,S87)を行う。すなわち、各ログバ
ッファは、トランザクション(TID:α)に関する情
報をなくしてもよい状態となり、また各ロック管理テー
ブルは、更新対象リソースについての使用者がないこと
を示す内容(図17のデータ136a,図18のデータ
136b)に変更される。
【0088】上述した正常時の処理における最終的なロ
グ及びデータのイメージは、従来方法の場合と同様に、
図17及び図18のそれぞれ、ログ140a,140b
及びデータ150a,150bに示したごとくになる。
グ及びデータのイメージは、従来方法の場合と同様に、
図17及び図18のそれぞれ、ログ140a,140b
及びデータ150a,150bに示したごとくになる。
【0089】次に、データの実更新処理時にエラーが発
生した場合における本実施例の方法の処理の流れについ
て、図6のフローチャートを参照して説明する。この例
では、RM1は正常で、RM2でエラーが発生したもの
とする。なお、このケースにおけるRM1及びRM2の
各バッファ及びディスクの各記憶領域内のデータの変化
の様子は、それぞれ図20及び図21に示される。ま
た、TMのログバッファ及びディスクのログ領域内のデ
ータの変化の様子は図19に示される。
生した場合における本実施例の方法の処理の流れについ
て、図6のフローチャートを参照して説明する。この例
では、RM1は正常で、RM2でエラーが発生したもの
とする。なお、このケースにおけるRM1及びRM2の
各バッファ及びディスクの各記憶領域内のデータの変化
の様子は、それぞれ図20及び図21に示される。ま
た、TMのログバッファ及びディスクのログ領域内のデ
ータの変化の様子は図19に示される。
【0090】図6のトランザクション処理において、A
PPのコミット要求(S20)からフェーズ1のTMの
コミット要求(S71)までの処理の流れは、前記正常
ケースと同じである。また、TMからのコミット要求を
受けとったRM1の処理も、前記正常ケースと同様であ
る(S72〜75)。
PPのコミット要求(S20)からフェーズ1のTMの
コミット要求(S71)までの処理の流れは、前記正常
ケースと同じである。また、TMからのコミット要求を
受けとったRM1の処理も、前記正常ケースと同様であ
る(S72〜75)。
【0091】一方、RM2では、TMからのコミット要
求を受けると、コミット処理の確認(S76)及びログ
情報の書込み(S77)までは、前記正常ケースと同様
に行われる。従って、この時点では、RM1及びRM2
のログバッファには、それぞれ図20及び図21に示す
ように、コミット処理が確定した旨(ステータス
「C」)を示すログ112a,112bが作成され、さ
らにそれらログは各ログ領域に格納されている。
求を受けると、コミット処理の確認(S76)及びログ
情報の書込み(S77)までは、前記正常ケースと同様
に行われる。従って、この時点では、RM1及びRM2
のログバッファには、それぞれ図20及び図21に示す
ように、コミット処理が確定した旨(ステータス
「C」)を示すログ112a,112bが作成され、さ
らにそれらログは各ログ領域に格納されている。
【0092】さて、ここでRM2のデータ部の実更新処
理においてエラーが発生した(S88)場合、本実施例
ではまずログ情報の更新を行う(S89)。すなわち、
図21に示すように、RM2は、ログバッファ上にコミ
ット処理のキャンセルを示すログ114bを作成し、さ
らにこのログをディスクのログ領域へ書き込む。
理においてエラーが発生した(S88)場合、本実施例
ではまずログ情報の更新を行う(S89)。すなわち、
図21に示すように、RM2は、ログバッファ上にコミ
ット処理のキャンセルを示すログ114bを作成し、さ
らにこのログをディスクのログ領域へ書き込む。
【0093】その後、RM2は、そのトランザクション
のロールバック処理を行う(S90)。すなわち、デー
タ部を更新前の状態に戻し、更にログバッファとロック
の解放を行う。このとき、RM2のデータバッファは、
図21に示すように、更新対象リソースの値をそのトラ
ンザクションが行われる前の状態に戻す処理を示すデー
タ126bに書き換えられる。そして、RM2は、TM
に対しロールバックを行った結果(コミット処理NG)
を通知する(S91)。
のロールバック処理を行う(S90)。すなわち、デー
タ部を更新前の状態に戻し、更にログバッファとロック
の解放を行う。このとき、RM2のデータバッファは、
図21に示すように、更新対象リソースの値をそのトラ
ンザクションが行われる前の状態に戻す処理を示すデー
タ126bに書き換えられる。そして、RM2は、TM
に対しロールバックを行った結果(コミット処理NG)
を通知する(S91)。
【0094】TMでは、すべてのRMの処理結果がOK
かどうかチェックを行う(S80)が、このケースでは
RM2でロールバック処理を行ったため、このチェック
の結果はNOとなる。すると、TMは、TMログ情報の
更新(クリア)を行う(S81)と同時に、フェーズ2
の実更新処理が失敗したRM以外の各RM(このケース
ではRM1)に対して、既に行われたデータの実更新を
取り消すためのロールバック要求を通知する(S9
2)。その後、TMは、APPに対してエラーリターン
を行う(S93)。
かどうかチェックを行う(S80)が、このケースでは
RM2でロールバック処理を行ったため、このチェック
の結果はNOとなる。すると、TMは、TMログ情報の
更新(クリア)を行う(S81)と同時に、フェーズ2
の実更新処理が失敗したRM以外の各RM(このケース
ではRM1)に対して、既に行われたデータの実更新を
取り消すためのロールバック要求を通知する(S9
2)。その後、TMは、APPに対してエラーリターン
を行う(S93)。
【0095】一方、ロールバック要求を受けとったRM
1では、まずログ情報の更新を行う(S94)。すなわ
ち、図20において、RM1のログバッファ上にキャン
セルを示すログ114aを作成し、これをディスクへ書
込む。すなわち、RM1は、データバッファの内容を、
図20のデータ126aに示すように、更新対象リソー
スの値をそのトランザクションが行われる前の状態に戻
す処理を示すデータに書き換え、またディスクのデータ
領域内の更新対象リソースも更新前の状態(x11)に
書き換える。
1では、まずログ情報の更新を行う(S94)。すなわ
ち、図20において、RM1のログバッファ上にキャン
セルを示すログ114aを作成し、これをディスクへ書
込む。すなわち、RM1は、データバッファの内容を、
図20のデータ126aに示すように、更新対象リソー
スの値をそのトランザクションが行われる前の状態に戻
す処理を示すデータに書き換え、またディスクのデータ
領域内の更新対象リソースも更新前の状態(x11)に
書き換える。
【0096】従って、本実施例では、ログバッファ及び
ロック管理テーブルの解放処理を各RMのデータ実更新
処理の成否を判定した後に行うようにしたため、あるR
Mにおけるデータの実更新処理時にエラーが発生したと
しても、既にデータ実更新が終了したRMのロールバッ
クを行うことことができ、システムのデータの一貫性を
維持することができる。
ロック管理テーブルの解放処理を各RMのデータ実更新
処理の成否を判定した後に行うようにしたため、あるR
Mにおけるデータの実更新処理時にエラーが発生したと
しても、既にデータ実更新が終了したRMのロールバッ
クを行うことことができ、システムのデータの一貫性を
維持することができる。
【0097】なお、本実施例において、各RMのコミッ
ト可否の確認処理(S72,S76)において、一部の
RMでコミットが不可能であると判定された場合には、
従来方法と同様の処理(図9参照)によってロールバッ
クがなされ、各リソース(データベース等)間のデータ
の矛盾が解消される。
ト可否の確認処理(S72,S76)において、一部の
RMでコミットが不可能であると判定された場合には、
従来方法と同様の処理(図9参照)によってロールバッ
クがなされ、各リソース(データベース等)間のデータ
の矛盾が解消される。
【0098】また、システムダウンが起こった場合、本
実施例の方法では、回復処理時に各RMがTMに対して
問い合わせを行い、TMのログ情報における最新のログ
が対応トランザクションの開始要求のログ(図19のロ
グ170)である場合は全RMについてロールバッグ処
理を行い、そうでない場合(図19のログ168の状
態)には、すべてのRMについて確定処理を行う。この
ような操作によれば、いずれの場合でも各RM間でデー
タの矛盾が生じることがなく、システムの信頼性は損な
われない。このように、本実施例は、システムダウンが
発生した場合でも、各リソース間のデータの一貫性を維
持したまま回復処理を行うことができる。
実施例の方法では、回復処理時に各RMがTMに対して
問い合わせを行い、TMのログ情報における最新のログ
が対応トランザクションの開始要求のログ(図19のロ
グ170)である場合は全RMについてロールバッグ処
理を行い、そうでない場合(図19のログ168の状
態)には、すべてのRMについて確定処理を行う。この
ような操作によれば、いずれの場合でも各RM間でデー
タの矛盾が生じることがなく、システムの信頼性は損な
われない。このように、本実施例は、システムダウンが
発生した場合でも、各リソース間のデータの一貫性を維
持したまま回復処理を行うことができる。
【0099】以上説明したように、本実施例は、前記第
1実施例に比べてTM・RM間の通信回数を減らすこと
ができる。また、トランザクションの正常処理時におい
て、各RMがコミット準備OKの作成及び格納を行わな
くてもよいため、各RMにおける処理時間を短縮するこ
とができる。また、本実施例によれば、正常処理時の総
処理ステップ数が前記第1実施例より少なくなるため、
正常処理時の全体的な処理時間を短縮することができ
る。通常、エラーの起こる確率は低いので、正常処理時
の処理時間を短縮することは、システム全体としての処
理効率の向上に大きく貢献する。
1実施例に比べてTM・RM間の通信回数を減らすこと
ができる。また、トランザクションの正常処理時におい
て、各RMがコミット準備OKの作成及び格納を行わな
くてもよいため、各RMにおける処理時間を短縮するこ
とができる。また、本実施例によれば、正常処理時の総
処理ステップ数が前記第1実施例より少なくなるため、
正常処理時の全体的な処理時間を短縮することができ
る。通常、エラーの起こる確率は低いので、正常処理時
の処理時間を短縮することは、システム全体としての処
理効率の向上に大きく貢献する。
【0100】第4実施例 本発明の第4実施例は、前記第3実施例と同様にフェー
ズ1でデータの実更新を行うが、すべてのRMのフェー
ズ1の処理が成功した場合には、そのままそのトランザ
クションを終了し、RMのログバッファ等の解放処理は
次回のトランザクションの開始時に行う。
ズ1でデータの実更新を行うが、すべてのRMのフェー
ズ1の処理が成功した場合には、そのままそのトランザ
クションを終了し、RMのログバッファ等の解放処理は
次回のトランザクションの開始時に行う。
【0101】図7は、この発明の第4実施例の正常時の
処理の流れを示すフローチャートである。
処理の流れを示すフローチャートである。
【0102】図7のトランザクション処理において、A
PPのコミット要求(S20)からフェーズ1の結果を
判断する処理(S80)までは、前記第3実施例(図
6)と同じ処理である。
PPのコミット要求(S20)からフェーズ1の結果を
判断する処理(S80)までは、前記第3実施例(図
6)と同じ処理である。
【0103】その後、本実施例では、前記第3実施例と
異なり、TMは、RMのログバッファ及びロック管理テ
ーブルの解放を行わずにAPPに制御を返し、トランザ
クションを終了する。すなわち、本実施例では、TM
は、S80の判定の結果がすべてのRMについてOKの
ときには、TMログバッファ上のログ情報(S70で書
き込まれたもの)をメインメモリ等のメモリ上にいった
んセーブ(保存)する(S96)。その後、TMログバ
ッファ及びディスクのTMログ領域のログ情報のクリア
を行う(S81)。そして、TMは、正常終了を示す値
をアプリケーション(APP)に返し(S83)、これ
により一つのトランザクションを終了する。
異なり、TMは、RMのログバッファ及びロック管理テ
ーブルの解放を行わずにAPPに制御を返し、トランザ
クションを終了する。すなわち、本実施例では、TM
は、S80の判定の結果がすべてのRMについてOKの
ときには、TMログバッファ上のログ情報(S70で書
き込まれたもの)をメインメモリ等のメモリ上にいった
んセーブ(保存)する(S96)。その後、TMログバ
ッファ及びディスクのTMログ領域のログ情報のクリア
を行う(S81)。そして、TMは、正常終了を示す値
をアプリケーション(APP)に返し(S83)、これ
により一つのトランザクションを終了する。
【0104】そして、その後APPにおいて別のトラン
ザクションが発生したとき(S61d)には、まずTM
において、前記メモリ上の所定領域に前回トランザクシ
ョンの際にセーブされたTMログ情報が存在するかチェ
ックを行う(S62d)。このケースでは、前回トラン
ザクションのTMログ情報が存在するので、TMは、こ
のTMログ情報を各RMに対するトランザクションの開
始要求の際に送信する通知情報に付加する(S63
d)。その後、TMは、前回トランザクションのTMロ
グ情報をクリアし(S64d)、TMログ情報の付加さ
れた通知情報を含んだトランザクション開始要求を各R
Mに通知する(S65d)。
ザクションが発生したとき(S61d)には、まずTM
において、前記メモリ上の所定領域に前回トランザクシ
ョンの際にセーブされたTMログ情報が存在するかチェ
ックを行う(S62d)。このケースでは、前回トラン
ザクションのTMログ情報が存在するので、TMは、こ
のTMログ情報を各RMに対するトランザクションの開
始要求の際に送信する通知情報に付加する(S63
d)。その後、TMは、前回トランザクションのTMロ
グ情報をクリアし(S64d)、TMログ情報の付加さ
れた通知情報を含んだトランザクション開始要求を各R
Mに通知する(S65d)。
【0105】トランザクションの開始要求を受けとった
各RMでは、通知情報を調べてTMログ情報の有無をチ
ェックし(S66d,S68d)、TMログ情報が存在
していた場合には、保持していたログバッファの解放
(S33d,S38d)とロックの解放(S34d,S
39d)を行う。各RMは、以上の処理によりログバッ
ファ及びロック管理テーブルを初期化した後で、通常ど
おりのトランザクションの開始処理を行う(S67d,
S69d)。
各RMでは、通知情報を調べてTMログ情報の有無をチ
ェックし(S66d,S68d)、TMログ情報が存在
していた場合には、保持していたログバッファの解放
(S33d,S38d)とロックの解放(S34d,S
39d)を行う。各RMは、以上の処理によりログバッ
ファ及びロック管理テーブルを初期化した後で、通常ど
おりのトランザクションの開始処理を行う(S67d,
S69d)。
【0106】以上の処理を行うことにより、本実施例で
は、正常処理の場合は、ログバッファ等の解放のための
通信を次回トランザクションの開始時の通信に含めてし
まうことにより、ログバッファ等の解放処理のためのT
MからRMへの通信を行う必要がなくなるので、TMと
各RMとの間の通信量を減らすことが可能である。
は、正常処理の場合は、ログバッファ等の解放のための
通信を次回トランザクションの開始時の通信に含めてし
まうことにより、ログバッファ等の解放処理のためのT
MからRMへの通信を行う必要がなくなるので、TMと
各RMとの間の通信量を減らすことが可能である。
【0107】なお、本実施例において、コミット可否確
認時(S72,S76)に一部のRMがコミット処理不
可となった場合、及びシステムダウンが起こった場合
は、前述の第3実施例と同様の処理の流れにより、それ
ぞれ正常に回復処理がなされ、各リソース間のデータの
一貫性が維持される。
認時(S72,S76)に一部のRMがコミット処理不
可となった場合、及びシステムダウンが起こった場合
は、前述の第3実施例と同様の処理の流れにより、それ
ぞれ正常に回復処理がなされ、各リソース間のデータの
一貫性が維持される。
【0108】また、本実施例において、データ部の実更
新処理時にエラーが起こった場合は、前記第3実施例の
場合と同様にしてロールバック処理が行われる(図6参
照)。
新処理時にエラーが起こった場合は、前記第3実施例の
場合と同様にしてロールバック処理が行われる(図6参
照)。
【0109】以上説明したように、本発明の上記各実施
例は、データの実更新のフェーズの後に、この実更新時
にエラーが起こっていないかどうかを判断するステップ
を設け、ログバッファやロック管理テーブルの解放処理
をこの判断ステップの後に行う方式としたことにより、
一部のRMにおいてデータ部の実更新時にエラーが起こ
った場合でも、他のデータの実更新を終了したRMのロ
グバッファ等はその時点ではまだ保持されているため、
それらログバッファ等のデータを用いることにより、実
更新が終了したRMのロールバック処理を行うことがで
きる。従って、上記各実施例によれば、トランザクショ
ンの一連のコミット処理において、データの実更新処理
時にエラーが生じた場合でも、各リソース間のデータの
一貫性を維持することができる。
例は、データの実更新のフェーズの後に、この実更新時
にエラーが起こっていないかどうかを判断するステップ
を設け、ログバッファやロック管理テーブルの解放処理
をこの判断ステップの後に行う方式としたことにより、
一部のRMにおいてデータ部の実更新時にエラーが起こ
った場合でも、他のデータの実更新を終了したRMのロ
グバッファ等はその時点ではまだ保持されているため、
それらログバッファ等のデータを用いることにより、実
更新が終了したRMのロールバック処理を行うことがで
きる。従って、上記各実施例によれば、トランザクショ
ンの一連のコミット処理において、データの実更新処理
時にエラーが生じた場合でも、各リソース間のデータの
一貫性を維持することができる。
【0110】なお、以上の各実施例の説明では、説明を
簡略化するためRMの個数を2つとして説明したが、本
実施例は、このような場合に限らず、更に多数のRMが
存在する場合においても同様の効果が得られる。
簡略化するためRMの個数を2つとして説明したが、本
実施例は、このような場合に限らず、更に多数のRMが
存在する場合においても同様の効果が得られる。
【0111】
【発明の効果】以上説明したように、本発明によれば、
一部のRMにおいてデータ部の実更新時にエラーが起こ
り、そのRMがロールバックした場合でも、他のデータ
の実更新を終了したRMのログバッファやロック管理テ
ーブル等のロールバック情報保持用リソースはその時点
ではまだ解放されずに保持されているため、そのロール
バック情報保持用リソースのデータを用いることによ
り、実更新が終了したRMのロールバック処理を行うこ
とができる。従って、本発明によれば、トランザクショ
ンの一連のコミット処理において、データの実更新処理
時にエラーが生じた場合でも、各リソース間のデータの
一貫性を維持することができ、システムの信頼性を向上
させることができる。
一部のRMにおいてデータ部の実更新時にエラーが起こ
り、そのRMがロールバックした場合でも、他のデータ
の実更新を終了したRMのログバッファやロック管理テ
ーブル等のロールバック情報保持用リソースはその時点
ではまだ解放されずに保持されているため、そのロール
バック情報保持用リソースのデータを用いることによ
り、実更新が終了したRMのロールバック処理を行うこ
とができる。従って、本発明によれば、トランザクショ
ンの一連のコミット処理において、データの実更新処理
時にエラーが生じた場合でも、各リソース間のデータの
一貫性を維持することができ、システムの信頼性を向上
させることができる。
【0112】また、本発明によれば、TM・RM間の通
信回数を減らすことができ、ネットワーク通信によるオ
ーバーヘッドの影響を少なくするという効果が得られ
る。
信回数を減らすことができ、ネットワーク通信によるオ
ーバーヘッドの影響を少なくするという効果が得られ
る。
【図1】 本発明に係る分散トランザクション処理方法
が適用される分散システムの構成の一例を示す図であ
る。
が適用される分散システムの構成の一例を示す図であ
る。
【図2】 本発明の第1実施例の正常処理時の処理の流
れを示すフローチャートである。
れを示すフローチャートである。
【図3】 本発明の第1実施例においてデータ実更新時
にエラーが発生した場合の処理の流れを示すフローチャ
ートである。
にエラーが発生した場合の処理の流れを示すフローチャ
ートである。
【図4】 本発明の第2実施例の正常処理時の処理の流
れを示すフローチャートである。
れを示すフローチャートである。
【図5】 本発明の第3実施例の正常処理時の処理の流
れを示すフローチャートである。
れを示すフローチャートである。
【図6】 本発明の第3実施例においてデータ実更新時
にエラーが発生した場合の処理の流れを示すフローチャ
ートである。
にエラーが発生した場合の処理の流れを示すフローチャ
ートである。
【図7】 本発明の第4実施例の正常処理時の処理の流
れを示すフローチャートである。
れを示すフローチャートである。
【図8】 従来の2フェーズコミット処理における正常
処理の処理の流れを示すフローチャートである。
処理の処理の流れを示すフローチャートである。
【図9】 従来の2フェーズコミット処理において、フ
ェーズ1でエラーが発生した場合の処理の流れを示すフ
ローチャートである。
ェーズ1でエラーが発生した場合の処理の流れを示すフ
ローチャートである。
【図10】 従来の2フェーズコミット処理において、
フェーズ2のデータ実更新処理時にエラーが発生した場
合の処理の流れを示すフローチャートである。
フェーズ2のデータ実更新処理時にエラーが発生した場
合の処理の流れを示すフローチャートである。
【図11】 従来例及び第1実施例における正常処理時
のRM1についてのデータの変化の様子を示す図であ
る。
のRM1についてのデータの変化の様子を示す図であ
る。
【図12】 従来例及び第1実施例における正常処理時
のRM2についてのデータの変化の様子を示す図であ
る。
のRM2についてのデータの変化の様子を示す図であ
る。
【図13】 従来例及び第1実施例における正常処理時
のTMについてのデータの変化の様子を示す図である。
のTMについてのデータの変化の様子を示す図である。
【図14】 従来例においてフェーズ1でエラーが発生
した場合のRM1についてのデータの変化の様子を示す
図である。
した場合のRM1についてのデータの変化の様子を示す
図である。
【図15】 従来例及び第1実施例において、データ実
更新時にエラーが発生した場合のRM2についてのデー
タの変化の様子を示す図である。
更新時にエラーが発生した場合のRM2についてのデー
タの変化の様子を示す図である。
【図16】 第1実施例の処理においてデータ実更新時
にエラーが発生した場合のRM1についてのデータの変
化の様子を示す図である。
にエラーが発生した場合のRM1についてのデータの変
化の様子を示す図である。
【図17】 第3実施例の正常処理時のRM1について
のデータの変化の様子を示す図である。
のデータの変化の様子を示す図である。
【図18】 第3実施例の正常処理時のRM2について
のデータの変化の様子を示す図である。
のデータの変化の様子を示す図である。
【図19】 第3実施例におけるTMについてのデータ
の変化の様子を示す図である。
の変化の様子を示す図である。
【図20】 第3実施例のデータ実更新時にエラーが発
生した場合のRM1についてのデータの変化の様子を示
す図である。
生した場合のRM1についてのデータの変化の様子を示
す図である。
【図21】 第3実施例のデータ実更新時にエラーが発
生した場合のRM2についてのデータの変化の様子を示
す図である。
生した場合のRM2についてのデータの変化の様子を示
す図である。
1,2 データベース管理システム(RM)、3,4
ログバッファ、5,6データバッファ、7,8 ロック
管理テーブル、9,10 ログ領域、11,12 デー
タ領域、13 トランザクションマネージャ(TM)、
14 TMログバッファ、15 TMログ領域、16
アプリケーションプログラム(APP)。
ログバッファ、5,6データバッファ、7,8 ロック
管理テーブル、9,10 ログ領域、11,12 デー
タ領域、13 トランザクションマネージャ(TM)、
14 TMログバッファ、15 TMログ領域、16
アプリケーションプログラム(APP)。
Claims (4)
- 【請求項1】 データの記憶及び更新を行う複数のデー
タ記憶部と、各データ記憶部のロールバックに必要な情
報を保持するロールバック情報保持部と、前記複数のデ
ータ記憶部と通信を行ってトランザクション処理の管理
を行うトランザクション管理部と、このトランザクショ
ン管理部の処理に関するログを保持するトランザクショ
ンログ保持部と、を有する分散システムにおいて、トラ
ンザクション処理の終了時に、各データ記憶部について
コミット処理が可能か否かの確認を行い、すべてのデー
タ記憶部がコミット処理可能な場合にのみ各データ記憶
部のデータの実更新を行うことにより、複数のデータ記
憶部のデータの同期更新を保証する分散トランザクショ
ン処理方法であって、 各データ記憶部のデータ実更新処理の後に、トランザク
ション管理部にてすべてのデータ記憶部の実更新が成功
したか否かを判定し、 判定の結果すべてのデータ記憶部の実更新が成功であっ
た場合には、前記ロールバック情報保持部を解放してト
ランザクションを終了し、 判定の結果一つでも実更新が失敗したデータ記憶部があ
った場合には、当該実更新の失敗したデータ記憶部以外
のデータ記憶部において前記ロールバック情報保持部及
びトランザクションログ保持部の情報を用いてロールバ
ック処理を行い、このロールバック処理の後に前記ロー
ルバック情報保持部を解放してトランザクションを終了
することを特徴とする分散トランザクション処理方法。 - 【請求項2】 請求項1に記載の分散トランザクション
処理方法であって、 各データ記憶部についてのコミット処理の可否の確認の
前に、コミット処理の開始を示すログを前記トランザク
ションログ保持部に記憶し、 すべてのデータ記憶部の実更新が成功したか否かの判定
の結果、すべてのデータ記憶部の実更新が成功であった
ら、実更新が成功した旨を示すログをトランザクション
ログ保持部に記憶し、 分散システムに障害が発生した場合においてその障害か
ら回復したときには、各データ記憶部はトランザクショ
ンログ保持部を参照し、トランザクションログ保持部に
前記実更新が成功した旨を示すログが存在する場合には
各データ記憶部はコミット処理を続行して前記ロールバ
ック情報保持部を解放し、前記実更新が成功した旨を示
すログが存在せず前記コミット処理の開始を示すログが
存在する場合には各データ記憶部はロールバック処理を
行ったのち前記ロールバック情報保持部を解放すること
を特徴とする分散トランザクション処理方法。 - 【請求項3】 データの記憶及び更新を行う複数のデー
タ記憶部と、各データ記憶部が行った処理に関するログ
を保持するロールバック情報保持部と、前記複数のデー
タ記憶部と通信を行ってトランザクション処理の管理を
行うトランザクション管理部と、このトランザクション
管理部の処理に関するログを保持するトランザクション
ログ保持部と、を有する分散システムにおいて、トラン
ザクション処理の終了時に、各データ記憶部についてコ
ミット処理が可能か否かの確認を行い、すべてのデータ
記憶部がコミット処理可能な場合にのみ各データ記憶部
のデータの実更新を行うことにより、複数のデータ記憶
部のデータの同期更新を保証する分散トランザクション
処理方法であって、 各データ記憶部のデータ実更新処理の後に、トランザク
ション管理部にてすべてのデータ記憶部の実更新が成功
したか否かを判定し、 判定の結果一つでも実更新が失敗したデータ記憶部があ
った場合には、当該実更新の失敗したデータ記憶部以外
のデータ記憶部において前記ロールバック情報保持部の
情報を用いてロールバック処理を行い、このロールバッ
ク処理の後に前記ロールバック情報保持部を解放してト
ランザクションを終了し、 判定の結果すべてのデータ記憶部の実更新が成功であっ
た場合には、このトランザクションに関する前記ロール
バック情報保持部の情報を保持したままトランザクショ
ンを終了し、次のトランザクションの開始時におけるト
ランザクション管理部からデータ記憶部へのトランザク
ション開始指示と同時に当該ロールバック情報保持部の
解放指示を行い、この解放指示に従って前記ロールバッ
ク情報保持部を解放することを特徴とする分散トランザ
クション処理方法。 - 【請求項4】 請求項3に記載の分散トランザクション
処理方法であって、 各データ記憶部についてのコミット処理の可否の確認の
前に、コミット処理の開始を示すログを前記トランザク
ションログ保持部に記憶し、 すべてのデータ記憶部の実更新が成功したか否かの判定
の結果、すべてのデータ記憶部の実更新が成功であった
ら、実更新が成功した旨を示すログをトランザクション
ログ保持部に記憶し、 分散システムに障害が発生した場合においてその障害か
ら回復したときに、各データ記憶部は、トランザクショ
ンログ保持部を参照し、トランザクションログ保持部に
前記実更新が成功した旨を示すログが存在せず前記コミ
ット処理の開始を示すログが存在する場合には各データ
記憶部はロールバック処理を行ったのち前記ロールバッ
ク情報保持部を解放し、前記実更新が成功した旨を示す
ログが存在する場合には各データ記憶部はコミット処理
を続行して前記ロールバック情報保持部を解放せずにト
ランザクションを終了し次のトランザクションの開始時
に前記ロールバック情報保持部を解放することを特徴と
する分散トランザクション処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7087982A JPH08286964A (ja) | 1995-04-13 | 1995-04-13 | 分散トランザクション処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7087982A JPH08286964A (ja) | 1995-04-13 | 1995-04-13 | 分散トランザクション処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH08286964A true JPH08286964A (ja) | 1996-11-01 |
Family
ID=13930032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP7087982A Pending JPH08286964A (ja) | 1995-04-13 | 1995-04-13 | 分散トランザクション処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH08286964A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002019252A (ja) * | 2000-07-13 | 2002-01-23 | Tohoku Ricoh Co Ltd | 印刷装置及び印刷方法 |
KR20020037399A (ko) * | 2000-11-14 | 2002-05-21 | 구자홍 | 데이터베이스 관리시스템의 트랜잭션처리방법 |
JP2003263356A (ja) * | 2002-03-11 | 2003-09-19 | Toyota Motor Corp | クライアント、クライアント・サーバ・システム、サーバ、プログラム、記録媒体及びデータ制御方法 |
JP2010157202A (ja) * | 2008-12-31 | 2010-07-15 | Sap Ag | 分散トランザクション回復システムおよび方法 |
US8572047B2 (en) | 2008-09-17 | 2013-10-29 | Fujitsu Limited | Method and system for data update synchronization by two-phase commit |
CN106033437A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
-
1995
- 1995-04-13 JP JP7087982A patent/JPH08286964A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002019252A (ja) * | 2000-07-13 | 2002-01-23 | Tohoku Ricoh Co Ltd | 印刷装置及び印刷方法 |
KR20020037399A (ko) * | 2000-11-14 | 2002-05-21 | 구자홍 | 데이터베이스 관리시스템의 트랜잭션처리방법 |
JP2003263356A (ja) * | 2002-03-11 | 2003-09-19 | Toyota Motor Corp | クライアント、クライアント・サーバ・システム、サーバ、プログラム、記録媒体及びデータ制御方法 |
US8572047B2 (en) | 2008-09-17 | 2013-10-29 | Fujitsu Limited | Method and system for data update synchronization by two-phase commit |
JP2010157202A (ja) * | 2008-12-31 | 2010-07-15 | Sap Ag | 分散トランザクション回復システムおよび方法 |
CN106033437A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7107294B2 (en) | Method and apparatus for interrupting updates to a database to provide read-only access | |
US5923833A (en) | Restart and recovery of OMG-compliant transaction systems | |
AU711220B2 (en) | Method of commitment in a distributed database transaction | |
US5201044A (en) | Data processing method for file status recovery includes providing a log file of atomic transactions that may span both volatile and non volatile memory | |
US6493826B1 (en) | Method and system for fault tolerant transaction-oriented data processing system | |
JP4049293B2 (ja) | 情報システムにおいて一貫性を維持するためのトランザクションシステム及び方法 | |
CN113396407A (zh) | 用于利用区块链技术扩充数据库应用的系统和方法 | |
US5724581A (en) | Data base management system for recovering from an abnormal condition | |
US6205449B1 (en) | System and method for providing hot spare redundancy and recovery for a very large database management system | |
JP3140906B2 (ja) | システムファイルの更新及び復元方法 | |
US5832517A (en) | System logging using embedded database | |
JP3094888B2 (ja) | 採番機構、データ整合性確認機構、トランザクション再実行機構及び分散トランザクション処理システム | |
US20060095478A1 (en) | Consistent reintegration a failed primary instance | |
JPS62105247A (ja) | デ−タ・ベ−ス・システムの管理方法 | |
JPS633341B2 (ja) | ||
CN111753013A (zh) | 分布式事务处理方法及装置 | |
US6526417B1 (en) | System and method for change accumulation unmerged update reduction | |
JPH08286964A (ja) | 分散トランザクション処理方法 | |
US6848037B2 (en) | Data processing arrangement and method | |
US5530800A (en) | Method for relations recovery of a data base in case of errors | |
JPH08235043A (ja) | 協調型分散システム | |
US12093139B2 (en) | Rolling back a database transaction | |
JP2000315190A (ja) | ジョブのリカバリ方式 | |
JP2003050720A (ja) | オンラインシステムにおける情報取得方法およびプログラムおよび該プログラムを記録した計算機で読み取り可能な記録媒体 | |
KR20010057731A (ko) | 분산객체 시스템에서의 자원객체 복구방법 |