JP2007241325A - 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム - Google Patents
多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム Download PDFInfo
- Publication number
- JP2007241325A JP2007241325A JP2004369841A JP2004369841A JP2007241325A JP 2007241325 A JP2007241325 A JP 2007241325A JP 2004369841 A JP2004369841 A JP 2004369841A JP 2004369841 A JP2004369841 A JP 2004369841A JP 2007241325 A JP2007241325 A JP 2007241325A
- Authority
- JP
- Japan
- Prior art keywords
- database server
- server
- database
- difference information
- processing
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】 複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供する。
【解決手段】 仲介装置200は、各サーバ100間における処理結果の矛盾又はサーバ100の無応答を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに、選定した応答以外の応答を返したサーバ100をシステムから切り離し、サーバ100の無応答を検出したら該無応答のサーバ100をシステムから切り離し、システムから切り離されたサーバ100とシステムに組み込まれている正常稼働中のサーバ100との同期化処理を行い、同期化処理が完了したらシステムから切り離されたサーバ100を再びシステムに組み込む。
【選択図】 図1
【解決手段】 仲介装置200は、各サーバ100間における処理結果の矛盾又はサーバ100の無応答を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに、選定した応答以外の応答を返したサーバ100をシステムから切り離し、サーバ100の無応答を検出したら該無応答のサーバ100をシステムから切り離し、システムから切り離されたサーバ100とシステムに組み込まれている正常稼働中のサーバ100との同期化処理を行い、同期化処理が完了したらシステムから切り離されたサーバ100を再びシステムに組み込む。
【選択図】 図1
Description
本発明は、複数のデータベースマネージメントシステム(DBMS)を並列動作させた多重化データベースシステムに関し、特に各データベース間の同期技術に関する。
従来の多重化データベースシステムは、例えば特許文献1に記載されたものが知られている。このシステムでは、図57に示すように、それぞれデータベースを備えた2つの計算機1010と計算機1020が通信回線により接続されている。各計算機1010と1020とは、いわゆる二相コミット制御によりデータベース間の同期が図られている。
計算機1010は、各種の業務処理を実行する応用プログラム1011と、データベース1014の検索及び更新の制御を行うとともにトランザクションモニタ1013を介して他の計算機1020のデータベース1024における更新処理との同期を取るデータベース管理システム1012と、いわゆる二相コミット制御によってデータベース1014と1024の更新処理の同期をとるトランザクションモニタ1013とから構成される。計算機1020についても計算機1010と同様に、応用プログラム1021と、データベース管理システム1022と、トランザクションモニタ1023とから構成されている。
本システムにおいて、計算機1010のデータベース1014と計算機1020のデータベース1024で同じデータを保持し、更新があった場合でも両方のデータベース1014と1024に同じ更新が反映される処理手順について説明する。
応用プログラム1011は、あるトランザクション内でデータベース1014と1024を同一クエリで更新する。データベース1014は、データベース管理システム1012が更新し、データベース1024はデータベース管理システム1022が更新する。
そして、応用プログラム1011は、トランザクションの最後に今までの更新を確定する「COMMIT要求」又は今までの更新を取り消す「ROLLBACK要求」を発行する。「COMMIT要求」又は「ROLLBACK要求」は、トランザクションモニタ1013によってデータベース管理システム1012と、トランザクションモニタ1023を経由してデータベース管理システム1022へ送られる。
例えば、トランザクションモニタ1013が「COMMIT要求」を転送した場合、データベース管理システム1012と1022は、COMMIT実行の可否をトランザクションモニタ1013へ返答する。この際、データベース管理システム1012と1022は実際にはCOMMITを実行せず、実行の可否のみを答えるのみである。
トランザクションモニタ1013及び1023は、データベース管理システム1012及び1022の双方から「COMMIT可」の応答を受け取ると、それぞれデータベース管理システム1012及び1022に「COMMIT実行」を送信する。「COMMIT実行」を受け取ったデータベース管理システム10112と1022は、実際にCOMMITを実行する。
一方、例えばトランザクションモニタ1013が、データベース管理システム1012又は1022の一方から「COMMIT不可」の応答を受け取った場合、他方の応答が「COMMIT可」であったとしても、データベース管理システム1012と1022に対して「ROLLBACK実行」を送信し、トランザクションをキャンセルする。「ROLLBACK実行」を受け取ったデータベース管理システム1012と1022は、実際にROLLBACKを実行する。
以上のようにして、どちらか一方のデータベースだけ更新が反映されることを防ぎ、両方のデータベースに対して常に同一の更新が行われるようにすることで、データベース間の同期を保つ。
特開平6−161862号公報
しかしながら、上述の従来技術は、複数のデータベースにおける一トランザクションのデータベースの同期を図る方法であって、複数のトランザクション間でのデータベースの同期を制御することはできない。つまり、複数のトランザクションが並行に実行されている状態で、且つ、それらのトランザクションが同一のテーブルの同一行にほぼ同時にアクセスした場合には、データベースの同期が崩れたり、クライアントへ返す返答が一意に決まらないなどの問題が生じる。この問題点について以下に具体的に例示する。
図58に示すtest_tableという名前のテーブルを考える。この時、図59に示すトランザクションT1及びT2がほぼ同時に実行される場合を考える。トランザクションT1はid=101の行を更新し、トランザクションT2はid=101の行とid=102の行を更新する。どちらのトランザクションのUPDATEが先に実行されるかによって、id=101の値は異なってしまう。
2つのトランザクション中のUPDATEが実行される順序は以下の2通りが考えられる。
(1)T1のUPDATEの後にT2のUPDATE
(2)T2のUPDATEの後にT1のUPDATE
(1)の場合、2つのトランザクション実行後にはT2のUPDATEの結果が残り、department=2となる。一方(2)の場合、2つのトランザクション実行後にはT1のUPDATEの結果が残り、department=1となる。すなわち、(1)と(2)では最終的なテーブルtest_tableのデータが異なる。
(2)T2のUPDATEの後にT1のUPDATE
(1)の場合、2つのトランザクション実行後にはT2のUPDATEの結果が残り、department=2となる。一方(2)の場合、2つのトランザクション実行後にはT1のUPDATEの結果が残り、department=1となる。すなわち、(1)と(2)では最終的なテーブルtest_tableのデータが異なる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSでは(1)の順で実行し、別のDBMSは(2)の順で実行した場合、2つのデータベースは同期状態(同じデータを保持している状態)が崩れてしまう問題が発生する。
また、別の例として、図60に示すトランザクションT3及びT4がほぼ同時に実行される場合を考える。トランザクションT4のSELECTがトランザクションT3のCOMMITの前に実行されるか又は後に実行されるかで、トランザクションT4のSELECTで得られる値は異なってしまう。
トランザクションT4のSELECTとトランザクションT3のCOMMITが実行される順序は以下の2通りが考えられる。
(3)T4のSELECTの後にT3のCOMMIT
(4)T3のCOMMITの後にT4のSELECT
(3)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映されていない古い値department=3が得られる。一方(4)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映された値department=1が得られる。
(4)T3のCOMMITの後にT4のSELECT
(3)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映されていない古い値department=3が得られる。一方(4)の場合、トランザクションT4のSELECT実行後には、トランザクションT3のUPDATEが反映された値department=1が得られる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSは(3)の順で実行し、別のDBMSは(4)の順で実行した場合、得られる値が異なってしまう。
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供することにある。
本願発明は、複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける各データベースの同期化処理に関するものである。
ところで、各データベースサーバにおいて複数のトランザクションが並行して処理され、しかも各データベースサーバでトランザクション内での処理要求が互いに異なる順番で処理されると、仲介装置側からは、(1)あるデータベースサーバからの応答はあるが他のデータベースサーバからの応答はない、又は、(2)あるデータベースサーバからの応答と他のデータベースサーバからの応答とが矛盾している(異なっている)、と認識される場合がある。
そこで、本願発明では、仲介装置は、(a)データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、(b)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、(c)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む。
これにより、あるデータベースサーバからの応答はあるが他のデータベースからの応答がない場合には、当該応答のないデータベースサーバがシステムから切り離される。すなわち、各データベースサーバ間で処理要求の処理順序が異なり各データベースサーバ間で非同期になった(各データベースサーバ間で同一であるはずのデータが同一でなくなった)可能性を検出すると、あるデータベースサーバを基準として該データベースサーバと非同期になった可能性のあるデータベースサーバがシステムから切り離される。そして、正常稼働中のデータベースサーバとシステムから切り離されたデータベースサーバとの同期化処理が行われ、同期化処理が完了するとシステムから切り離されたデータベースサーバが再びシステムに組み込まれる。これにより、各データベースサーバの同期化が図られる。
また、本願発明では、仲介装置は、(i)各データベースサーバ間における処理結果の矛盾を検出し、(j)処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、(k)選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、(l)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、(m)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む。
これにより、あるデータベースサーバからの応答と他のデータベースサーバからの応答とが矛盾している場合には、各応答の中から1つの応答が選定され、選定された応答以外の応答を返したデータベースサーバがシステムから切り離される。すなわち、各データベースサーバ間で処理要求の処理順序が異なっている可能性又は何らかの原因で各データベースサーバ間で非同期になった(各データベースサーバ間で同一であるはずのデータが同一でなくなった)可能性を検出すると、あるデータベースサーバを基準として該データベースサーバと非同期になった可能性のあるデータベースサーバがシステムから切り離される。そして、正常稼働中のデータベースサーバとシステムから切り離されたデータベースサーバとの同期化処理が行われ、同期化処理が完了するとシステムから切り離されたデータベースサーバが再びシステムに組み込まれる。これにより、各データベースサーバの同期化が図られる。
上記同期化処理においては、仲介装置にクライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を設け、データベースサーバがシステムから切り離されている間にクライアントコンピュータから受信した処理要求を差分情報として記憶する。また、正常稼働中のデータベースサーバにおいてスナップショットを作成し、システムから切り離されたデータベースサーバは該スナップショットからデータベースを復元する。その後に、前記差分情報記憶部に記憶されてた差分情報を処理することで各データベースサーバの同期化が図れる。
ところで、このような同期化処理においては仲介装置から送出された差分情報についても、前述したような処理順序の問題が生じる恐れが考えられる。すなわち、差分情報の処理を行うデータベースサーバと、当該差分情報を蓄積中に処理要求を処理した正常稼働中のデータベースサーバとでは、処理順序が異なる場合が考えられる。
そこで、本願発明では、仲介装置は、差分情報として記憶した処理要求について、正常稼働中のデータベースサーバで処理した当該処理要求に対する処理結果を、差分情報とともに記憶しておく。そして、差分情報を送出したデータベースサーバから当該差分情報の処理に対する処理結果を受信すると、該処理結果と差分情報とともに記憶した処理結果とを比較し、両者が一致しない場合には同期化処理を再試行する。このような処理により、データベースサーバの同期化をより確実に実施できる。
なお、ここでシステムへのデータベースサーバの組み込みとは、多重化データベースシステムを構成するデータベースサーバとして機能するよう仲介装置が当該データベースサーバを取り扱うようにすることを意味する。また、システムからのデータベースサーバからの切り離しとは、多重化データベースシステムを構成するデータベースサーバとして機能しないよう仲介装置が当該データベースサーバを取り扱うようにすることを意味する。したがって、システムに組み込まれているデータベースサーバにはクライアントコンピュータからの処理要求が仲介装置を介して届くが、システムから切り離されたデータベースサーバにはクライアントコンピュータからの処理要求が届かない状態となる。なお、データベースサーバがシステムに組み込まれていること又は切り離されていることと、データベースサーバが仲介装置と通信可能又は不能であることとは無関係である点に留意されたい。つまり、データベースサーバと仲介装置が通信可能な状態にある場合であっても、データベースサーバがシステムに組み込まれていない場合もあり得る。
以上説明したように本発明によれば、複数のトランザクションを並行処理することにより各データベースサーバ間で矛盾が生じても、各データベースサーバの同期化が図られるので当該矛盾を解消できる。また、各データベースサーバの同期を維持するための制御処理は、専ら仲介装置やデータベースと仲介装置間に設けた制御部でのみ実施するので、データベースそのものは従来の既存のものを無改造で利用できる。さらに、各データベースサーバでは同期を保つために全てのデータベースで同じ順序で更新されることを保証する処理、つまり、更新クエリの順序制御やスケジューリング、それらを実現するためのサーバ間通信、順序制御が失敗した場合のロールバックなどの処理を行う必要がないので、当該処理に伴う処理負荷の増加を防止できる。
(第1の実施の形態)
本発明の第1の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。図1は本実施の形態に係る多重化データベースシステムの全体構成を説明するブロック図である。
本発明の第1の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。図1は本実施の形態に係る多重化データベースシステムの全体構成を説明するブロック図である。
この多重化データベースシステムは、図1に示すように、複数のデータベースサーバ(以下「サーバ」と言う)100と仲介装置200とをネットワーク300で接続したものであり、ネットワーク400を介して1以上のクライアントコンピュータ(以下「クライアント」と言う)500及びデータベース一致検査装置600からアクセスされるものである。本実施の形態では、図1に示すように、2台のサーバ100a及び100bを有しており、2台のクライアント500a及び500bからアクセスされる。以降の説明において各サーバ100を他のサーバ100と区別する場合には添え字「a」「b」を付加するものとする。クライアント500についても同様である。なお、図1の例では、サーバ100とクライアント500はそれぞれ別々のネットワーク300,400に接続されているが、同じネットワークに接続されていてもよい。
図1に示すように、仲介装置200は、ネットワーク400側にIPアドレス172.17.1.1を持っており、これをデータベースサーバのIPアドレスとして公開している。クライアント500やデータベース一致検査装置600はデータベースにアクセスしたいときはIPアドレス172.17.1.1へクエリを送信し、IPアドレス172.17.1.1の仲介装置200からそのクエリに対する応答パケットを受信する。これは、クライアント500等にとっては、IPアドレス172.17.1.1を持ったデータベースサーバとパケットを送受信していることと同じである。このIPアドレス172.17.1.1を持った仮想的なデータベースサーバを仮想サーバ800と呼ぶ。この仮想サーバ800の目的は、サーバ100が冗長化されていることを隠蔽するためである。つまり、サーバ100aとサーバ100b両方が稼働していようとサーバ100bがダウンしてサーバ100aのみが稼働していようとサーバ100aとサーバ100bの他に新たなサーバが追加されようとクライアントには影響は無く、動作を変更する必要がない。
サーバ100は、データを保存・管理するデータベース101と、データベース101の動作を制御するデータベース制御部102とを備えている。
データベース101は、SQL(Structured Query Language)を解して処理を行うRDBMS(Relational Database Management System)である。このようなデータベース101としては種々のものがあり、例えばThe PostgreSQL Global Development GroupによるPostgreSQL(http://www.postgres.org/)や、Oracle社によるOracle(登録商標)(http://www.oracle.com)などが挙げられる。
データベース制御部102は、ネットワーク300を介して仲介装置200から送られてくるパケットに基づき動作する。このパケットは、SQLなどデータベース101での処理に係るもの、同期化処理に係るものに大別される。SQLなどデータベース101での処理に係るものについては、データベース制御部102は、当該パケットをデータベース101に渡し、データベース101からの処理結果を仲介装置200に返す。
一方、同期化処理に係るものは、さらに、自身が本システムに組み込まれている場合のものと、起動時や障害復旧時などこれからシステムに組み込む場合のものとに別れる。前者については、スナップショットの作成指示(同期化指示)がある。データベース制御部102は、スナップショット作成指示を仲介装置200から受信すると、データベース101のスナップショットを作成する。そして、スナップショットの作成が完了すると、スナップショット作成完了を仲介装置200に通知する。そして、作成したスナップショットを、スナップショット作成指示で指示されている転送先の他のサーバ100に転送する。ここで、スナップショットとは、その作成開始時点で確定している(COMMITされている)データベース全体の複製データやデータベースを復元するために必要なデータを意味する。したがって、スナップショットには、作成開始時点でCOMMITされていないデータは含まれないことに留意すべきである。
他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部102は、他のデータベースからスナップショットを受信すると、このスナップショットを用いて自身のデータベース101を復元する。データベース101の復元が完了すると仲介装置200に対して差分情報転送要求を送出する。後述するように、差分情報転送要求に応じて仲介装置200から差分情報が転送されるので、この差分情報を用いてデータベース101を復元する。この差分情報とは、仲介装置200がクライアント500から受信したクエリのうち前記スナップショットに反映されていないものであり、仲介装置200において記憶蓄積したものである。
また、データベース制御部102は、仲介装置200から再起動指示を受信すると、データベース101及びデータベース制御部102の再起動を行う。この再起動処理は、データベース101及びデータベース制御部102のプロセスの再起動のみを行ってもよく、データベース101及びデータベース制御部102がサーバ100の起動時に自動起動するように設定されていればサーバ100全体の再起動でもよい。さらに、データベース制御部102は、自身が起動(再起動を含む)されると、仲介装置200に対してデータベース同期化要求(システムへの組込要求)を送信する。
仲介装置200は、図2に示すように、本システム内のサーバ100を管理するサーバ管理表201と、トランザクションを管理するトランザクション管理表202と、サーバ100に送信するクエリを一時保存する送信キュー203と、クライアント500及びデータベース一致検査装置600からの受信したクエリを送信キュー203に投入する受信クエリ処理部204と、送信キュー203からクエリを取り出してサーバ100に送信するクエリ送信処理部205と、クエリ送信処理部205で送信したクエリに対する各サーバ100からの応答の正当性を判定する正当性判定部206と、正当性判定部206で正当と判定された応答を要求元のクライアント500等に送信する応答送信処理部207と、各サーバ100間の同期化処理を制御する同期化処理制御部208とを備えている。
サーバ管理表201は、サーバが正常稼働中でクエリの処理が可能であるか(active)、同期化処理中であるか(sync)、サーバが正常稼働中でクエリの処理が可能であり且つ同期化処理中であるか(active+sync)という状態情報を保存している。また、サーバ100がシステムから切り離された場合には、当該サーバ100についてのエントリはサーバ管理表201から削除される。図3にサーバ管理表の一例を示す。サーバ管理表201は、図3に示すように、サーバ100を識別するためのサーバIDと、サーバの稼働状態から構成されている。図3の例では、サーバ100aとサーバ100bとが登録されており、稼働状態は共に正常稼働を示すactiveである。また、本実施形態では、サーバIDとしてサーバ100に付されたIPアドレスを用いた。
トランザクション管理表202は、現在実行中の又は実行開始を保留されているトランザクションの有無を記憶する。図4にトランザクション管理表202の一例を示す。図4に示すように、トランザクション管理表202は、クライアントを一意に識別するクライアントIDとトランザクションを一意に識別するトランザクションIDから構成される。これらのペアは、受信クエリ処理部204がトランザクション開始時にトランザクション管理表202に登録し、応答送信処理部207がトランザクション終了時にトランザクション管理表202から削除する。クライアントIDは、例えばクライアント500等のIPアドレスやポート番号である。トランザクションIDは新しいトランザクションが発生する毎に受信クエリ処理部204が新たに割り振る。
送信キュー203は、クライアント500等から受信したクエリをサーバ100に送信する際の送信バッファとしての機能を有するとともに、同期化処理時にクライアント500から受信したクエリを差分情報として記憶蓄積する機能とを有するものである。
送信キュー203のデータ構造について図5を参照して説明する。送信キュー203は、クライアント500から受信したクエリの内容と、そのクエリの属するトランザクションIDと、各サーバ100への送信状態と、当該クエリが正常稼働中のサーバ100で処理された場合の当該処理結果を記憶する。トランザクションIDは、トランザクション管理表202から取得される。各サーバ100への送信状態は、システムに属する各サーバ100毎に記憶される。
送信キュー203の各サーバ100への送信状態は、「未送信」,「送信完了」,「保留」,「保留解除」の4つの値を取りうる。「未送信」は、特に保留することなく当該サーバ100に送信予定であるが未だ送信されていない状態である。「送信完了」は、当該サーバ100への送信が完了した状態である。「保留」は、サーバ100のシステムへの組み込み処理中に、当該サーバ100へ転送されることなく保留されている状態である。「保留解除」は、「保留」状態が解除されたが未送信の状態である。送信キュー203の各エントリは、全てのサーバ100についての送信状態が「送信完了」になり、且つ、当該クエリの属するトランザクションが終了すると送信キュー203から削除される。
受信クエリ処理部204は、クライアント500及びデータベース一致検査装置600からのクエリをネットワーク400経由で受信すると、当該クエリを解析して新規トランザクションの開始を検出した場合にはトランザクション管理表202に該トランザクションを登録するとともに、サーバ管理表201を参照して受信クエリを送信キュー203に投入する。
受信クエリ処理部204が新規トランザクションの開始を検出する方法は、DBMSの種類によって異なる。例えば前述のPostgreSQLの場合は、トランザクションの開始はクライアント500等が「BEGIN」というSQLを送信した時であり、トランザクションの終了はクライアント500等が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、Oracleの場合は、トランザクションの開始はクライアント500等が有効なSQLを送信したときであり(明示的なトランザクションの開始を宣言するSQLは無い)、トランザクションの終了はクライアント500等が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、サーバ100がAUTO COMMITモードで動作する場合には、クライアント500等から受信したSQL文はそれぞれ1つの独立したトランザクションに属していると解釈できるので、クライアント500等からSQLを受信する毎に、該SQL実行前にトランザクションが開始されるとともにSQL実行後に当該トランザクションが終了したこととして扱うことができる。
受信クエリ処理部204が受信クエリを送信キュー203に投入する際には以下のようにして各サーバ100についての送信状態を設定する。サーバ管理表201のサーバ稼働状態が「active」である場合には、当該サーバ100については送信状態を「未送信」とする。また、サーバ管理表201のサーバ稼働状態が「sync」又は「active+sync」の場合であって、当該サーバ100に対するクエリの転送処理が未だ始まっていない場合には、当該サーバ100については送信状態を「保留」とする。すなわち、本実施の形態では、受信クエリを「保留」として送信キュー203に記憶することにより、差分情報の蓄積を図っている。また、サーバ管理表201のサーバ稼働状態が「sync」又は「active+sync」の場合であって、当該サーバ100に対するクエリの転送処理が始まっている場合には、当該サーバ100については送信状態を「保留解除」とする。
クエリ送信処理部205は、送信キュー203を監視して、該送信キュー203に送信状態が「未送信」又は「保留解除」となっているクエリを古いものから順に取り出し、対象となるサーバ100に対して送信するとともに、送信キュー203の送信状態を「送信完了」に更新する。
正当性判定部206は、クエリ送信処理部205で各サーバ100に送信したクエリに対する応答を受信して当該応答の正当性を判定する。この正当性の判定は、当該応答の送信元のサーバ100の稼働状態が「active」又は「active+sync」であるものに係る場合には、後述の第1の正当性判定方法により1つ以上の応答から1つの応答を選定する。他方、当該応答の送信元のサーバ100の稼働状態が「sync」であるものに係る場合には、後述の第2の正当性判定方法により当該応答の正当性を判定する。
第1の正当性判定について説明する。この第1の正当性判定は、一台以上のサーバ100間でのクエリ処理の正当性を判定するものである。具体的には、サーバ100が3台以上ある場合には多数決で決める方法や、受信した応答を所定のルールに基づいて判断する方法がある。例えば、クライアント500からの「参照」要求に対して「更新成功」という応答が返ってきた場合、正常であればそのような応答はあり得ないので(参照成功など参照に関する応答のはず)、この応答は正しくないと判断する。また、当該応答に係るパケット中にデータ長フィールドがある場合、このデータ長フィールドの値と実際に受信したパケット長を比較し、異なる場合は正しくないと判断する。また、複数のサーバ100の中からMasterサーバを予め1台決めておき、このサーバ100からの応答を常に正しいと判断する。また、上記複数の方法を併用する方法もある。例えば、3台で多数決を行った結果、応答の中身が全てバラバラであり、多数派の応答を決められない場合はMasterサーバの応答を正しいと判断する。正常稼働しているサーバ100が1つだけの場合は、そのサーバ100からの応答を正常と判断する。なお、正常稼働しているサーバ100の台数はサーバ管理表201を参照することにより認識できる。正当性判定部206は、第1の正当性判定の結果、正当でない応答を返したサーバ100に対して再起動指示を送信するとともに、サーバ管理表201及び送信キュー203から該サーバ100についてのエントリを削除する。これにより、当該サーバ100にはクエリが送信されなくなるので、該サーバ100はシステムから切り離されたことになる。
第2の正当性判定について説明する。第2の正当性判定は、後述するように、同期化処理時に差分情報としてサーバ100に送信したクエリが、他の正常稼働中のサーバ100と同じ処理を行ったか否かを判定する。第2の正当性判定において判定対象となる応答は、該応答に係るクエリをクライアント500から受信した際に、該応答を返したサーバの稼働状態が「sync」となっていたために送信キュー203において一旦「保留」又は「保留解除」となっていたクエリに係るものである。そして、同クエリは、クライアント500から受信した際に、稼働状態が「active」又は「acrive+sync」である他のサーバ100において既に処理されている。後述するように、他のサーバ100で処理された当該クエリに対する応答(処理結果)は送信キュー203に保存されている。正当性判定部206は、サーバ100から受信した応答と、送信キュー203に保存されている応答とを比較することにより正当性を判定する。正当性判定部206は、第2の正当性判定の結果、正当でないと判定した場合、同期化処理を再試行するために当該サーバ100に対して再起動指示を送出する。
応答送信処理部207は、正当性判定部206において正当と判断された応答であって、該応答の送信元サーバ100の稼働状態が「active」又は「active+sync」の場合、当該応答の1つを処理要求元のクライアント500等に返すとともに、該応答を送信キュー203に送信結果として保存する。また、応答送信処理部207は、サーバ100から受信した応答がトランザクションの終了に係るものであるかを検出し、トランザクションの終了に係るものである場合には、当該トランザクションについてのエントリをトランザクション管理表202から削除する。また、応答送信処理部207は、終了したトランザクションに属するクエリであり且つ全てのサーバ100の送信状態が「送信完了」となったものを送信キュー203から削除する。また、応答送信処理部207は、「保留解除」のクエリが送信キュー203からなくなった場合には、「保留解除」となっていたサーバ100について、サーバ管理表201の稼働状態を「active」に更新する。これにより、当該サーバ100はシステムに組み込まれる。なお、システムへの組み込みのタイミングは、正常稼働中のサーバ100においてクエリの実行中であっても構わず、またトランザクションが継続中であっても構わない点に留意されたい。
同期化処理制御部208は、システム外のサーバ100(ここでは便宜上「新規サーバ100」と呼ぶ)をシステムに組み込む際に、該新規サーバ100とシステム内で正常稼働中のサーバとの同期化処理を制御する。ここで、新規サーバ100としては、システムに新たに追加するもの、一旦システムから切り離され再びシステムに組み込むものの双方が含まれる。
同期化処理制御部208は、新規サーバ100からデータベース同期化要求(システムの組み込み要求)を受信すると、(1)当該新規サーバ100について稼働状態を「sync」にしてサーバ管理表201に追加する、(2)送信キュー203の送信状態の欄に当該新規サーバ100についての列を追加する、(3)正常稼働中のサーバ100の中から同期化処理用のサーバを1台を選定して該サーバ100についてサーバ管理表201を更新するとともに、当該サーバ100について送信キュー203の送信状態が「未送信」となっているものは「保留」に更新する、(4)同期化処理用のサーバ100において実行中クエリの処理が完了するまで待機し、同期化処理用のサーバ100において実行中クエリの処理が完了したら該サーバ100に対してスナップショット作成指示を送出する、という処理を行う。同期化処理制御部208は、データの整合性を維持するために、前記(1)〜(4)の処理は1つの処理として取り扱い、排他制御を行う。つまり、同期化処理制御部208は、前記(1)〜(4)の処理を行っている間は、各処理でアクセスするサーバ管理表201及び送信キュー203に対して、他の機能ブロック(例えば受信クエリ処理部204など)からのアクセスを中断させる。
前記(2)において同期化処理制御部208は、送信キュー203にクエリが残っている場合には、そのクエリについての新規サーバ100の送信状態は「保留」とする。前述したように、送信キュー203のエントリは、トランザクションが終了した際に削除される。したがって、送信キュー203に残っているクエリは、トランザクションが終了していないクエリであり、前記(4)のスナップショット作成指示に呼応して同期化用のサーバ100で作成されるスナップショットには反映されないものである。前記(2)の処理では、このクエリについての送信状態を「保留」とすることで該クエリを差分情報として保持する。
前記(3)において同期化処理制御部208は、サーバ管理表201を参照して稼働状態が「active」であるサーバ100が1台の場合には、当該サーバ100についての稼働状態を「active+sync」に変更する。これは、当該サーバ100を、クライアント500からの処理要求を通常時と同様に処理するよう動作させるとともに、新規サーバ100の同期化処理用として動作させることを意味する。一方、稼働状態が「active」であるサーバ100が複数ある場合には、所定の選定規則に基づき一台のサーバ100を選定して、当該サーバ100についての稼働状態を「sync」に変更する。これは、当該サーバ100を、クライアント500からの処理要求に対する処理は行わず、専ら新規サーバ100の同期化処理用として動作させることを意味する。
前述したように、仲介装置200からスナップショット作成指示を受信した同期化処理用のサーバ100はスナップショットの作成を開始し、スナップショットの作成が完了すると仲介装置200に対してスナップショット作成完了通知を送信する。同期化処理制御部208は、同期化処理用のサーバ100からスナップショット作成完了通知を受信すると、送信キュー203に記憶されている同期化処理用サーバ100の欄の全てのクエリについて送信状態を「保留」から「保留解除」に変更する。これにより、クエリ送信処理部205が同期化処理用のサーバ100に対して差分情報としてクエリの送信を開始する。「保留解除」になっていたクエリの処理が全て終了すると、応答送信処理部207が、当該同期化処理用サーバ100について、サーバ管理表201の稼働状態を「active」に更新することにより、同期化処理用のサーバ100はシステムに組み込まれる。
また、前述したように、スナップショットの作成を完了した同期化用サーバ100は、新規サーバ100に当該スナップショットを転送し、新規サーバ100は当該スナップショットからデータベース101の復元を図る。そして、新規サーバ100は、データベース101の復元が完了すると、仲介装置200に差分情報転送要求を送出する。同期化処理制御部208は、新規サーバ100から差分情報転送要求を受信すると、送信キュー203に記憶されている新規サーバ100の欄の全てのクエリについて送信状態を「保留」から「保留解除」に変更する。これにより、クエリ送信処理部205が新規サーバ100に対して差分情報としてクエリの送信を開始する。「保留解除」になっていたクエリの処理が全て終了すると、応答送信処理部207が、当該新規サーバ100について、サーバ管理表201の稼働状態を「active」に更新することにより、新規サーバ100はシステムに組み込まれる。
クライアント500は、多重化データベースシステムに対して更新クエリ(データベースを更新するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)などを発行するものである。
データベース一致検査装置600は、クライアント500と同様に多重化データベースシステムのクライアントとして動作するものであり、各サーバ100のデータベース101が互いに一致しているか否かを確認するためのクエリを発行する。このクエリは、参照系のものであり、例えば所定のテーブルtest_tableに対する「SELECT * FROM test_table」などである。データベース一致検査装置600は、定期的に又はオペレータ等の指示に応じて当該検査用クエリの発行を行う。
次に、本実施の形態に係る多重化データベースシステムの動作について図面を参照して説明する。まず、サーバ100aと100bが正常に動作している場合の動作を図6から図8を参照して説明する。
初期状態では、データベース101aと101bは完全に同一であり、サーバ管理表201は図7のようになっているものとする。また、トランザクション管理表202と送信キュー203は空であるとする。各サーバ100a,100bには、テーブルtest_tableが存在しているとする。
クライアント500aが172.17.1.1宛にトランザクション開始SQLを含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS1)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS2)。図8にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを、サーバ管理表201を参照して正常稼働しているサーバ100(ここではサーバ100a及び100b)について送信状態を「未送信」にして送信キュー203に入れる。
クエリ送信処理部205は、送信キュー203から送信状態が「未送信」のクエリを取り出し、対応するサーバ100に該パケットを送信する。ここでは、サーバ100aと100bが正常稼働しているので、サーバ100aとサーバ100bへ該パケットを転送する(それぞれステップS3とS4)。そして、各サーバ100への送信が完了したので各サーバ100について送信キュー203の送信状態を「送信完了」に更新する。正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信するが(ステップS5)、この時点では、未だ全ての応答パケットが揃っているわけではないので(この場合、サーバ100bからの応答パケットが来ていない)、正当性判定部206は何もせずにサーバ100bからの応答パケットを待つ。そして、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100bから受信すると(ステップS6)、これで全ての応答パケットが揃ったので、正当性判定部206はそれらの応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS7)。この場合、2つの応答パケットは共にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断する。そして、応答送信処理部207は正当な応答パケットの1つをクライアント500aに返すとともに、該応答を送信キュー203に保存する(ステップS8)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS9)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働しているサーバ100について送信状態を「未送信」にして送信キュー203に入れる。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、各サーバ100へパケットを転送し(それぞれステップS10とS11)、送信キュー203の送信状態を「送信完了」に更新する。サーバ100aは正常にUPDATE成功したことを通知する応答パケットを仲介装置200に送信し、仲介装置200の正当性判定部206がこの応答パケットを受信する(ステップS12)。この時点では全ての応答パケットが全て揃っているわけではないので、正当性判定部206は何もせず待機する。そして、正常にUPDATE成功したことを通知する応答パケットをサーバ100bから受信すると(ステップS13)、これで応答パケットが全て揃ったので、正当性判定部206はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS14)。この場合、2つの応答パケットは共にUPDATE成功したことを示すパケットであるため、障害は無いと判断する。そして、応答送信処理部207は、正当な応答パケットの1つをクライアント500aへ転送するとともに、該応答を送信キュー203に保存する(ステップS15)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定する(実際にデータベースを更新する)SQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS16)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働しているサーバ100について送信状態を「未送信」にして送信キュー203に入れる。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し各サーバ100へパケットを転送し(それぞれステップS17とS18)、送信キュー203の送信状態を「送信完了」に更新する。サーバ100aは正常にCOMMIT成功したことを通知するパケットを仲介装置200に送信し、仲介装置200の正当性判定部206がこの応答パケットを受信する(ステップS19)。この時点では全ての応答パケットが全て揃っているわけではないので、正当性判定部206は何もせず待機する。そして、正常にCOMMIT成功したことを通知する応答パケットをサーバ100bから受信すると(ステップS20)、これで応答パケットが全て揃ったので、正当性判定部206はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS21)。この場合、2つの応答パケットは共にCOMMIT成功したことを示すパケットであるため、障害は無いと判断する。応答送信処理部207は、正当な応答パケットの1つをクライアント500aへ転送するとともに、該応答を送信キュー203に保存する(ステップS22)。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、応答送信処理部207はトランザクション管理表202からこのトランザクションの登録を削除するとともに(ステップS23)、全てのサーバ100について送信状態が「送信完了」となっているクエリ(ここでは、「BEGIN」,「UPDATE」,「COMMIT」の3つのクエリ)を送信キュー203から削除する(ステップS23)。このときのトランザクション管理表202及び送信キュー203は再び初期状態(すなわち空)になる。
次に、サーバ100bが故障などで障害になった場合の動作を図9から図11を参照して説明する。初期状態では、データベース101aと101bは完全に同一であり、サーバ管理表201は前述した図7のようになっているとする。また、トランザクション管理表202と送信キュー203は空であるとする。
クライアント500aが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS30)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS31)。図10にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを、サーバ管理表201を参照して正常稼働しているサーバ100について送信状態を「未送信」にして送信キュー203に入れる。
クエリ送信処理部205は、送信キュー203から送信状態が「未送信」のクエリを取り出し、対応する各サーバ100に該パケットを転送する(それぞれステップS32とS33)。次いで、送信キュー203の送信状態を「送信完了」に更新する。仲介装置200の正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信するが(ステップS34)、この時点では、未だ全ての応答パケットが揃っているわけではないので(この場合、サーバ100bからの応答パケットが来ていない)、何もせずにサーバ100bからの応答パケットを待つ。そして、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100bから受信すると(ステップS35)、これで全ての応答パケットが揃ったので、正当性判定部206はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS36)。この場合、2つの応答パケットは共にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断する。そして、応答送信処理部207は、正当な応答パケットの1つをクライアント500aへ転送するとともに、該応答を送信キュー203に保存する(ステップS37)。
ここで、サーバ100bは、ステップS35で応答パケットを返した後、故障などの障害が発生してダウンしたものとする(ステップS38)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS39)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働しているサーバ100について送信状態を「未送信」にして送信キュー203に入れる。この時点では、仲介装置200はサーバ100bのダウンを知らないので、サーバ100bが正常稼働しているという情報がサーバ管理表201に格納されたままである。したがって、受信クエリ処理部204は、サーバ100aの欄だけでなくサーバ100bの欄についても送信状態を「未送信」にして送信キュー203に受信クエリを格納する。クエリ送信処理部205は、送信キュー203から送信状態が「未送信」のクエリを取り出して各サーバ100a及び100bにパケットを転送する(それぞれステップS40とS41)。次いで、クエリ送信処理部205は、送信キュー203の送信状態を「送信完了」に更新する。サーバ100aは正常にUPDATE成功したことを通知する応答パケットを仲介装置200に送信し、仲介装置200の正当性判定部206がこの応答パケットを受信する(ステップS42)。この時点では応答パケットが全て揃っているわけではないので、正当性判定部206は何もせず待機する。しかし、サーバ100bはダウンしているのでサーバ100bからの応答パケットはいつまで経っても正当性判定部206には届かない。これにより正当性判定部206はタイムアウトし、サーバ100bのダウンを検知する。そして、正当性判定部206はサーバ管理表201からサーバ100bのエントリを削除する(ステップS43)。このときのサーバ管理表201を図11に示す。また、サーバ100bについての送信状態の欄を送信キュー203から削除する。このときの送信キュー203を図12に示す。次に、正当性判定部206は、システムから切り離したサーバ100bに対して再起動指示を送出する(ステップS44)。もっとも、ここではサーバ100bはダウンしているので、当該再起動指示に対する処理が行われることはない。次に、応答送信処理部207は応答パケットをクライアント500aへ転送するとともに、該応答を送信キュー203に保存する(ステップS45)。ここでは、クライアント500aにとって、サーバ100bが障害になったかどうかは認識せず、今までと同様に仮想サーバ800からサービスを受けることができることに注目すべきである。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS46)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働しているサーバ100について送信状態を「未送信」にして送信キュー203に入れる。ここでは、サーバ100aについてのみ送信状態が「未送信」で送信キュー203にクエリが記憶される。そして、クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、対応するサーバ、この場合、サーバ100aのみへ該パケットを転送する(ステップS47)。次いで、送信キュー203の送信状態を「送信完了」に更新する。サーバ100aは正常にCOMMIT成功したことを通知する応答パケットを送信し、仲介装置200の正当性判定部206がこの応答パケットを受信する(ステップS48)。ここでは、正常稼働中のサーバ100が1台のみなので正当性判定部206は当該応答パケットを正当と判断し、応答送信処理部207は該応答パケットをクライアント500aへ転送するとともに、該応答を送信キュー203に保存する(ステップS49)。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、応答送信処理部207はトランザクション管理表202からこのトランザクションの登録を削除するとともに(ステップS50)、全てのサーバ100について送信状態が「送信完了」となっているクエリ(ここでは、「BEGIN」,「UPDATE」,「COMMIT」の3つのクエリ)を送信キュー203から削除する(ステップS50)。このときのトランザクション管理表202及び送信キュー203は再び初期状態(すなわち空)になる。
ここで、ステップS47によって、サーバ100aのデータベース101aは、クライアント500aからのUPDATE(ステップS39)が反映されているのに対して、サーバ100bのデータベース101bにはクライアント500aからのUPDATE(ステップS39)が反映されていない、つまり、データベース101aとデータベース101bは非同期状態になったことに注目すべきである。
次に、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合について図13及び図14のシーケンスチャートを参照して説明する。
ここでは、2台の正常稼働中のサーバ100a及び100bが各クライアント500からのクエリを処理するものとする。初期状態では、データベース101aと101bは完全に同一であり、サーバ管理表201は図7のようになっているものとする。また、トランザクション管理表202と送信キュー203は空であるとする。各サーバ100a,100bには、テーブルtest_tableが存在しているとする。そして、図58のテーブルtest_tableに対して、図59のトランザクションT1をクライアント500aが発行し、同図のトランザクションT2をクライアント500bが発行したものとする。前述したように、この2つのトランザクションT1,T2の処理後におけるデータベース101のデータは、各トランザクションの処理順序によって異なった内容になることに注意されたい。
なお、ここではクエリの処理順序に伴うデータベースの不整合とその解決方法の大まかな流れについて説明するため、サーバ管理表201の更新動作、送信キュー203に対するクエリの入出力、トランザクション管理表202の更新動作など、仲介装置200の各部についての詳細な動作については省略する。
図13に示すように、クライアント500aがトランザクションT1を開始するクエリ(BEGIN)を仲介装置200に送信し(ステップS101)、一方、クライアント500bがトランザクションT2を開始するクエリ(BEGIN)を仲介装置200に送信する(ステップS102)。仲介装置200は、各クエリをそれぞれ正常稼働中のサーバ100a及び100bに転送する(ステップS103〜S106)。そして、各サーバ100a及び100bからのそれぞれ応答(ステップS107〜S110)について正当性をチェックし(図示省略)、正当な応答の1つをそれぞれの要求元のクライアント500a又は500bに転送する(ステップS111〜S112)。
仲介装置200からBEGINに対する応答を受信したクライアント500a及び500bは、それぞれのトランザクションに属する次のクエリを仲介装置200に送信する。本実施例では、クライアント500aはトランザクションT1のUPDATEクエリを仲介装置200に送信し(ステップS113)、クライアント500bはトランザクションT2のUPDATEクエリを仲介装置200に送信する(ステップS114)。クライアント500a及び500bからクエリを受信した仲介装置200は、当該クエリをそれぞれ正常稼働中のサーバ100a及び100bに転送する(ステップS115〜S118)。
サーバ100aではトランザクションT1のUPDATEクエリがトランザクションT2のUPDATEクエリより先に処理されたとする。トランザクションT1のUPDATEクエリを処理したサーバ100aは、処理結果を仲介装置200に送信する(ステップS119)。このとき、トランザクションT1のUPDATEクエリによるtest_tableの当該更新対象行は、トランザクションT1がCOMMITされるまでロックされる。トランザクションT2のUPDATEクエリは上記ロックされている行が更新対象となっているので、当該クエリの処理はロックが解除されるまで保留される(ステップS120)。
一方、サーバ100bではトランザクションT2のUPDATEクエリがトランザクションT1のUPDATEクエリより先に処理されたとする。トランザクションT2のUPDATEクエリを処理したサーバ100bは、処理結果を仲介装置200に送信する(ステップS121)。このとき、トランザクションT2のUPDATEクエリによるtest_tableの当該更新対象行は、トランザクションT2がCOMMITされるまでロックされる。トランザクションT1のUPDATEクエリは上記ロックされている行が更新対象となっているので、当該クエリの処理はロックが解除されるまで保留される(ステップS122)。
ここで、サーバ100aからのトランザクションT1のUPDATEクエリに対する応答(ステップS119)が、サーバ100bからのトランザクションT2のUPDATEクエリに対する応答(ステップS121)よりも先に仲介装置200に到達したとする。
仲介装置200は、トランザクションT1のUPDATEクエリについての応答を一方のサーバ100aから受信したが(ステップS119)、他方のサーバ100bからの応答は受信していないので当該応答を待つ(ステップS123)。これは、前述したように、仲介装置200において、各サーバ100a及び100bからの応答を互いに比較して正当性を判断するためである。同様に、仲介装置200は、トランザクションT2のUPDATEクエリについての応答を一方のサーバ100bから受信したが(ステップS121)、他方のサーバ100aからの応答は受信していないので当該応答を待つ(ステップS124)。
前述のようにサーバ100bにおいてトランザクションT1のUPDATEクエリの処理はロック解除待ちされているので(ステップS122)、仲介装置200における当該クエリに対する応答待ち(ステップS123)はタイムアウトする(ステップS125)。これにより、仲介装置200は、サーバ100bが障害になったと判断し、前記ステップS124の応答待ちをキャンセルし、当該サーバ100bをシステムから切り離す(ステップS126)。具体的には、サーバ管理表201から当該サーバ100bのエントリを削除するとともに、送信キュー203からサーバ100bの送信状態の欄を削除する。そして、仲介装置200は、図14に示すように、システムから切り離したサーバ100bに対して再起動指示を送信するとともに(ステップS127)、応答をクライアント500aに返す(ステップS128)。
サーバ100bは、仲介装置200からの再起動指示を受信すると、自身の再起動を開始する(ステップS129)。
トランザクションT1のUPDATEクエリについて応答を受信したクライアント500aは、更新を確定するクエリ(COMMIT)を仲介装置200に送信する(ステップS130)。仲介装置200は、クライアント500aからクエリを受信すると、サーバ管理表201を参照して正常稼働中のサーバ100aに当該クエリを転送する(ステップS131)。
サーバ100aでは、トランザクションT1のCOMMITクエリを処理することによりロックが解除されてトランザクションT2の処理が再開可能となる(ステップS132)。これにより、サーバ100aはトランザクションT1のCOMMITクエリに対する応答を仲介装置200に返し(ステップS133)、仲介装置200は当該応答をクライアント500aに転送する(ステップS134)。次いで、サーバ100aはトランザクションT2のUPDATEクエリに対する応答を仲介装置200に返し(ステップS135)、仲介装置200は当該応答をクライアント500bに転送する(ステップS136)。
トランザクションT2のUPDATEクエリについて応答を受信したクライアント500bは、更新を確定するクエリ(COMMIT)を仲介装置200に送信する(ステップS137)。仲介装置200は、クライアント500bからクエリを受信すると、サーバ管理表201を参照して正常稼働中のサーバ100aに当該クエリを転送する(ステップS138)。サーバ100aは当該クエリを処理して応答を仲介装置200に返し(ステップS139)、仲介装置200は当該応答をクライアント500bに転送する(ステップS140)。
ここで、システムから切り離されたサーバ100bの再起動が完了したものとする(ステップS141)。サーバ100bは、再起動が完了すると仲介装置200に対してデータベース同期化要求を送信する(ステップS142)。仲介装置200は、正常稼働中のサーバ100aと協働して、サーバ100aのデータベース101aと、サーバ100bのデータベース101bとを同期化させる処理を行う(ステップS143)。この同期化処理の詳細については後述する。仲介装置200は、同期化処理が完了したら当該サーバ100bを再びシステムに組み込む(ステップS144)。システムへの組込処理の詳細についてはステップS143の同期化処理の詳細と併せて後述する。
以上の処理により、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合であっても、各サーバ100間でデータベース101の同期が保たれる。
次に、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合の他の例について図15及び図16のシーケンスチャートを参照して説明する。
ここでは、2台の正常稼働中のサーバ100a及び100bが各クライアント500からのクエリを処理するものとする。初期状態では、データベース101aと101bは完全に同一であり、サーバ管理表201は図7のようになっているものとする。また、トランザクション管理表202と送信キュー203は空であるとする。各サーバ100a,100bには、テーブルtest_tableが存在しているとする。そして、図58のテーブルtest_tableに対して、図60のトランザクションT3をクライアント500aが発行し、同図のトランザクションT4をクライアント500bが発行したものとする。前述したように、この2つのトランザクションT3,T4の処理後におけるデータベース101のデータは、各トランザクションの処理順序には影響されない。しかしながら、前述したように、トランザクションT4におけるSELECTの結果は各トランザクションT3,T4の処理順序によって異なった内容になることに注意されたい。
なお、ここではクエリの処理順序に伴うデータベースの不整合とその解決方法の大まかな流れについて説明するため、サーバ管理表201の更新動作、送信キュー203に対するクエリの入出力、トランザクション管理表202の更新動作など、仲介装置200の各部についての詳細な動作については省略する。
図15に示すように、クライアント500aがトランザクションT3を開始するクエリ(BEGIN)を仲介装置200に送信すると(ステップS201)、仲介装置200は、サーバ管理表201を参照して正常稼働中のサーバ100a及び100bに転送する(ステップS202,S203)。仲介装置200は、各サーバ100a及び100bからの応答を受信すると(ステップS204,S205)、正当な応答の1つをクライアント500aに転送する(ステップS206)。
次いで、クライアント500aはトランザクションT3の更新クエリ(UPDATE)を仲介装置200に送信する(ステップS207)。一方、クライアント500bはトランザクションT4を開始するクエリ(BEGIN)を仲介装置200に送信する(ステップS208)。
仲介装置200は、トランザクションT3のUPDATEクエリを正常稼働中のサーバ100a及び100bに転送するとともに(ステップS209,S210)、トランザクションT4のBEGINクエリを正常稼働中のサーバ100a及び100bに転送する(ステップS211,S212)。そして、仲介装置200は、トランザクションT3のUPDATEクエリに対する応答を各サーバ100a及び100bから受信すると(ステップS213,S214)、正当な応答の1つをクライアント500aに転送する(ステップS215)。また、トランザクションT4のBEGINクエリに対する応答を各サーバ100a及び100bから受信すると(ステップS216,S217)、正当な応答の1つをクライアント500bに転送する(ステップS218)。
次いで、クライアント500aはトランザクションT3を確定するクエリ(COMMIT)を仲介装置200に送信する(ステップS219)。一方、クライアント500bはトランザクションT4の参照クエリ(SELECT)を仲介装置200に送信する(ステップS220)。
仲介装置200は、トランザクションT3のCOMMITクエリを正常稼働中のサーバ100a及び100bに転送するとともに(ステップS221,S222)、トランザクションT4のSELECTクエリを正常稼働中のサーバ100a及び100bに転送する(ステップS223,S224)。
ここで、一方のサーバ100aでは、トランザクションT3のCOMMITクエリがトランザクションT4のSELECTクエリより先に処理され(ステップS225,S226)、他方のサーバ100bでは、トランザクションT4のSELECTクエリがトランザクションT3のCOMMITクエリより先に処理されたものとする(ステップS227,S228)。これにより、トランザクションT4のSELECTクエリの応答は、サーバ100aからの応答(ステップS226)と、サーバ100bからの応答(ステップS227)とは異なったものとなったとする。
仲介装置200は、トランザクションT4のSELECTクエリに対する応答が、各サーバ100a及び100b間で不一致となっているので、何れかのサーバ100a又は100bを選定し、選定したサーバ100a又は100bからの応答を正当なものとする(ステップS229)。ここで、サーバ100の選定方法としては、例えば予めMasterサーバを定めておいて、このMasterサーバを選定する方法、最初に応答を返したサーバを選定する方法、ラウンドロビンにより選定サーバを順次選定する方法、ランダムに選定する方法、各サーバの処理能力・処理負荷などにより選定する方法などが挙げられる。本実施の形態では、サーバ100aをMasterサーバとして該サーバ100aを正当な応答を返したサーバとして選定する。仲介装置200は、正当でない応答を返したサーバ100bをシステムから切り離す(ステップS230)。具体的には、サーバ管理表201から当該サーバ100bのエントリを削除するとともに、送信キュー203からサーバ100bの送信状態の欄を削除する。そして、図16に示すように、当該サーバ100bに対して再起動指示を送信する(ステップS231)。
サーバ100bは、仲介装置200からの再起動指示を受信すると、自身の再起動を開始する(ステップS232)。
仲介装置200は、選定したサーバ100aから受信した、トランザクションT3のCOMMITクエリに対する応答及びトランザクションT4のSELECTクエリに対する応答を、それぞれ要求元のクライアント500a,500bに転送する(ステップS233,S234)。以降、各クライアント500a,500bからのクエリは、正常稼働中のサーバ100aで処理する。図16の例では、クライアント500bがトランザクションT4のCOMMITクエリを仲介装置200に送信すると(ステップS235)、仲介装置200は当該クエリを正常稼働中のサーバ100aに転送する(ステップS236)。そして、仲介装置200は、当該クエリに対する応答をサーバ100aから受信すると(ステップS237)、この応答を要求元のクライアント500bに返す(ステップS238)。
ここで、システムから切り離されたサーバ100bの再起動が完了したものとする(ステップS239)。サーバ100bは、再起動が完了すると仲介装置200に対してデータベース同期化要求を送信する(ステップS240)。仲介装置200は、正常稼働中のサーバ100aと協働して、サーバ100aのデータベース101aと、サーバ100bのデータベース101bとを同期化させる処理を行う(ステップS241)。この同期化処理の詳細については後述する。仲介装置200は、同期化処理が完了したら当該サーバ100bを再びシステムに組み込む(ステップS242)。システムへの組込処理の詳細についてはステップS241の同期化処理の詳細と併せて後述する。
以上の処理により、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合であっても、クライアント500には1つの正しい応答のみが処理結果として返される。
なお、この例では、2つのトランザクションT3及びT4に属するクエリの処理順序が異なっても当該トランザクションT3及びT4に属する各クエリの中で同一行を更新するクエリは存在しないので、クエリの処理順序が異なることによる各データベース101間の不整合は生じない。したがって、この例に限定して考えると、データベース101の同期化のための各処理(ステップS230〜S232,S239〜S242)は不要であるとも考えられる。しかし、本実施の形態では、何らかの原因でデータベース101に不整合が潜在していた場合であって、当該不整合について前記ステップS229を契機に検出した場合にも対処できるように、データベース101の同期化のための各処理を実施するようにした。また、この例では、SELECTとUPDATEの順序不一致による結果不一致について説明したが、他にも、参照系ではSELECT FOR UPDATE、更新係ではDELETEなどの組み合わせで結果不一致が生じる場合がある。本実施の形態では、このような場合であっても図15及び図16を参照して説明したシーケンスと同様の処理を行うことによって、データベース101の不整合を解消できる。
次に、前記ステップS143及びS241における同期化処理の詳細について説明する。本発明における同期化処理では、同期化処理開始時において正常稼働しているサーバ100でデータベース101のスナップショットを作成し、このスナップショットを同期化対象の新規サーバ100に転送する。そして新規サーバ100においてスナップショットからデータベース101の復元を行う。さらに、この処理中に受信したクライアント500からのクエリを仲介装置200において差分情報として蓄積する。この差分情報の蓄積は送信キュー203を利用する。そして、新規サーバ100がスナップショットからのデータベース101の復元が完了したら仲介装置200から差分情報を取得して、この差分情報を処理する。
なお、前述したように、サーバ100は自身が起動されるとデータベース同期化要求を仲介装置200に送信するので、同期化処理の実施は、仲介装置200からの再起動指示に応じた再起動時に限られない。すなわち、サーバ100が障害となってシステムから切り離され、その後にシステムに再び組み込む際にも実施される。また、システムを構成するサーバを増設する場合にも実施される。
以下に、サーバ100bをシステムに組み込む場合の同期化動作を図17から図37を参照して説明する。このとき注目すべきポイントは、スナップショット作成期間中を除きクライアント500a及び500bに対するサービスを続けたままサーバ100bを追加する、つまり、システムダウンさせずにデータベース101aと101bを同期させることである。
データベース101bはデータベース101aと同期がとれていない状態、つまり、同一ではない状態である。例えば、データベース101bは、再起動直前のデータ又は障害発生直前のデータを保持しているかもしれないし、全く新しいサーバの場合には、データを全く持っていない状態かもしれない。本発明では、前者の場合でも古いデータは削除し、データベース101bはデータを全く保持していないものとしてシステムに組み込む。つまり、古いデータを保持している必要はない。
ここでは、サーバ100aのみが正常稼働しているのでサーバ管理表201は図21のようになっているとする。また、トランザクション管理表202は空であるとする。さらに、送信キュー203は空であり、正常稼働中のサーバ100aについてのみ送信状態を記憶する構成となっている。
図17に示すように、クライアント500aが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS301)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS302)。図22にこのときのトランザクション管理表202を示す。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100aについて送信状態を「未送信」にして受信クエリを送信キュー203に入れる(ステップS303)。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、対応するサーバ100aに転送し(ステップS304)、送信キュー203の送信状態を「送信完了」に更新する(ステップS305)。仲介装置200の正当性応答部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信すると(ステップS306)、ここでは、正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断し、応答送信処理部207は該応答パケットをクライアント500aへ転送するとともに(ステップS307)、該応答を送信キュー203に保存する(ステップS308)。この時の送信キュー203を図23に示す。
次いで、クライアント500aが172.17.1.1宛に、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS309)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100aについて送信状態を「未送信」にして受信クエリを送信キュー203に入れる(ステップS310)。この時の送信キュー203を図24に示す。
ここで、サーバ100bが再起動したものとする(ステップS311)。これにより、サーバ100bのデータベース制御部102bは、データベース同期化要求(システムへの組込要求)を仲介装置200へ送信する(ステップS312)。
データベース同期化要求を受信した同期化処理制御部208は、サーバ管理表201を参照して同期化用のサーバ100を選定する。ここでは、正常稼働中のサーバ100は1台のみなので、サーバ100aを選定する。そして、サーバ管理表201のサーバ100aについての稼働状態を「active+sync」に更新するとともに(ステップS313)、送信キュー203のサーバ100aについて送信状態が「未送信」となっているエントリを「保留」に更新する(ステップS314)。また、同期化処理制御部208は、同期化用のサーバ100aにおいて実行中クエリがないことを確認した後に、要求元のサーバ100bについて稼働状態を「sync」でサーバ管理表201に追加するとともに(ステップS315)、送信キュー203の送信状態の欄に当該サーバ100b用の列を追加する(ステップS316)。ここで、当該サーバ100bの送信状態は全て「保留」に設定する。この時のサーバ管理表201及び送信キュー203を図25,図26に示す。以降、各クライアント500から受信したクエリは、サーバ100a及び100bの双方について送信状態を「保留」にして送信キュー203に入れる。なお、同期化処理制御部208は、上記ステップS313〜S316の処理は1つの処理として取り扱い、排他制御を行う。つまり、ステップS313〜S316の処理中には、各ステップでアクセスするサーバ管理表201及び送信キュー203に対して、他の機能ブロック(例えば受信クエリ処理部204など)からのアクセスを中断させる。
次いで、同期化処理制御部208は、サーバ100aにスナップショットの作成指示を送出する(ステップS317)。
スナップショット作成指示を受け取ったサーバ100aのデータベース制御部102aは、データベース101aのスナップショットを作り出す(ステップS318)。ここで、このスナップショットは、スナップショット作成指示を受け取った時点でCOMMITされているデータベース全体のバックアップデータ及びデータベースを復元するための情報であり、既に更新クエリを受信していてもスナップショット作成指示時には未だCOMMITされてなければ当該更新は反映されていないことに注目すべきである。
前述したように、クライアント500からクエリを受信すると、受信クエリ処理部204は、サーバ100a及び100bの双方について送信状態を「保留」にして送信キュー203に入れる。図18の例では、クライアント500bがトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS319)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500bのIPアドレスとトランザクション番号を登録する(ステップS320)。図27にこのときのトランザクション管理表202を示す。受信クエリ処理部204は、サーバ100a及び100bの双方について送信状態を「保留」にして当該受信クエリを送信キュー203に入れる(ステップS321)。この時の送信キュー203を図28に示す。
サーバ100aのデータベース制御部102aは、スナップショット作成が完了すると(ステップS322)、その旨を仲介装置200へ通知するとともに(ステップS323)、該スナップショットのサーバ100bへの転送を開始する(ステップS324)。サーバ100bのデータベース制御部102bは、サーバ100aから受信したスナップショットからデータベースを復元する(ステップS325)。
サーバ100aからスナップショット完了通知を受信した仲介装置200の同期化処理制御部208は、送信キュー203のサーバ100aについての送信状態が「保留」となっているエントリを「保留解除」に更新する(ステップS326)。この時の送信キュー203を図29に示す。以降、各クライアント500から受信したクエリは、サーバ100aについては送信状態を「保留解除」にして、100bについては送信状態を「保留」にして送信キュー203に入れる。これにより、クエリ送信処理部205は、送信状態が「保留解除」となったクエリを古いものから順にサーバ100aに送信する。ここでは、クエリ送信処理部205は、図29に示すトランザクションIDが3番のUPDATEクエリをサーバ100aに送信し(ステップS327)、送信状態を「送信完了」に更新する(ステップS328)。仲介装置200の正当性判定部206は、UPDATEが正常に処理されたことを通知する応答パケットをサーバ100aから受信すると(ステップS329)、ここでは正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断する。そして、応答送信処理部207は該応答パケットのクライアント500aへ転送するとともに(ステップS330)、該応答を送信キュー203に保存する(ステップS331)。同様にして図29に示すトランザクションIDが4番のBEGINクエリも処理する(ステップS332〜S336)。この時の送信キュー203を図30に示す。ここで、サーバ100aについては、送信キュー203において送信状態が「保留解除」であったクエリが全て処理されたことになるので、応答送信処理部207は、サーバ管理表201のサーバ100aについての稼働状態を「active」に更新する(ステップS337)。これによりサーバ100aはシステムに組み込まれる。この時のサーバ管理表201を図31に示す。以降、各クライアント500から受信したクエリは、サーバ100aについては送信状態を「未送信」にして、サーバ100bについては送信状態を「保留」にして送信キュー203に入れる。
図18の例では、クライアント500bが172.17.1.1宛のUPDATEクエリを含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS338)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100aについて送信状態を「未送信」にするとともに、同期化処理中のサーバ100bについて送信状態を「保留」にして受信クエリを送信キュー203に入れる(ステップS339)。この時の送信キュー203を図32に示す。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、送信状態が「未送信」であるサーバ100aに転送し(ステップS340)、送信キュー203のサーバ100aについての送信状態を「送信完了」に更新する(ステップS341)。仲介装置200の正当性判定部206は、UPDATEが正常に処理されたことを通知する応答パケットをサーバ100aから受信すると(ステップS342)、ここでは、正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断する。そして、応答送信処理部207は該応答パケットをクライアント500bへ転送するとともに(ステップS343)、該応答を送信キュー203に保存する(ステップS344)。
クライアント500aが172.17.1.1宛のトランザクション確定SQL(COMMIT)を含んだパケットを送信すると、仲介装置200は、該パケットを前述のステップS338〜344と同様に処理する(ステップS345〜S351)。この結果、送信キュー203は図33に示したものとなる。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、応答送信処理部207はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS352)。なお、この時点でトランザクションIDが3番のトランザクションは終了したが、該トランザクションに係るクエリは同期化中のサーバ100bに対しては未だ送信していないので、当該クエリの送信キュー203からの削除は行わない。
ここで、サーバ100bにおいてスナップショットからのデータベース101bの復元が完了したものとする(ステップS353)。サーバ100bはデータベース101bの復元が完了すると差分情報転送要求を仲介装置200に送信する(ステップS354)。
サーバ100bから差分情報転送要求を受信すると、同期化処理制御部208は、要求元のサーバ100bについて送信キュー203の送信状態が「保留」となっているものを「保留解除」に更新する(ステップS355)。以降、各クライアント500から受信したクエリーは、サーバ100aについては送信状態を「未送信」にして、サーバ100bについては送信状態を「保留解除」にして送信キュー203に入れる。この時の送信キュー203を図34に示す。これにより、クエリ送信処理部205は、送信状態が「保留解除」となったクエリを差分情報として古いものから順にサーバ100bに送信する。
具体的には、クエリ送信処理部205は、送信キュー203からBEGINクエリを取り出してサーバ100bに転送するとともに(ステップS356)、送信キュー203の送信状態を「送信完了」に更新する(ステップS357)。この時の送信キュー203を図35に示す。仲介装置200の正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100bから受信すると(ステップS358)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS359)。そして、両者が一致しない場合には、サーバ100bについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、当該サーバ100bに対して再起動指示を送出する。これにより、ステップS311以降の処理が再試行される。
なお、この同期化処理の再試行の発生頻度は低いものと考えられるが理論上は無限回数継続する可能性がある。そこで、所定の記憶装置に再試行回数を記憶し、再試行回数が所定回数以上となったら同期化処理を中止すると好適である。さらに、同期化処理を中止した場合には、所定の出力手段に当該中止した旨を出力すると好適である。例えば、ログファイルに出力する方法などが挙げられる。そして、正常稼働中のサーバ100や仲介装置200の負荷が低いときなどに再び同期化処理を試行すると好適である。
前述したように、サーバ100bへの差分情報の転送開始後であってサーバ100bのシステムのへ組込前にクライアント500からクエリを受信した場合には、受信クエリ処理部204は、サーバ100aについては送信状態「未送信」で、サーバ100bについては送信状態「保留解除」で当該クエリを送信キュー203に投入する。図19の例では、クライアント500bが仲介装置200に対してINSERTクエリを送信すると(ステップS360)、仲介装置200の受信クエリ処理部204は、サーバ100aについては送信状態「未送信」で、サーバ100bについては送信状態「保留解除」で当該クエリを送信キュー203に投入する(ステップS361)。クエリ送信処理部205は、当該クエリを送信キュー203から取り出してサーバ100aに送信し(ステップS362)、サーバ100aについての送信状態を「送信完了」に更新する(ステップS363)。仲介装置200の正当性判定部206は、INSERTが正常に処理されたことを通知する応答パケットをサーバ100aから受信すると(ステップS364)、ここでは正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断する。そして、応答送信処理部207は該応答パケットのクライアント500bへ転送するとともに(ステップS365)、該応答を送信キュー203に保存する(ステップS366)。この時の送信キュー203を図36に示す。
このような差分情報の転送中において、あるトランザクションに属する各クエリがサーバ100bで処理され且つその応答が正当であると判定されたら、応答送信処理部207は、当該トランザクションに属する全てのクエリを送信キュー203から削除する。図36の例では、トランザクションIDが3番のUPDATE,トランザクションIDが4番のBEGIN、トランザクションIDが4番のUPDATEが上述した手順により順次処理され、そしてトランザクションIDが3番のCOMMITクエリについて、サーバ100bで処理され且つその応答が正当であると判定された時点で、トランザクションIDが3番のBEGIN,UPDATE,COMMITクエリが送信キュー203から削除される。
全ての差分情報の転送が終了し(すなわち送信キュー203から「保留解除」のクエリを全て送出し終わり)、且つ、差分情報としてのクエリの処理が正常に処理された時点で、サーバ100aのデータベース101aとサーバ100bのデータベース101bの同期化が完了するので、サーバ100bをシステムに組み込むべくサーバ100bについてのサーバ管理表201の稼働状態を「active」に更新する。
図20の例では、クエリ送信処理部205は、送信キュー203からINSERTクエリを取り出してサーバ100bに転送するとともに(ステップS390)、送信キュー203の送信状態を「送信完了」に更新する(ステップS391)。仲介装置200の正当性判定部206は、INSERTが成功したことを通知する応答パケットをサーバ100bから受信すると(ステップS392)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS393)。そして、両者が一致しない場合には、サーバ100bについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、当該サーバ100bに対して再起動指示を送出する。これにより、ステップS311以降の処理が再試行される。この時の送信キューを図37に示す。
この時点で送信キュー203には送信状態が「保留解除」のクエリがなくなったので、応答送信処理部207は、サーバ100bをシステムに組み込むべくサーバ100bについてのサーバ管理表201の稼働状態を「active」に更新する(ステップS394)。この時のサーバ管理表201を図38に示す。なお、このステップS394の処理は、前述のステップS144,S242の処理に対応するものである。
このような同期化処理により、もともとシステムに組み込まれていたが再起動や障害等のためにシステムから切り離されたサーバであっても、新規のサーバであっても、理論的には幾らでも追加できる。つまり、追加できるサーバ数に制限はない。
また、本実施の形態では、システムから切り離されたサーバはスナップショット及び差分情報に基づきデータベースの復元を行うが、該サーバにおける差分情報の処理結果と、システムに組み込まれていた正常なサーバにおける処理結果とが一致しない場合には、同期化処理が再試行される。これにより、サーバ間において処理要求の処理順序が異なることにより各サーバのデータベースが非同期状態になることを未然に防止できる。
なお、本実施形態では、クライアント500a及び500bからの処理要求のみ多重化データベースシステムで処理する場合について説明したが、データベース一致検査装置600からの処理要求も同様に処理すればよい。これは、多重化データベースシステムから見るとデータベース一致検査装置600もクライアントコンピュータの1つだからである。ところで、データベース一致検査装置600は、前述したように、定期的に又は必要に応じてデータベース一致検査用の参照クエリを仲介装置200に送信する。これにより、何らかの理由でデータベース101間でデータの矛盾が生じた場合であっても、当該クエリによりデータベース101間の矛盾が検出され上記同期化処理が実行される。これにより、データベース101間の同期をより確実に図ることができる。
以上のように本実施の形態に係る多重化データベースシステムによれば、複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがなく同期状態を保つことができる。
(第2の実施の形態)
本発明の第2の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。本実施の形態が前述の第1の実施の形態と異なる点は、仮想サーバ800が3台のサーバ100を備えていることにある。各装置の構成・動作等については第1の実施の形態と同様である。具体的には、本実施の形態と第1の実施の形態とでは、システムにサーバ100を組み込む際の同期化処理(第1の実施の形態における図14のステップS143及び図16のステップS241)の動作が異なり、他の動作については同じである。以下、この同期化処理について詳述する。
本発明の第2の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。本実施の形態が前述の第1の実施の形態と異なる点は、仮想サーバ800が3台のサーバ100を備えていることにある。各装置の構成・動作等については第1の実施の形態と同様である。具体的には、本実施の形態と第1の実施の形態とでは、システムにサーバ100を組み込む際の同期化処理(第1の実施の形態における図14のステップS143及び図16のステップS241)の動作が異なり、他の動作については同じである。以下、この同期化処理について詳述する。
ここでは、3台のサーバ100a〜100cのうち1台のサーバ100cがシステムから切り離されている状態から、該サーバ100cをシステムに再び組み込む場合について図39〜図56を参照して説明する。
初期状態にけるサーバ管理表201を図44に示す。また、トランザクション管理表202は空であるものとする。送信キュー203は空であり図45に示すような構造となっている。
図39に示すように、クライアント500aが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS401)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS402)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100a及び100bについて送信状態を「未送信」にして受信クエリを送信キュー203に入れる(ステップS403)。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、対応するサーバ100a及び100bに転送し(ステップS404,S405)、それぞれ送信キュー203の送信状態を「送信完了」に更新する(ステップS406)。仲介装置200の正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100a及び100bから受信すると(ステップS407,S408)、各サーバ100a及び100bからの応答パケットの正当性を判定する。そして、応答送信処理部207は正当な応答パケットの1つをクライアント500aへ転送するとともに(ステップS409)、該応答を送信キュー203に保存する(ステップS410)。この時の送信キュー203を図46に示す。
次いで、クライアント500aが172.17.1.1宛に、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS411)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100a及び100bについて送信状態を「未送信」にして受信クエリを送信キュー203に入れる(ステップS412)。この時の送信キュー203を図47に示す。
ここで、サーバ100cが再起動したものとする(ステップS413)。これにより、サーバ100cのデータベース制御部102cは、データベース同期化要求(システムへの組込要求)を仲介装置200へ送信する(ステップS414)。
データベース同期化要求を受信した同期化処理制御部208は、サーバ管理表201を参照して同期化用のサーバ100を1台選定する。ここでは、正常稼働中のサーバ100は2台なので、何れか一方のサーバを所定の規則に従って選定する。本実施の形態では、サーバ100bを同期化用サーバとして選定したものとする。同期化処理制御部208は、サーバ管理表201のサーバ100bについての稼働状態を「sync」に更新するとともに(ステップS415)、送信キュー203のサーバ100bについて送信状態が「未送信」となっているエントリを「保留」に更新する(ステップS416)。また、同期化処理制御部208は、同期化用のサーバ100bにおいて実行中クエリの処理が完了したことを確認した後に、要求元のサーバ100cについて稼働状態を「sync」でサーバ管理表201に追加するとともに(ステップS417)、送信キュー203の送信状態の欄に当該サーバ100c用の列を追加する(ステップS418)。ここで、当該サーバ100cの送信状態は全て「保留」に設定する。この時のサーバ管理表201及び送信キュー203を図48,図49に示す。なお、同期化処理制御部208は、上記ステップS415〜S418の処理は1つの処理として取り扱い、排他制御を行う。つまり、ステップS415〜S418の処理中には、各ステップでアクセスするサーバ管理表201及び送信キュー203に対して、他の機能ブロック(例えば受信クエリ処理部204など)からのアクセスを中断させる。
次いで、同期化処理制御部208は、該サーバ100bにスナップショットの作成指示を送出する(ステップS419)。スナップショット作成指示を受け取ったサーバ100bのデータベース制御部102bは、データベース101bのスナップショットを作り出す(ステップS420)。
本実施の形態が第1の実施の形態と大きく異なる点は、第1の実施の形態ではスナップショット作成中にはクライアント500からのクエリを処理できなかったが、本実施の形態では処理可能である点である。すなわち、同期化処理制御部208が上記ステップS415〜S418の排他処理を終えると、図40に示すように、クエリ送信処理部205は、送信キュー203から送信状態が「未送信」のクエリを取り出し、対応するサーバ100aに転送するとともに(ステップS421)、送信キュー203の送信状態を「送信完了」に更新する(ステップS422)。仲介装置200の受信クエリ処理部204は、UPDATEが正常に処理されたことを通知する応答パケットをサーバ100aから受信すると(ステップS423)、ここでは、正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断し、応答送信処理部207は該応答パケットのクライアント500aへ転送するとともに(ステップS424)、該応答を送信キュー203に保存する(ステップS425)。
また、クライアント500bが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS426)。受信クエリ処理部204は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500bのIPアドレスとトランザクション番号を登録する(ステップS427)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100aについて送信状態を「未送信」にするとともに、同期化処理中のサーバ100b及び100cについて送信状態を「保留」にして受信クエリを送信キュー203に入れる(ステップS428)。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、送信状態が「未送信」であるサーバ100aに転送し(ステップS429)、送信キュー203のサーバ100aについての送信状態を「送信完了」に更新する(ステップS430)。仲介装置200の正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信すると(ステップS431)、ここでは、正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断し、応答送信処理部207は該応答パケットのクライアント500bへ転送するとともに(ステップS432)、該応答を送信キュー203に保存する(ステップS433)。この時の送信キュー203を図50に示す。
ここで、同期化用のサーバ100bがスナップショットの作成を完了したとする(ステップS434)。サーバ100bのデータベース制御部102bは、スナップショット作成が完了すると、スナップショット作成完了通知を仲介装置200へ通知するとともに(ステップS435)、該スナップショットのサーバ100cへの転送を開始する(ステップS436)。サーバ100cのデータベース制御部102cは、サーバ100bから受信したスナップショットからデータベースを復元する(ステップS437)。
サーバ100bからスナップショット作成完了通知を受信すると、同期化処理制御部208は、該サーバ100bについて送信キュー203の送信状態が「保留」となっているものを「保留解除」に更新する(ステップS438)。この時の送信キュー203を図51に示す。以降、各クライアント500から受信したクエリは、サーバ100aについては送信状態を「未送信」で、サーバ100bについては送信状態を「保留解除」で、サーバ100cについては送信状態を「保留」にして送信キュー203に入れる。これにより、クエリ送信処理部205は、送信状態が「保留解除」となったクエリを差分情報として古いものから順にサーバ100bに送信する。
具体的には、クエリ送信処理部205は、送信キュー203からUPDATEクエリを取り出してサーバ100bに転送するとともに(ステップS439)、送信キュー203の送信状態を「送信完了」に更新する(ステップS440)。仲介装置200の正当性判定部206は、更新が正常に処理されたことを通知する応答パケットをサーバ100bから受信すると(ステップS441)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS442)。そして、両者が一致しない場合には、一旦、サーバ100b及び100cについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、サーバ100bに対して再起動指示を送出する。これにより、第1の実施の形態で前述した手順によりサーバ100bがシステムに組み込まれるので、次いでサーバ100cに対して再起動指示を送出する。これにより、前記ステップS415以降の処理が再試行される。
ここで、クライアント500bがINSERTクエリを仲介装置200に送信すると(ステップS443)、前述したように、仲介装置200の受信クエリ処理部204は、サーバ100aについては送信状態を「未送信」で、サーバ100bについては送信状態を「保留解除」で、サーバ100cについては送信状態を「保留」で当該クエリを送信キューに投入する(ステップS444)。この時の送信キュー203を図52に示す。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、送信状態が「未送信」であるサーバ100aに対して転送するとともに(ステップS445)、送信キュー203のサーバ100aについての送信状態を「送信完了」に更新する(ステップS446)。正当性応答部206は、INSERTが正常に処理されたことを通知するパケットをサーバ100aから受信すると(ステップS447)、ここでは、正常稼働中のサーバ100が1台のみなので当該応答パケットを正当と判断し、応答送信処理部207は該応答パケットをクライアント500bへ転送するとともに(ステップS448)、該応答を送信キュー203に保存する(ステップS449)。
図52に示すように、この時点では送信キュー203において送信状態が「保留解除」になったクエリは、BEGINクエリとINSERTクエリの2つである。仲介装置200は、前述のステップS439〜S442と同様にして、当該2つのクエリを処理する(ステップS450〜S457)。
以上でサーバ100bに対しては、全ての差分情報の転送が終了し(すなわち送信キュー203から「保留解除」のクエリを全て送出し終わり)、且つ、差分情報としてのクエリの処理が正常に処理されたことになるので、サーバ100aのデータベース101aとサーバ100bのデータベース101bの同期化が完了したことになる。そこで、仲介装置200の応答送信処理部207は、サーバ100bをシステムに組み込むべくサーバ100bについてのサーバ管理表201の稼働状態を「active」に更新する(ステップS458)。なお、システムへの組み込みのタイミングは、正常稼働中のサーバ100においてクエリの実行中であっても構わず、またトランザクションが継続中であっても構わない点に留意されたい。
以降、クライアント500からのクエリは、サーバ100a及びサーバ100bについては送信状態を「未送信」で、サーバ100cについては送信状態を「保留」にして送信キュー203に入れる。具体的には、図41に示すように、クライアント500aが172.17.1.1宛のトランザクション確定SQL(COMMIT)を含んだパケットを送信すると、仲介装置200の受信クエリ処理部204はそのパケットを受信する(ステップS459)。受信クエリ処理部204は、サーバ管理表201を参照して正常稼働中のサーバ100a及び100bについては送信状態を「未送信」に、同期化処理中のサーバ100cについては送信状態を「保留」にして受信クエリを送信キュー203に入れる(ステップS460)。この時の送信キュー203を図53に示す。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、対応するサーバ100a及び100bに転送し(ステップS461,S462)、それぞれ送信キュー203の送信状態を「送信完了」に更新する(ステップS463)。仲介装置200の正当性判定部206は、トランザクションが正常にCOMMITされたことを通知する応答パケットをサーバ100a及び100bから受信すると(ステップS464,S465)、各サーバ100a及び100bからの応答パケットの正当性を判定する。そして、応答送信処理部207は正当な応答パケットの1つをクライアント500aへ転送するとともに(ステップS466)、該応答を送信キュー203に保存する(ステップS467)。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、応答送信処理部207はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS468)。
ここで、サーバ100cにおいてスナップショットからのデータベース101cの復元が完了したものとする(ステップS469)。サーバ100cはデータベース101cの復元が完了すると差分情報転送要求を仲介装置200に送信する(ステップS470)。
サーバ100cから差分情報転送要求を受信すると、同期化処理制御部208は、要求元のサーバ100cについて送信キュー203の送信状態が「保留」となっているものを「保留解除」に更新する(ステップS471)。この時の送信キュー203を図54に示す。以降、各クライアント500から受信したクエリは、サーバ100a及びサーバ100bについては送信状態を「未送信」で、サーバ100cについては送信状態を「保留解除」にして送信キュー203に入れる。これにより、クエリ送信処理部205は、送信状態が「保留解除」となったクエリを差分情報として古いものから順にサーバ100cに送信する。
具体的には、クエリ送信処理部205は、送信キュー203からBEGINクエリを取り出してサーバ100cに転送するとともに(ステップS472)、送信キュー203の送信状態を「送信完了」に更新する(ステップS473)。仲介装置200の正当性判定部206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100cから受信すると(ステップS474)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS475)。そして、両者が一致しない場合には、サーバ100cについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、当該サーバ100cに対して再起動指示を送出する。これにより、ステップS415以降の処理が再試行される。
サーバ100cへの差分情報転送中にクライアント500bからUPDATEクエリを受信すると(ステップS476)、受信クエリ処理部204は、サーバ100a及び100bについては送信状態を「未送信」で、サーバ100cについては送信状態を「保留解除」で当該クエリーを送信キュー203に投入する(ステップS477)。この時の送信キュー203を図55に示す。クエリ送信処理部205は、送信キュー203から当該クエリを取り出し、送信状態が「未送信」であるサーバ100a及び100bに転送し(ステップS478,S479)、それぞれのサーバ100a及び100bについて送信キュー203の送信状態を「送信完了」に更新する(ステップS480)。正当性判定部206は、各サーバ100a及び100bからUPDATEが正常したことを通知するパケットを受信すると(ステップS481,S482)、各応答の正当性を判定して正当な応答の1つをクライアント500bに返すとともに(ステップS483)、該応答を送信キュー203に保存する(ステップS484)。
全ての差分情報の転送が終了し(すなわち送信キュー203から「保留解除」のクエリを全て送出し終わり)、且つ、差分情報としてのクエリの処理が正常に処理された時点で、サーバ100aのデータベース101aとサーバ100cのデータベース101cの同期化が完了するので、サーバ100cをシステムに組み込むべくサーバ100cについてのサーバ管理表201の稼働状態を「active」に更新する。なお、システムへの組み込みのタイミングは、正常稼働中のサーバ100においてクエリの実行中であっても構わず、またトランザクションが継続中であっても構わない点に留意されたい。
図55の例では、まず、トランザクションIDが5番のUPDATEクエリからトランザクションIDが6番のINSERTクエリについて、前述のステップS472〜S475と同様の処理を行う。以下、図55の例における、トランザクションIDが5番のCOMMITクエリと、トランザクションIDが6番のUPDATEクエリの処理について詳述する。
クエリ送信処理部205は、送信キュー203からCOMMITクエリを取り出してサーバ100cに転送するとともに(ステップS490)、送信キュー203の送信状態を「送信完了」に更新する(ステップS491)。仲介装置200の正当性判定部206は、トランザクションが確定したことを通知する応答パケットをサーバ100cから受信すると(ステップS492)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS493)。そして、両者が一致しない場合には、サーバ100cについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、当該サーバ100cに対して再起動指示を送出する。これにより、ステップS415以降の処理が再試行される。
この時点でトランザクションID5のトランザクションは全てのサーバ100において処理が終了し、且つ、送信キュー203にはトランザクションID5に属する各クエリは全てのサーバ100a,100b,100cについて送信状態が「送信完了」となったので、応答送信処理部207は、当該トランザクションに属するクエリのエントリを送信キュー203から削除する(ステップS494)。この時の送信キュー203を図56に示す。
次いで、図43に示すように、クエリ送信処理部205は、送信キュー203からUPDATEクエリを取り出してサーバ100cに転送するとともに(ステップS495)、送信キュー203の送信状態を「送信完了」に更新する(ステップS496)。仲介装置200の正当性判定部206は、UPDATEが正常に処理されたことを通知する応答パケットをサーバ100cから受信すると(ステップS497)、当該応答と、送信キュー203に保存されている応答とを対比する(ステップS498)。そして、両者が一致しない場合には、サーバ100cについてのエントリをサーバ管理表201及び送信キュー203から削除した後に、当該サーバ100cに対して再起動指示を送出する。これにより、ステップS415以降の処理が再試行される。
この時点で送信キュー203には送信状態が「保留解除」のクエリがなくなったので、応答送信処理部207は、サーバ100cをシステムに組み込むべくサーバ100cについてのサーバ管理表201の稼働状態を「active」に更新する(ステップS499)。なお、このステップS499の処理は、第1の実施形態で前述したステップS144,S242の処理に対応するものである。
以上のように本実施の形態では、第1の実施の形態と比較して、同期化処理において実施されるスナップショットの作成中にもクライアントに対してサービス提供を維持できるという効果を有する。他の作用・効果については第1の実施の形態と同じである。
なお、本実施の形態では、スナップショットを作成する同期化用のサーバ100bと、システムに再び組み込まれるサーバ100cとに対して、それぞれ独立したタイミングで差分情報を転送していたが、サーバ100cから差分情報転送要求があった際に両サーバ100b,100cに同一の差分情報を転送するようにしてもよい。
また、本実施の形態では、同期化処理用サーバ100bにおける差分情報の処理結果が、正常稼働中のサーバ100aでの処理結果と一致しない場合には、当該サーバ100bだけでなくサーバ100cに対する処理を中断し、第1の実施の形態の手法を用いて当該サーバ100bのみをシステムに組み込み、その後にサーバ100cをシステムに組み込む処理を再試行していた。一方、この変形例として、サーバ100cに対する処理を継続してサーバ100cをシステムに組み込み、その後にサーバ100bをシステムに組み込むようにしてもよい。この方法では、クライアント500へのサービス提供を継続できる点、サーバ100cの同期化処理を無駄にやり直す必要がないという点で好適である。
以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なものであり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれるものである。なお、以下の各変形例は適宜組み合わせて上記各実施の形態に適用できる。
上記実施の形態では、同期化処理の再試行を行う際には、新規サーバ100の再起動から再試行していたが、再起動は行わずに、新規サーバ100から仲介装置200へのデータベースサーバ同期化要求(第1の実施形態におけるステップS312,第2の実施の形態におけるステップS414)から再試行するようにしてもよい。
また、上記実施の形態では、同期化処理の再試行を行う際にはスナップショットを再度作成し直していたが、再試行前に作成したスナップショットを用いて同期化処理を行ってもよい。これにより、再試行時の同期化処理時間を短縮化できる。なお、この方法を実現するためには、上記実施形態のごとく送信キュー203に差分情報として記憶しているクエリを適宜削除するのではなく、同期化が完了するまでに保持しておく必要がある。
また、上記実施の形態では、送信状態が「保留解除」となっているクエリを送信キュー203から取り出して差分情報としてサーバ100に対して転送し、該転送中にクライアント500からクエリを受信すると、当該サーバ100についての送信状態を「保留解除」にして送信キュー203に投入する処理を行っている。そして、送信状態が「保留解除」となっているクエリが全てサーバ100において処理された後に当該サーバ100をシステムに組み込む処理を行っている。このような処理では、クライアント500からのクエリ受信頻度が高いとサーバ100のシステムへの組み込みに時間を要することが考えられる。そこで、例えば送信キュー203に送信状態が「保留解除」として記憶されているクエリが所定数以下となったら、受信クエリ処理部204が送信キュー203へのクエリの投入を一停止するなど所定条件で差分情報の転送処理を優先させるようにしてもよい。
また、上記実施の形態では、クライアント500から受信した全てのクエリを送信キュー203に保存しておき、同期化処理時には該送信キュー203に保存されているクエリを差分情報としてサーバ100に転送しているが、SELECTクエリのようにデータベース101の更新を行わない参照系クエリについては差分情報としてのサーバ100への転送を行わないようにしてもよい。これにより、同期化処理の処理時間を短縮化できる。
さらに、UPDATEクエリのようにデータベース101の更新を行う更新系クエリのみを転送し、参照系クエリやトランザクション制御クエリ(BEGIN,ROLLBACK等)の転送を行わないようにしてもよい。そして、当該更新系クエリを差分情報としてサーバ100に転送する際には、サーバ100においてAutoCommitモードで当該クエリを処理させるようにする。これにより、更に同期化処理の短縮化及び記憶容量の節約が可能となる。ただし、この場合にはサーバ100に対してクエリを転送する順序が、正常稼働中のサーバ100で処理された順序と一致することを保証する必要がある。これを実現するためには、各更新系クエリに対する正常稼働中サーバ100からの処理応答から正常稼働中サーバ100における各クエリの実際の処理順序を把握し、当該順序に従って各クエリを転送すればよい。
また、上記実施の形態では、サーバ100においてトランザクションが継続中であっても仲介装置200がサーバ100に対してスナップショットの作成指示を送信していたが、継続中のトランザクションが無くなった時点でスナップショットの作成指示を送信するようにしてもよい。これにより、データベース101として、トランザクションの継続中にはスナップショットの作成ができないものや、トランザクションの継続中であってもスナップショットの作成は開始できるが当該スナップショットにトランザクションに係るクエリが反映されるか否かが不確定なものを利用することができる。また、前述の第1の実施の形態においてはスナップショットの作成中にはクライアント500へのサービスが停止するので、クライアント500によってはトランザクション失敗と判断してROLLBACKクエリを仲介装置200に送信する場合がある。本変形例では、このような余計なROLLBACK処理を未然に防止できる。
また、上記の実施の形態では、同期化処理中に送信キュー203から各クエリを削除するタイミングは、当該クエリが属するトランザクションが全てのサーバ100において終了した時点としていた。この方法では、通常動作時におけるクエリの削除タイミングと同じなので実装が容易であるという利点がある。一方、同期化処理中には、送信キュー203のクエリが差分情報としてサーバ100において処理されたら随時削除するようにしてもよい。また、同期化処理が完了した後に一括して削除するようにしても良い。
また、上記の実施の形態では、クエリのバッファリング機能と同期化処理用の差分情報の記憶機能とを送信キュー203に統合させていたが、それぞれ機能毎に記憶手段を設けるようにしてもよい。なお、この場合には、サーバ100が3台構成となっているときには、システムに組み込もうとするサーバ100と、同期化処理用サーバ100とで差分情報記憶部を共有できるので、記憶容量を節約できるという点で有利である。
また、上記の実施の形態に加えて更に、各サーバ100にデータベース101やデータベース制御部102の障害を検出する障害検出手段を設けてもよい。この障害検出手段は、データベース101やデータベース制御部102の動作を定期的に監視することで障害を検出し、障害検出時には仲介装置200に障害発生を通知する。これにより、仲介装置200では各サーバ100やネットワークでの障害発生検出をより確実且つ効率的に行うことができる。
また、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はない。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラオプション、ハードウェアかソフトウェアか、などが異なっていてもよい。サーバには、PostgreSQLなどのフリーソフトウェアやOracleなどの市販のソフトウェア、独自開発のソフトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サーバ100aはPostgreSQLでサーバ100bはOracleでも良い。
DBMSとしては、市中品(例えば、OracleやPostgreSQL)を使う場合は、データベース制御部102は、データベース管理部とデータベースサーバ管理部に機能を分けることによって、市中品を無改造で使うことができる。データベース管理部は、データベース101を直接操作するもので、例えばPostgreSQLの場合はpostmasterやpostgresに相当する。データベースサーバ管理部は、仲介装置200とデータベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを同期化する際のデータベース101のスナップショットを作成したり、そのスナップショットを他のサーバへ転送したりする処理を行う。また、上記データベースサーバ管理部を仲介装置200に配置しても良い。このような構成にすることで、冗長化されていない通常使用しているデータベースシステムにおいて、サーバ100とクライアント500の間に中間装置200を配置し、さらにサーバ100を増設するだけでサーバ100の冗長化を実現できる。これは既存のデータベースシステムをなるべく変更せず簡単に冗長化したい場合に好適である。
上記実施の形態では、スナップショットの作成にはDBMSサーバの種類に依存しない汎用のツール(同期化用サーバからSELECTクエリで全てのデータを取り出すツール)を用いることを前提とし、また、新規サーバでのリストアにも汎用のツール(新規サーバへINSERTクエリで全てのデータを入れるツール)を用いること前提としていた。これにより、DBMSサーバの種類に依存することなく本発明を実施できるだけでなく、異種DBMS間(例えばPostgreSQLとOracle)でのクエリ翻訳手段を併用することで同一システム内に異種DBMSを混在させることができる。異種DBMSサーバが混在したシステムとしては、例えば一台のOracleと二台のPostgreSQLを使った三重化システムが挙げられる。このように、高価なライセンスを必要とするサーバと、ライセンスが低廉又は無料のサーバを混在させることで、高価なライセンスを必要とするサーバの冗長化を低コストで実現できる。
また、上記実施の形態では、汎用のスナップショット作成ツールを用いることを前提としていたため、第1の実施の形態においてはスナップショット作成開始から作成完了までは新しいクエリを実行させていなかった。これは該スナップショット作成ツールでは、スナップショット作成開始以降にCOMMITされる更新クエリがスナップショットに反映されるか否かが確定しないためである。これにより、データベースサイズが大きい場合には、新しいクエリを実行できない時間が長期化するおそれがある。そこで、スナップショット作成中でもクエリを実行でき、且つ、スナップショット作成開始以降にCOMMITされる更新クエリはスナップショットに反映されないことが保証されているツールを用いると、スナップショット作成中でもクエリを実行できる。このようなツールは一般的にはDBMSサーバ固有のツールとして提供されている。例えば、PostgreSQLでは、pg_dumpやPostgreSQL8.0で機能追加されるPITR(Point In Time Recovery)機能が挙げられる。
スナップショット作成ツールとしてpg_dumpを用いた場合の動作について上記第1の実施形態の変形例として説明する。この場合、図17におけるステップS317が「pg_dumpの実行指示」に相当し、ステップS318がpg_dumpの開始、ステップS322がpg_dumpの完了となる。汎用ツールを用いた上記第1の実施形態ではステップS309のUPDATEクエリはスナップショット作成完了まで実行できないが、pg_dumpを用いた場合はステップS318の直後に実行できる。また、ステップS319のBEGINクエリは、ステップS338のUPDATEクエリと同様に、仲介装置200が受信すると即座にサーバ100aへ転送され処理される。このように、pg_dumpを用いればスナップショット作成中でもクエリの処理を全く中断する必要はない。
また、上記実施の形態では、システムへの組み込み要求(新規サーバのデータベース同期化要求)は当該新規サーバ100のデータベース制御部102が仲介装置200へ送信しているが、さらに保守端末などの他の装置から送信可能にしてもよいし、オペレータが仲介装置200に直接指示可能としても良い。
さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが、ハードウェアで実装しても良い。
また、上記実施の形態では、仮想サーバ800を構成する仲介装置200は1台のみであったが、複数台設けて冗長性を持たせることにより、より可用性の高い構成とすることも可能である。仲介装置を多重化させる技術については、例えば本願出願人による特開2003−345679号公報に記載されたものなどを用いればよい。
また、上記実施の形態では、クライアント500とサーバ100はそれぞれ別のネットワーク300,400に属するようにし、仲介装置200が両ネットワーク300,400を仲介するようなネットワーク構成としたが、本発明ではネットワーク構成は不問である。例えば、1つのネットワークにクライアント500,サーバ100,仲介装置200が属するように構成してもよい。
さらに、上記各実施の形態では、データベース一致検査装置600を多重化データベースシステムの外側、すなわちネットワーク400に接続していたが、多重化データベースシステムの内側のネットワーク300にデータベース一致検査装置600を接続するようにしてもよい。
100…サーバ、101…データベース、102…データベース制御部、200…仲介装置、201…サーバ管理表、202…トランザクション管理表、203…送信キュー、204…受信クエリ処理部、205…クエリ送信処理部、206…正当性判定部、207…応答送信処理部、208…同期化処理制御部、300,400…ネットワーク、500…クライアント、600…データベース一致検査装置。
Claims (12)
- 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバを同期化する方法であって、
仲介装置は、クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を備え、データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理において、
仲介装置は、クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、
スナップショット作成指示を受信したデータベースサーバは、データベースのスナップショットを作成してシステムから切り離されたデータベースサーバに対してスナップショットを転送し、
スナップショットを受信したデータベースサーバは、該スナップショットからデータベースを復元し、
仲介装置は、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する
ことを特徴とする多重化データベースシステムにおける同期化方法。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバを同期化する方法であって、
仲介装置は、クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を備え、各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理において、
仲介装置は、クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、
スナップショット作成指示を受信したデータベースサーバは、データベースのスナップショットを作成してシステムから切り離されたデータベースサーバに対してスナップショットを転送し、
スナップショットを受信したデータベースサーバは、該スナップショットからデータベースを復元し、
仲介装置は、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する
ことを特徴とする多重化データベースシステムにおける同期化方法。 - 仲介装置は、前記同期化処理の再試行を所定回数行っても同期化処理が完了しない場合には該同期化処理を中止する
ことを特徴とする請求項1又は2何れか1項記載の多重化データベースシステムにおける同期化方法。 - 仲介装置は、前記同期化処理を中止すると所定の出力手段に中止したことを出力する
ことを特徴とする請求項3記載の多重化データベースシステムにおける同期化方法。 - 仲介装置は、データベースサーバのシステムからの切り離し処理を行うと該データベースサーバに対して再起動指示を送出し、
データベースサーバは、仲介装置からの再起動指示に応じて自身の再起動を行うとともに再起動後に仲介装置に対してシステムへの組込要求を送出し、
仲介装置は、データベースサーバからシステムの組込要求を受信すると該データベースサーバと正常稼働中のデータベースサーバとの同期化処理を開始する
ことを特徴とする請求項1乃至4何れか1項記載の多重化データベースシステムにおける同期化方法。 - スナップショットを受信したデータベースサーバは、スナップショットからデータベースを復元すると仲介装置に対して差分情報の転送を要求し、
仲介装置は、データベースサーバからの差分情報転送要求の受信により、該データベースサーバにおけるスナップショットからのデータベースの復元完了を検出する
ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステム。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
前記仲介装置は、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部とを備え、
前記データベースサーバは、仲介装置からスナップショット作成指示を受信すると、データベースのスナップショットを作成してシステムから切り離されたデータベースサーバに対してスナップショットを転送するとともに、他のデータベースサーバからスナップショットを受信すると該スナップショットからデータベースを復元する制御部を備えた
ことを特徴とする多重化データベースシステム。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
前記仲介装置は、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部とを備え、
前記データベースサーバは、仲介装置からスナップショット作成指示を受信すると、データベースのスナップショットを作成してシステムから切り離されたデータベースサーバに対してスナップショットを転送するとともに、他のデータベースサーバからスナップショットを受信すると該スナップショットからデータベースを復元する制御部を備えた
ことを特徴とする多重化データベースシステム。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置であって、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部とを備えた
ことを特徴とする仲介装置。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置であって、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部とを備えた
ことを特徴とする仲介装置。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置を実現するプログラムであって、
コンピュータを、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部として機能させる
ことを特徴とする仲介プログラム。 - 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置を実現するプログラムであって、
コンピュータを、
クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込み、
前記同期化処理においては、
クライアントコンピュータから処理要求を受信すると当該処理要求を正常稼働中のデータベースサーバに中継するとともに差分情報として前記差分情報記憶部に記憶し、データベースサーバから受信した処理結果を前記差分情報とともに記憶し、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、データベースサーバにおけるスナップショットからのデータベースの復元完了を検出すると、該データベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出し、データベースサーバから受信した差分情報についての処理結果と差分情報記憶部に記憶した処理結果とを比較して一致しない場合には同期化処理を再試行する制御部として機能させる
ことを特徴とする仲介プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004369841A JP2007241325A (ja) | 2004-12-21 | 2004-12-21 | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム |
PCT/JP2005/006483 WO2005096155A1 (ja) | 2004-04-01 | 2005-04-01 | 多重化データベースシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004369841A JP2007241325A (ja) | 2004-12-21 | 2004-12-21 | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007241325A true JP2007241325A (ja) | 2007-09-20 |
Family
ID=38586853
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004369841A Pending JP2007241325A (ja) | 2004-04-01 | 2004-12-21 | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007241325A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009157785A (ja) * | 2007-12-27 | 2009-07-16 | Hitachi Ltd | 待機系計算機の追加方法、計算機及び計算機システム |
JP2010033398A (ja) * | 2008-07-30 | 2010-02-12 | Internatl Business Mach Corp <Ibm> | トランザクションを処理する本番システムと該本番システムのバックアップ・システムである代行システムとを含む本番−代行システム |
-
2004
- 2004-12-21 JP JP2004369841A patent/JP2007241325A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009157785A (ja) * | 2007-12-27 | 2009-07-16 | Hitachi Ltd | 待機系計算機の追加方法、計算機及び計算機システム |
JP2010033398A (ja) * | 2008-07-30 | 2010-02-12 | Internatl Business Mach Corp <Ibm> | トランザクションを処理する本番システムと該本番システムのバックアップ・システムである代行システムとを含む本番−代行システム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5223457B2 (ja) | 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法 | |
US20100333094A1 (en) | Job-processing nodes synchronizing job databases | |
JP2948496B2 (ja) | データ処理システム内で複写データ一貫性を維持するためのシステムおよび方法 | |
US7475204B2 (en) | Automatically managing the state of replicated data of a computing environment | |
US20040199812A1 (en) | Fault tolerance using logical checkpointing in computing systems | |
CA2657676C (en) | Failure tolerant transaction processing system | |
US7693888B2 (en) | Data synchronizer with failover facility | |
US6934247B2 (en) | Recovery following process or system failure | |
JP5467625B2 (ja) | トランザクションを処理する本番システムと該本番システムのバックアップ・システムである代行システムとを含む本番−代行システム | |
EP2434729A2 (en) | Method for providing access to data items from a distributed storage system | |
US20180150501A1 (en) | Database system, server device, computer program product, and information processing method | |
JP2017529628A (ja) | マルチテナントアプリケーションサーバ環境においてパッチングをサポートするためのシステムおよび方法 | |
CN102640108A (zh) | 已复制数据的监控 | |
CN102656565A (zh) | 已复制数据的故障切换和恢复 | |
EP2140349A2 (en) | Upgrading services associated with high availability systems | |
JP6520448B2 (ja) | 情報処理システム、情報処理装置及び情報処理装置制御方法 | |
JP2006338145A (ja) | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム | |
JP4870190B2 (ja) | データ処理方法、計算機、及びデータ処理プログラム | |
KR100404906B1 (ko) | 클러스터 시스템의 고 가용성 구현장치 및 방법 | |
JP2007241325A (ja) | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム | |
JP2007183728A (ja) | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム | |
JP5480046B2 (ja) | 分散トランザクション処理システム、装置、方法およびプログラム | |
JP2007241323A (ja) | 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム | |
JP2007241324A (ja) | 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム | |
JP2009098715A (ja) | 冗長システム装置並びに冗長システム装置におけるジョブの実行方法及び実行プログラム |