JP2007241324A - 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム - Google Patents

多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム Download PDF

Info

Publication number
JP2007241324A
JP2007241324A JP2004237438A JP2004237438A JP2007241324A JP 2007241324 A JP2007241324 A JP 2007241324A JP 2004237438 A JP2004237438 A JP 2004237438A JP 2004237438 A JP2004237438 A JP 2004237438A JP 2007241324 A JP2007241324 A JP 2007241324A
Authority
JP
Japan
Prior art keywords
server
database
database server
response
transaction
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
Application number
JP2004237438A
Other languages
English (en)
Inventor
Takeshi Mishima
健 三島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2004237438A priority Critical patent/JP2007241324A/ja
Priority to PCT/JP2005/006483 priority patent/WO2005096155A1/ja
Publication of JP2007241324A publication Critical patent/JP2007241324A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】 複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供する。
【解決手段】 仲介装置200は、各サーバ100間における処理結果の矛盾又はサーバ100の無応答を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに、選定した応答以外の応答を返したサーバ100をシステムから切り離し、サーバ100の無応答を検出したら該無応答のサーバ100をシステムから切り離し、システムから切り離されたサーバ100とシステムに組み込まれている正常稼働中のサーバ100との同期化処理を行い、同期化処理が完了したらシステムから切り離されたサーバ100を再びシステムに組み込む。
【選択図】 図1

Description

本発明は、複数のデータベースマネージメントシステム(DBMS)を並列動作させた多重化データベースシステムに関し、特に各データベース間の同期技術に関する。
従来の多重化データベースシステムは、例えば特許文献1に記載されたものが知られている。このシステムでは、図53に示すように、それぞれデータベースを備えた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号公報
しかしながら、上述の従来技術は、複数のデータベースにおける一トランザクションのデータベースの同期を図る方法であって、複数のトランザクション間でのデータベースの同期を制御することはできない。つまり、複数のトランザクションが並行に実行されている状態で、且つ、それらのトランザクションが同一のテーブルの同一行にほぼ同時にアクセスした場合には、データベースの同期が崩れたり、クライアントへ返す返答が一意に決まらないなどの問題が生じる。この問題点について以下に具体的に例示する。
図54に示すtest_tableという名前のテーブルを考える。この時、図55に示すトランザクション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のデータが異なる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSでは(1)の順で実行し、別のDBMSは(2)の順で実行した場合、2つのデータベースは同期状態(同じデータを保持している状態)が崩れてしまう問題が発生する。
また、別の例として、図56に示すトランザクション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が得られる。
つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実行したとしても、あるDBMSは(3)の順で実行し、別のDBMSは(4)の順で実行した場合、得られる値が異なってしまう。
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがない多重化データベースシステムにおける同期化方法を提供することにある。
本願発明は、複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける各データベースの同期化処理に関するものである。
ところで、各データベースサーバにおいて複数のトランザクションが並行して処理され、しかも各データベースサーバでトランザクション内での処理要求が互いに異なる順番で処理されると、仲介装置側からは、(1)あるデータベースサーバからの応答はあるが他のデータベースサーバからの応答はない、又は、(2)あるデータベースサーバからの応答と他のデータベースサーバからの応答とが矛盾している(異なっている)、と認識される場合がある。
そこで、本願発明では、仲介装置は、(a)データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、(b)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、(c)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む。
これにより、あるデータベースサーバからの応答はあるが他のデータベースからの応答がない場合には、当該応答のないデータベースサーバがシステムから切り離される。すなわち、各データベースサーバ間で処理要求の処理順序が異なり各データベースサーバ間で非同期になった(各データベースサーバ間で同一であるはずのデータが同一でなくなった)可能性を検出すると、あるデータベースサーバを基準として該データベースサーバと非同期になった可能性のあるデータベースサーバがシステムから切り離される。そして、正常稼働中のデータベースサーバとシステムから切り離されたデータベースサーバとの同期化処理が行われ、同期化処理が完了するとシステムから切り離されたデータベースサーバが再びシステムに組み込まれる。これにより、各データベースサーバの同期化が図られる。
また、本願発明では、仲介装置は、(i)各データベースサーバ間における処理結果の矛盾を検出し、(j)処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、(k)選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、(l)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、(m)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む。
これにより、あるデータベースサーバからの応答と他のデータベースサーバからの応答とが矛盾している場合には、各応答の中から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に転送する。
他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部102は、他のデータベースからスナップショットを受信すると、このスナップショットを用いて自身のデータベース101を復元する。データベース101の復元が完了すると仲介装置200に対して差分情報転送要求を送出する。後述するように、差分情報転送要求に応じて仲介装置200から差分情報が転送されるので、この差分情報を用いてデータベース101を復元する。
また、データベース制御部102は、仲介装置200から再起動指示を受信すると、データベース101及びデータベース制御部102の再起動を行う。この再起動処理は、データベース101及びデータベース制御部102のプロセスの再起動のみを行ってもよく、データベース101及びデータベース制御部102がサーバ100の起動時に自動起動するように設定されていればサーバ100全体の再起動でもよい。さらに、データベース制御部102は、自身が起動(再起動を含む)されると、仲介装置200に対してデータベース同期化要求(システムへの組込要求)を送信する。
仲介装置200は、本システム内のサーバ100を管理するサーバ管理表201と、トランザクションを管理するトランザクション管理表202と、同期化用に差分情報を蓄積する差分情報蓄積部203と、サーバ100に送信するクエリを一時保存する送信キュー204と、クライアント500及びデータベース一致検査装置600とサーバ100と間での処理の仲介やサーバ100の同期化制御などを行うサーバ制御部210とを備えている。
サーバ管理表201は、サーバが正常稼働中(active)か、障害などで停止している(down)か、という状態を保存している。図2にサーバ管理表の一例を示す。サーバ管理表201は、図2に示すように、サーバ100を識別するためのサーバIDと、サーバの稼働状態から構成されている。図2の例では、サーバ100aとサーバ100bとが登録されており、稼働状態は共に正常稼働を示すactiveである。また、本実施形態では、サーバIDとしてサーバ100に付されたIPアドレスを用いた。
トランザクション管理表202は、現在実行中の又は実行開始を保留されているトランザクションの有無を記憶する。図3にトランザクション管理表202の一例を示す。図3に示すように、トランザクション管理表202は、クライアントを一意に識別するクライアントIDとトランザクションを一意に識別するトランザクションIDから構成される。これらのペアは、トランザクション開始時にトランザクション管理表202に登録され、トランザクション終了時にトランザクション管理表202から削除される。クライアントIDは、例えばクライアント500等のIPアドレスやポート番号である。トランザクションIDは新しいトランザクションが発生する毎にサーバ制御部210が新たに割り振る。
差分情報蓄積部203は、サーバ同期化時にクライアント500及びデータベース一致検査装置600から受信する全てのクエリを蓄積する。図4に差分情報蓄積部203が蓄積している差分情報の一例を示す。差分情報蓄積部203の各データは、図4に示すように、クライアント500又はデータベース一致検査装置600が送信したクエリと、このクエリが所属するトランザクションIDとから構成される。トランザクションIDはトランザクション管理表202から取得する。同期化処理時における新たなクエリは、この差分情報蓄積部203の最後に追加される。つまり、上から古いクエリが蓄積されている。図4の例では、トランザクションID=1のBEGINが一番古く、COMMITが一番新しい。
送信キュー204は、各クライアント500及びデータベース一致検査装置600から受信したクエリを各サーバ100に送信するまで一時的に保存するバッファメモリである。図5に送信キュー204の一例を示す。送信キュー204の各データは、図5に示すように、クライアント500等が送信したクエリと、このクエリが所属するトランザクションIDと、サーバ100に送信したか否かを表す送信状態とから構成される。トランザクションIDはトランザクション管理表202から取得する。クライアント500等からの新たなクエリは、この送信キュー204の最後に追加される。つまり、上から古いクエリが蓄積されている。図5の例では、トランザクションID=1のBEGINが一番古く、トランザクションID=2のBEGINが一番新しい。この送信キュー204の送信状態は、クライアント500等からクエリを受信した際には「未送信」が設定され、正常稼働中の全てのサーバ100に送信されると「送信完了」が設定される。送信完了となったエントリは、直ちに又は所定期間経過後に送信キュー204から削除される。
サーバ制御部210は、通常の処理(同期化処理時以外の処理)として、クライアント500及びデータベース一致検査装置600からのパケットをネットワーク400経由で受信し、サーバ管理表201を見て正常稼働している全てのサーバ100へ該パケットを転送する。ここで、サーバ100へ転送するパケットは、送信キュー204に「未送信」として記憶されているクエリが対象であり、送信キュー204に記憶されている古いクエリから順に転送される。そして、サーバ100からのパケットをネットワーク300経由で受信し後述するパケットの正当性判断方法により1つ以上の該パケットのうち1つを選出し1つの正しいパケットをネットワーク400を経由して要求元のクライアント500等へ転送する。なお、同期化処理時には、「未送信」のクエリであっても新規トランザクションに属するクエリは送信せず、実行中のトランザクションに属するクエリのみを古い順に正常稼働中のサーバ100に送信する。
ここで、サーバ制御部210は、クライアント500等からの処理要求を解析してトランザクションの開始と終了を検出してトランザクション管理表202を更新する。トランザクション開始と終了をサーバ制御部210が検出する方法は、DBMSの種類によって異なる。例えば前述のPostgreSQLの場合は、トランザクションの開始はクライアント500等が「BEGIN」というSQLを送信した時であり、トランザクションの終了はクライアント500等が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、Oracleの場合は、トランザクションの開始はクライアント500等が有効なSQLを送信したときであり(明示的なトランザクションの開始を宣言するSQLは無い)、トランザクションの終了はクライアント500等が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、AUTO COMMITモードで動作する場合には、クライアント500等から受信したSQL文はそれぞれ1つの独立したトランザクションに属していると解釈できるので、クライアント500等からSQLを受信する毎に、該SQL実行前にトランザクションが開始されるとともにSQL実行後に当該トランザクションが終了したこととして扱うことができる。
また、パケットの正当性判断方法は、例えば、サーバ100が3台以上ある場合には多数決で決める方法や、受信したパケットを所定のルールに基づいて判断する方法がある。例えば、クライアント500からの「参照」要求に対して「更新成功」という応答が返ってきた場合、正常であればそのような応答はあり得ないので(参照成功など参照に関する応答のはず)、この応答パケットは正しくないと判断する。また、パケット中にデータ長フィールドがある場合、このデータ長フィールドの値と実際に受信したパケット長を比較し、異なる場合は正しくないと判断する。また、複数のサーバ100の中からMasterサーバを予め1台決めておき、このサーバ100からのパケットを常に正しいと判断する。また、上記複数の方法を併用する方法もある。例えば、3台で多数決を行った結果、パケットの中身が全てバラバラであり、多数派のパケットを決められない場合はMasterサーバのパケットを正しいと判断する。正常稼働しているサーバが1つだけの場合は、そのサーバからの応答パケットを正常と判断する。
サーバ制御部210は、正当ではない応答を送信したサーバ100、及び、所定時間内に応答を返さないサーバ100は障害と判断し、そのサーバ100についてサーバ管理表201から登録を削除することによりシステムから切り離すとともに、当該サーバ100に対して再起動指示を送信する。
さらに、サーバ制御部210は、ネットワーク300を介してサーバ100からデータベース同期化要求(システムの組み込み要求)を受信すると、このサーバ100と、正常稼働中のサーバ100とを同期化させる処理を行う。以下にその処理について説明する。ここで、以降の説明において、これからシステムに組み込まれるサーバを便宜上「新規サーバ」と呼ぶ。この新規サーバの組み込みは、システムにおけるサーバを増設する場合のほか、前述したようにシステムから切り離されたサーバを再組み込みする場合などに実施される。
サーバ制御部210は、サーバ100からデータベース同期化要求を受信すると、正常稼働中のサーバ100に対してスナップショットの作成指示を送出する。ここで、スナップショットの作成指示を送出するタイミングは、サーバ100においてトランザクションが実行中でないことが求められる。これはスナップショット作成中にトランザクションがROLLBACKするとデータの同期化が図れない場合があることを防止するためや、COMMITされていないために更新データがスナップショットに反映されないことを防止するためである。このためサーバ制御部210は、処理中のトランザクションが終了するまでスナップショットの作成指示の送出を待つとともに、スナップショット作成完了通知をサーバ100から受信するまでは新規トランザクションを開始しないようにしている。そして、新規トランザクションに係るSQLについては、スナップショット作成完了通知の受信後に、正常稼働中のサーバ100で処理するとともに、差分情報蓄積部203に蓄積する。差分情報蓄積部203に蓄積するクエリは、トランザクション制御SQL、参照系SQL及び更新系SQLを含む全てのSQLが対象となる。
サーバ制御部210がスナップショットの作成指示を送出すると、当該スナップショットは新規のサーバ100に転送され、このサーバ100からサーバ制御部210に対して差分情報転送要求が送出される。サーバ制御部210は、差分情報転送要求を受信すると、新規のサーバ100に対して差分情報蓄積部203に蓄積されているクエリを古いものから順次送信する。差分情報蓄積部203に蓄積されているSQLを全て送出すると、サーバ制御部210は、新規サーバ100をシステムに組み込むべくサーバ管理表201を更新する。
ここで、サーバ制御部210は、差分情報の送出中にクライアント500又はデータベース一致検査装置600から新たなクエリを受信する場合があるが、この場合は当該クエリを差分情報蓄積部203の最後に追加するとともに正常稼働中のサーバ100へ送信すれば良い。ただし、クライアント500等のクエリ送出頻度が高い場合などには、差分情報の送出終了まで、すなわち同期化終了まで長時間要する場合が考えられる。そこで、差分情報蓄積部203における未送信の差分情報が所定件数以下となったら、クライアント500等からのクエリを一時保留して差分情報の送出のみを行い、まず差分情報の送出を完了させる。そして、前述のように新規サーバ100をシステムに組み込むべくサーバ管理表201を更新した後に、保留していたクエリ処理を再開すると好適である。
クライアント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はそのパケットを受信する(ステップS1)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS2)。図8にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。
サーバ制御部210は、送信キュー204から当該「未送信」のクエリを取り出し、サーバ管理表201を見て正常稼働している全てのサーバ100に該パケットを送信する。この場合、サーバ100aと100bが正常稼働しているので、サーバ制御部210はサーバ100aとサーバ100bへ該パケットを転送する(それぞれステップS3とS4)。そして、各サーバ100への送信が完了したので送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信するが(ステップS5)、この時点では、未だ全ての応答パケットが揃っているわけではないので(この場合、サーバ100bからの応答パケットが来ていない)、サーバ制御部210は何もせずにサーバ100bからの応答パケットを待つ。そして、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100bから受信すると(ステップS6)、これで全ての応答パケットが揃ったので、サーバ制御部210はそれらの応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS7)。この場合、2つの応答パケットは共にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS8)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS9)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aと100bへ該パケットを転送する(それぞれステップS10とS11)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にUPDATE完了したことを通知する応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS12)。この時点では全ての応答パケットが全て揃っているわけではないので、サーバ制御部210は何もせず待機する。そして、正常にUPDATE完了したことを通知する応答パケットをサーバ100bから受信すると(ステップS13)、これで応答パケットが全て揃ったので、サーバ制御部210はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS14)。この場合、2つの応答パケットは共にUPDATE成功したことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS15)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定する(実際にデータベースを更新する)SQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS16)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aとサーバ100bへ該パケットを転送する(それぞれステップS17とS18)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にCOMMIT完了したことを通知するパケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS19)。この時点では全ての応答パケットが全て揃っているわけではないので、サーバ制御部210は何もせず待機する。そして、正常にCOMMIT完了したことを通知する応答パケットをサーバ100bから受信すると(ステップS20)、これで応答パケットが全て揃ったので、サーバ制御部210はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS21)。この場合、2つの応答パケットは共にCOMMIT成功したことを示すパケットであるため、障害は無いと判断する。COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS22)。このときのトランザクション管理表202は再び初期状態(すなわち空)になる。サーバ制御部210は応答パケットの1つをクライアント500aへ転送する(ステップS23)。
次に、サーバ100bが故障などで障害になった場合の動作を図9から図11を参照して説明する。初期状態では、データベース101aと101bは完全に同一であり、サーバ管理表201は前述した図7のようになっているとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。
クライアント500aが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS30)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS31)。図10にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。
サーバ制御部210は、送信キュー204から当該「未送信」のクエリを取り出し、サーバ管理表201を見て正常稼働している全てのサーバ100、この場合、サーバ100aと100bへ該パケットを転送する(それぞれステップS32とS33)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信するが(ステップS34)、この時点では、未だ全ての応答パケットが揃っているわけではないので(この場合、サーバ100bからの応答パケットが来ていない)、サーバ制御部210は何もせずにサーバ100bからの応答パケットを待つ。そして、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100bから受信すると(ステップS35)、これで全ての応答パケットが揃ったので、サーバ制御部210はそれら応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS36)。この場合、2つの応答パケットは共にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS37)。
ここで、サーバ100bは、ステップS35で応答パケットを返した後、故障などの障害が発生してダウンしたものとする(ステップS38)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS39)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aと100bへ該パケットを転送する(それぞれステップS40とS41)。この時点では、サーバ制御部210はサーバ100bのダウンを知らないので、サーバ100bが正常稼働しているという情報がサーバ管理表201に格納されたままである。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にUPDATE完了したことを通知する応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS42)。この時点では応答パケットが全て揃っているわけではないので、サーバ制御部210は何もせず待機する。しかし、サーバ100bはダウンしているのでサーバ100bからの応答パケットはいつまで経っても仲介装置200には届かない。これによりサーバ制御部210はタイムアウトし、サーバ100bのダウンを検知する。そして、サーバ制御部210はサーバ管理表201のサーバ100bをactiveからdown(サーバ停止状態)に書き換えることにより当該サーバ100bをシステムから切り離す(ステップS43)。そのときのサーバ管理表201を図11に示す。次に、サーバ制御部210は、システムから切り離したサーバ100bに対して再起動指示を送出する(ステップS44)。もっとも、ここではサーバ100bはダウンしているので、当該再起動指示に対する処理が行われることはない。次に、サーバ制御部210は応答パケットをクライアント500aへ転送する(ステップS45)。ここでは、クライアント500aにとって、サーバ100bが障害になったかどうかは認識せず、今までと同様に仮想サーバ800からサービスを受けることができることに注目すべきである。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS46)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aのみへ該パケットを転送する(ステップS47)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にCOMMIT完了したことを通知する応答パケットを送信し、仲介装置200がこの応答パケットを受信する(ステップS48)。COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS49)。このときのトランザクション管理表202は再び初期状態(すなわち空)になる。サーバ制御部210は応答パケットをクライアント500aへ転送する(ステップS50)。
ここで、ステップS47によって、サーバ100aのデータベース101aは、クライアント500aからのUPDATE(ステップS39)が反映されているのに対して、サーバ100bのデータベース101bにはクライアント500aからのUPDATE(ステップS39)が反映されていない、つまり、データベース101aとデータベース101bは非同期状態になったことに注目すべきである。
次に、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合について図12及び図13のシーケンスチャートを参照して説明する。ここでは、図54のテーブルtable_testに対して、図55のトランザクションT1をクライアント500aが発行し、同図のトランザクションT2をクライアント500bが発行したものとする。前述したように、この2つのトランザクションT1,T2の処理後におけるデータベース101のデータは、各トランザクションの処理順序によって異なった内容になることに注意されたい。
図12に示すように、クライアント500aがトランザクションT1を開始するクエリ(BEGIN)を仲介装置200に送信し(ステップS101)、一方、クライアント500bがトランザクションT2を開始するクエリ(BEGIN)を仲介装置200に送信する(ステップS102)。仲介装置200のサーバ制御部210は、各クエリをそれぞれ正常稼働中のサーバ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のサーバ制御部210は、当該クエリをそれぞれ正常稼働中のサーバ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のサーバ制御部210は、トランザクションT1のUPDATEクエリについての応答を一方のサーバ100aから受信したが(ステップS119)、他方のサーバ100bからの応答は受信していないので当該応答を待つ(ステップS123)。これは、前述したように、サーバ制御部210において、各サーバ100a及び100bからの応答を互いに比較して正当性を判断するためである。同様に、サーバ制御部210は、トランザクションT2のUPDATEクエリについての応答を一方のサーバ100bから受信したが(ステップS121)、他方のサーバ100aからの応答は受信していないので当該応答を待つ(ステップS124)。
前述のようにサーバ100bにおいてトランザクションT1のUPDATEクエリの処理はロック解除待ちされているので(ステップS122)、サーバ制御部210における当該クエリに対する応答待ち(ステップS123)はタイムアウトする(ステップS125)。これにより、サーバ制御部210は、サーバ100bが障害になったと判断し、前記ステップS124の応答待ちをキャンセルし、さらにサーバ管理表201におけるサーバ100bの稼働状態をdownに変更することで当該サーバ100bをシステムから切り離す(ステップS126)。そして、サーバ制御部210は、図13に示すように、システムから切り離したサーバ100bに対して再起動指示を送信するとともに(ステップS127)、サーバ100bからの応答待ちはキャンセルしてサーバ100aからの応答をクライアント500aに返す(ステップS128)。
サーバ100bは、仲介装置200からの再起動指示を受信すると、自身の再起動を開始する(ステップS129)。
トランザクションT1のUPDATEクエリについて応答を受信したクライアント500aは、更新を確定するクエリ(COMMIT)を仲介装置200に送信する(ステップS130)。仲介装置200のサーバ制御部210は、クライアント500aからクエリを受信すると、サーバ管理表201を参照して正常稼働中のサーバ100aに当該クエリを転送する(ステップS131)。
サーバ100aでは、トランザクションT1のCOMMITクエリを処理することによりロックが解除されてトランザクションT2の処理が再開可能となる(ステップS132)。これにより、サーバ100aはトランザクションT1のCOMMITクエリに対する応答を仲介装置200に返し(ステップS133)、仲介装置200のサーバ制御部210は当該応答をクライアント500aに転送する(ステップS134)。次いで、サーバ100aはトランザクションT2のUPDATEクエリに対する応答を仲介装置200に返し(ステップS135)、仲介装置200のサーバ制御部210は当該応答をクライアント500bに転送する(ステップS136)。
トランザクションT2のUPDATEクエリについて応答を受信したクライアント500bは、更新を確定するクエリ(COMMIT)を仲介装置200に送信する(ステップS137)。仲介装置200のサーバ制御部210は、クライアント500bからクエリを受信すると、サーバ管理表201を参照して正常稼働中のサーバ100aに当該クエリを転送する(ステップS138)。サーバ100aは当該クエリを処理して応答を仲介装置200に返し(ステップS139)、仲介装置200のサーバ制御部210は当該応答をクライアント500bに転送する(ステップS140)。
ここで、システムから切り離されたサーバ100bの再起動が完了したものとする(ステップS141)。サーバ100bは、再起動が完了すると仲介装置200に対してデータベース同期化要求を送信する(ステップS142)。仲介装置200のサーバ制御部210は、正常稼働中のサーバ100aと協働して、サーバ100aのデータベース101aと、サーバ100bのデータベース101bとを同期化させる処理を行う(ステップS143)。この同期化処理の詳細については後述する。サーバ制御部210は、同期化処理が完了したら、サーバ管理表201についてサーバ100bの稼働状態をactiveに変更することで当該サーバ100bを再びシステムに組み込む(ステップS144)。
以上の処理により、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合であっても、各サーバ100間でデータベース101の同期が保たれる。
次に、図54のテーブルtest_tableに対して、図56のトランザクションT3をクライアント500aが発行し、同図のトランザクションT4をクライアント500bが発行した場合について図14及び図15のシーケンスチャートを参照して説明する。この2つのトランザクションT3,T4の処理後におけるデータベース101のデータは、各トランザクションの処理順序には影響されない。しかしながら、前述したように、トランザクションT4におけるSELECTの結果は各トランザクションT3,T4の処理順序によって異なった内容になることに注意されたい。
クライアント500aがトランザクションT3を開始するクエリ(BEGIN)を仲介装置200に送信すると(ステップS201)、仲介装置200のサーバ制御部210は、サーバ管理表201を参照して正常稼働中のサーバ100a及び100bに転送する(ステップS202,S203)。サーバ制御部210は、各サーバ100a及び100bからの応答を受信すると(ステップS204,S205)、正当な応答の1つをクライアント500aに転送する(ステップS206)。
次いで、クライアント500aはトランザクションT3の更新クエリ(UPDATE)を仲介装置200に送信する(ステップS207)。一方、クライアント500bはトランザクションT4を開始するクエリ(BEGIN)を仲介装置200に送信する(ステップS208)。
仲介装置200のサーバ制御部210は、トランザクションT3のUPDATEクエリを正常稼働中のサーバ100a及び100bに転送するとともに(ステップS209,S210)、トランザクションT4のBEGINクエリを正常稼働中のサーバ100a及び100bに転送する(ステップS211,S212)。そして、仲介装置200のサーバ制御部210は、トランザクション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のサーバ制御部210は、トランザクション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のサーバ制御部210は、トランザクションT4のSELECTクエリに対する応答が、各サーバ100a及び100b間で不一致となっているので、何れかのサーバ100a又は100bを選定し、このサーバ100aからの応答を正当なものとする(ステップS229)。ここで、サーバ100の選定方法としては、例えば予めMasterサーバを定めておいて、このMasterサーバを選定する方法、最初に応答を返したサーバを選定する方法、ラウンドロビンにより選定サーバを順次選定する方法、ランダムに選定する方法、各サーバの処理能力・処理負荷などにより選定する方法などが挙げられる。本実施の形態では、サーバ100aをMasterサーバとして該サーバ100aを正当な応答を返したサーバとして選定する。サーバ制御部210は、正当でない応答を返したサーバ100bについて、サーバ管理表201の稼働状態をdownに変更することにより当該サーバ100bをシステムから切り離す(ステップS230)。そして、図15に示すように、当該サーバ100bに対して再起動指示を送信する(ステップS231)。
サーバ100bは、仲介装置200からの再起動指示を受信すると、自身の再起動を開始する(ステップS232)。
仲介装置200のサーバ制御部210は、選定したサーバ100aから受信した、トランザクションT4のSELECTクエリに対する応答及びトランザクションT3のCOMMITクエリに対する応答を、それぞれ要求元のクライアント500a,500bに転送する(ステップS233,S234)。以降、各クライアント500a,500bからのクエリは、正常稼働中のサーバ100aで処理する。図15の例では、クライアント500bがトランザクションT4のCOMMITクエリを仲介装置200に送信すると(ステップS235)、仲介装置200は当該クエリを正常稼働中のサーバ100aに転送する(ステップS236)。そして、仲介装置200は、当該クエリに対する応答をサーバ100aから受信すると(ステップS237)、この応答を要求元のクライアント500bに返す(ステップS238)。
ここで、システムから切り離されたサーバ100bの再起動が完了したものとする(ステップS239)。サーバ100bは、再起動が完了すると仲介装置200に対してデータベース同期化要求を送信する(ステップS240)。仲介装置200のサーバ制御部210は、正常稼働中のサーバ100aと協働して、サーバ100aのデータベース101aと、サーバ100bのデータベース101bとを同期化させる処理を行う(ステップS241)。この同期化処理の詳細については後述する。サーバ制御部210は、同期化処理が完了したら、サーバ管理表201についてサーバ100bの稼働状態をactiveに変更することで当該サーバ100bを再びシステムに組み込む(ステップS242)。
以上の処理により、並行処理される複数のトランザクションについて、各サーバ100における処理順序が異なった場合であっても、クライアント500には1つの正しい応答のみが処理結果として返される。
なお、この例では、2つのトランザクションT3及びT4に属するクエリの処理順序が異なっても当該トランザクションT3及びT4に属する各クエリの中で同一行を更新するクエリは存在しないので、クエリの処理順序が異なることによる各データベース101間の不整合は生じない。したがって、この例に限定して考えると、データベース101の同期化のための各処理(ステップS230〜S232,S239〜S242)は不要であるとも考えられる。しかし、本実施の形態では、何らかの原因でデータベース101の不整合が発生し、当該不整合について前記ステップS229を契機に検出した場合にも対処できるように、データベース101の同期化のための各処理を実施するようにした。
次に、前記ステップS143及びS241における同期化処理の詳細について説明する。本発明における同期化処理では、同期化処理開始時において正常稼働しているサーバ100でデータベース101のスナップショットを作成し、このスナップショットを同期化対象の新規サーバ100に転送する。そして新規サーバ100においてスナップショットからデータベース101の復元を行う。さらに、この処理中に受信したクライアント500からのクエリを仲介装置200において差分情報として蓄積する。そして、新規サーバ100がスナップショットからのデータベース101の復元が完了したら仲介装置200から差分情報を取得して、この差分情報を処理する。
なお、前述したように、サーバ100は自身が起動されるとデータベース同期化要求を仲介装置200に送信するので、同期化処理の実施は、仲介装置200からの再起動指示に応じた再起動時に限られない。すなわち、サーバ100が障害となってシステムから切り離され、その後にシステムに再び組み込む際にも実施される。また、システムを構成するサーバを増設する場合にも実施される。
以下に、サーバ100bをシステムに組み込む場合の同期化動作を図16から図24を参照して説明する。このとき注目すべきポイントは、クライアント500a及び500bに対するサービスを続けたままサーバ100bを追加する、つまり、システムダウンさせずにデータベース101aと101bを同期させることである。
データベース101bはデータベース101aと同期がとれていない状態、つまり、同一ではない状態である。例えば、データベース101bは、再起動直前のデータ又は障害発生直前のデータを保持しているかもしれないし、全く新しいサーバの場合には、データを全く持っていない状態かもしれない。本発明では、前者の場合でも古いデータは削除し、データベース101bはデータを全く保持していないものとしてシステムに組み込む。つまり、古いデータを保持している必要はない。
ここでは、サーバ管理表201は図19のようになっているとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。
図16に示すように、クライアント500aが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS301)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS302)。図20にこのときのトランザクション管理表202を示す。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aへ該パケットを転送する(ステップS303)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ100aから受信すると(ステップS304)、応答パケットをクライアント500aへ転送する(ステップS305)。
ここで、サーバ100bが再起動したものとする(ステップS306)。これにより、サーバ100bのデータベース制御部102bは、データベース同期化要求を仲介装置200へ送信する(ステップS307)。
データベース同期化要求を受信したサーバ制御部210は、トランザクション管理表202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとともに、実行中トランザクションの情報を記録しておく(ステップS308)。図20より、クライアント500a,トランザクション番号3のトランザクションが実行中なので、データベース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション開始要求を受け取った場合は、その要求をサーバ100aへ転送することを遅らせる(ステップS309)。つまり、同期化動作は実行中のトランザクションが全くない状態で始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュー204での保留という手段で実現する。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS310)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS308で記憶したトランザクション情報からデータベース同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aへ該パケットを転送する(ステップS311)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にUPDATE完了したことを通知する応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS312)。サーバ制御部210は、応答パケットをクライアント500aへ転送する(ステップS313)。
次に、クライアント500bが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS314)。サーバ制御部210は、このパケットによりトランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500bのIPアドレスとトランザクション番号を登録する(ステップS315)。図21にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始クエリは送信キュー204に保持したままサーバ100aへは転送しない(ステップS316)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.11.1.1へ送信する(ステップS317)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS308で記憶したトランザクション情報からデータベース同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aのみへ該パケットを転送する(ステップS318)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100aは正常にCOMMIT完了したことを通知する応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS319)。COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS320)。この時のトランザクション管理表202を図22に示す。サーバ制御部210は応答パケットをクライアント500aへ転送する(ステップS321)。
ここで、新規サーバ100bからのデータベース同期化要求時に実行していたトランザクションが全て無くなったので、サーバ制御部210は同期化動作を開始する(ステップS322)。具体的には、図17に示すように、まず、サーバ制御部210は、正常稼働しているサーバ100aに対して同期化指示(スナップショット作成指示)のパケットを送信する(ステップS323)。なお、前記ステップS322において、トランザクション管理表202に記録されているトランザクションがデータベース同期化要求時に実行中であったものか、又は、その後にクライアント500から受信したものかを判定するには、前記ステップS308で記録しておいたデータベース同期要求時のトランザクション情報を参照すればよい。
同期化指示を受け取ったサーバ100aのデータベース制御部102aは、データベース101aのスナップショットを作り出す(ステップS324)。ここで、このスナップショットは、同期化指示を受け取った時点でのデータベース全体のバックアップデータやデータベースを復元するための情報であり、同期化指示後の更新は反映されていないことに注目すべきである。
サーバ100aのデータベース制御部102aは、スナップショット作成が完了すると(ステップS325)、その旨を仲介装置200へ通知する(ステップS326)。
データベース制御部102aは作成したスナップショットをサーバ100bへ転送し、サーバ100bのデータベース制御部102bは、サーバ100aから受信したスナップショットからデータベースを復元する(ステップS327)。このスナップショットの転送とデータベースの復元は、データベース101aのサイズが大きければ大きいほど時間がかかるが、クライアントからのデータベースアクセスと並行して実行されるのでクライアントに対するサービスを止めることはない。
スナップショット作成完了通知を受け取った仲介装置200のサーバ制御部210は、クライアント500へのサービスを再開する。この場合、処理せずに送信キュー204に保持していた、クライアント500bからのBEGINを含んだパケットの処理を再開する。すなわち、サーバ制御部210は、転送せずに保持していたクライアント500bからのBEGIN SQLを含んだパケットを送信キュー204から取り出して差分情報蓄積部203に保存するとともに(ステップS328)、サーバ100aへ転送する(ステップS329)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。
なお、ここではステップS329の処理をステップS327の後に説明したが、ステップS327の動作(スナップショットの転送)はクライアントへのサービスを妨げるものではないので、スナップショットの転送中にステップS329や後述のステップS330が行われてもよい。
サーバ100aは、トランザクションが正常に開始されたことを通知する応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS330)。仲介装置200は、この応答パケットをクライアント500bへ転送する(ステップS331)。
次いで、クライアント500bがテーブルtest_tableの更新SQL(UPDATE)のパケットを仲介装置200に送信すると(ステップS332)、サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該クエリを差分情報蓄積部203に保存するとともに(ステップS333)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS334)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。ここで、サーバ100aはUPDATEに失敗し、その旨を通知する応答パケットを仲介装置200に送信したものとする(ステップS335)。仲介装置200は、この応答パケットをクライアント500bに送信する(ステップS336)。
UPDATE失敗の応答パケットを受信したクライアント500bは、トランザクションを取り消すSQL(ROLLBACK)のパケットを仲介装置に送信する(ステップS337)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該SQLを差分情報蓄積部203に保存するとともに(ステップS338)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS339)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。そして、サーバ100aから正常にトランザクションがROLLBACKされたことを通知する応答パケットを受信すると(ステップS340)、トランザクション管理表202から当該トランザクションの登録を削除するとともに(ステップS341)、この応答パケットをクライアント500bに送信する(ステップS342)。この時点での差分情報蓄積部203を図23に示す。また、トランザクション管理表202は空になる。
ここで、サーバ100bにおいてスナップショットからのデータベース101bの復元が完了したものとする(ステップS343)。サーバ100bはデータベース101bの復元が完了すると差分情報転送要求を仲介装置200に送信する(ステップS344)。仲介装置200のサーバ制御部210は、差分情報転送要求を受信すると、図18に示すように、差分情報蓄積部203に蓄積されているデータを古いものから順にサーバ100bに転送する処理を開始する(ステップS345)。
前記ステップS345で差分情報蓄積部203に蓄積されている全てのクエリが転送・処理されることでデータベース101aと101bは完全に一致した状態(同期状態)になるが、この転送処理中にクライアント500から新たなクエリを受信する場合がある。例えば、図18に例示するように、仲介装置200は、クライアント500bから新規トランザクションを開始するクエリ(BEGIN)を受信する(ステップS346)。仲介装置200は、当該新規トランザクションをトランザクション管理表202に登録する(ステップS347)。そして、当該クエリを送信キュー204に入れる。次いで、送信キュー204から当該クエリを取り出し、差分情報蓄積部203の最後に当該クエリを追加するとともに(ステップS348)、正常稼働中のサーバ100aに送信する(ステップS349)。そして、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。次いで、サーバ100aから応答パケットを受信すると(ステップS350)、当該応答パケットをクライアント500bに転送する(ステップS351)。
このように差分情報転送中にクライアント500から受信したクエリは、正常稼働中のサーバ100で処理するとともに、差分情報蓄積部203に蓄積していく。この処理を継続していくと、やがて差分情報蓄積部203に蓄積されているクエリは全て新規サーバ100bに転送され、差分情報蓄積部203は空になり、これを契機に差分情報転送処理が終了する(ステップS352)。これによりデータベース101aと101bは完全に一致した状態(同期状態)となるので同期化処理を終了する。以上で同期化処理は完了するので、図13及び図15を参照して前述したように、新規サーバ100bについてのサーバ管理表201の稼働状態をactiveに変更することでシステムに当該サーバ100bを追加することができる(図13のステップS144,図15のステップS242)。
このような同期化処理により、もともとシステムに組み込まれていたが再起動や障害等のためにシステムから切り離されたサーバであっても、新規のサーバであっても、理論的には幾らでも追加できる。つまり、追加できるサーバ数に制限はない。
なお、上記実施形態では、クライアント500a及び500bからの処理要求のみ多重化データベースシステムで処理する場合について説明したが、データベース一致検査装置600からの処理要求も同様に処理すればよい。これは、多重化データベースシステムから見るとデータベース一致検査装置600もクライアントコンピュータの1つだからである。ところで、データベース一致検査装置600は、前述したように、定期的に又は必要に応じてデータベース一致検査用の参照クエリを仲介装置200に送信する。これにより、何らかの理由でデータベース101間でデータの矛盾が生じた場合であっても、当該クエリによりデータベース101間の矛盾が検出され上記同期化処理が実行される。これにより、データベース101間の同期をより確実に図ることができる。
以上のように本実施の多重化データベースシステムによれば、複数のトランザクションを並行処理しても各データベース間で矛盾の生じることがなく同期状態を保つことができる。
本実施の形態の変形例について説明する。上記実施形態におけるデータベース同期化処理では、差分情報転送中にクライアント500から新たなクエリを受信すると、当該クエリを差分情報蓄積部203に追記していた。このような処理では、差分情報の処理に時間がかかる場合や、クライアントからの受信するクエリの受信間隔が短い場合には、差分情報蓄積部203のデータが何時までたっても空にならなかったり空になるまで長時間要することになり、結果として新規サーバ100bの組み込み処理完了まで長時間要することが考えられる。そこで、差分情報転送中に差分情報蓄積部203のエントリ数が所定数以下となったら、新規クエリの処理を一時保留して専ら差分情報の転送のみを行って差分情報蓄積部203を空にしてしまうと良い。以下、このような処理について図24を参照して説明する。
ここでは、新規のサーバ100bがスナップショットからデータベース101bの復元処理中であるとする(ステップS400)。そして、サーバ100bにおいてデータベース101bの復元処理が完了し(ステップS401)、サーバ100bが仲介装置200に差分情報転送要求を送信した時点で(ステップS402)、差分情報蓄積部203には所定件数以上の差分情報が蓄積されているものとする。図24の例では、ステップS403〜ステップS407によるUPDATEのクエリが最新の差分情報として差分情報蓄積部203に記憶されているものとする。
図24に示すように、仲介装置200のサーバ制御部210は、サーバ100bから差分情報転送要求を受信すると、前述したように、差分情報蓄積部203に記憶されている各クエリを古いものから順にサーバ100bに転送する処理を開始する(ステップS408)。
サーバ制御部210は、クライアント500bから新たなクエリを受信したとする。図24の例では、サーバ制御部210は、クライアント500bからデータを追加するSQL(INSERT)を含むパケットを受信する(ステップS409)。差分情報転送中に新規クエリを受信したサーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、差分情報蓄積部203に蓄積されている未転送のクエリの件数が所定件数より多い場合には、このクエリを差分情報蓄積部203の最後に追記するとともに(ステップS410)、正常稼働中のサーバ100aに該パケットを転送する(ステップS411)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ制御部210は、INSERTが成功したことを示す応答パケットをサーバ100aから受信すると(ステップS412)、この応答パケットをクライアント500bに転送する(ステップS413)。
ここで、仲介装置200からサーバ100bへの差分情報の転送は並行して行われており、これにより差分情報蓄積部203に記憶されている未転送のクエリが所定数以下となったとする。
サーバ制御部210は、クライアント500bからデータを更新するSQL(UPDATE)を含むパケットを受信すると(ステップS414)、受信したクエリを送信キュー204に入れる。ここでは、差分情報蓄積部203に蓄積されている未転送のクエリの件数が所定件数以下となっているので、この新規クエリの処理は保留する(ステップS415)。すなわち、この新規クエリの差分情報蓄積部203への記憶及びサーバ100aへの転送は行わない。この保留処理は、差分情報蓄積部203に記憶されているクエリを全てサーバ100bに転送し、サーバ100bがシステムへ組み込まれるまで継続する。
差分情報の転送が終了すると(ステップS416)、差分情報蓄積部203に蓄積されている全てのクエリが転送・処理されることでデータベース101aと101bは完全に一致した状態(同期状態)になる。以上で同期化処理は完了するので、サーバ制御部210は、サーバ管理表201のサーバ100bの稼働状態をactiveに変更することでシステムにサーバ100bを追加する(ステップS417)。なお、このステップS417の処理は、図13のステップS144及び図15のステップS242に相当する。
以降、サーバ制御部210は、前記ステップS415で保留していた新規クエリの処理を再開する。この時点では既に同期化が終了しているので、以降の処理は図6を参照して前述したものと同様となる。すなわち、サーバ制御部210は、当該クエリを送信キュー204から取り出して正常稼働中のサーバ、この場合サーバ100a及び100bに転送する(ステップS418,S419)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。そして、各サーバ100a及び100bから受信した応答パケットを比較して障害発生の有無をチェックし(ステップS420〜S422)、正常な応答パケットの1つをクライアント500bへ転送する(ステップS423)。
このような処理により、差分情報の転送中にクライアントから受信したクエリは、未転送の差分情報が所定数より多い場合には差分情報蓄積部203への記憶及びサーバ100bへの転送が行われる。一方、未転送の差分情報が所定数以下の場合には新規クエリは保留される。これにより、差分情報の処理に時間がかかる場合やクライアントからの受信するクエリの受信間隔が短い場合であっても、データベースの同期を短時間に行うことができる。なお、閾値となる「所定件数」は、大きく設定すると新規クエリの保留時間が長くなる一方、小さく設定すると同期化処理完了までの時間が長引くことになるというトレードオフの関係にある。したがって、この「所定件数」は各装置の処理負荷やネットワーク速度などシステムの要件に応じて個々に最適な値を設定すればよい。また、本変形例において閾値を0以下に設定すれば、図16〜図23を参照して前述した実施例と同様の処理となる。
(第2の実施の形態)
本発明の第2の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、同期化処理における仲介装置から新規のサーバに転送する差分情報の内容にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
第1の実施の形態では差分情報蓄積部203にはクライアント500から受信した全てのクエリを保存・転送していた。これにより、同期化処理を実施している間に正常稼働中のサーバ100で処理されたクエリを、新規のサーバ100においても忠実に再現することができるので、完全な同期化を図ることができる。
ところで、仲介装置から新規のサーバに転送する差分情報は専ら同期処理用にのみ用いられるので、該同期化において不要なクエリは転送する必要がない。具体的には、参照系クエリのSQL(SELECT)は不要である。なお、ここでは、SELECT FOR UPDATE文は、SELECT文の一種であるが更新処理に影響を与えるので、ここでは参照系クエリではなく更新系クエリとして取り扱うものとする。
そこで、本実施の形態では、第1の実施の形態と異なり、クライアント500から受信したクエリのうち、参照系クエリを除いたものを差分情報として新規のサーバ100に転送する。例えば、クライアント500から図25(a)に示すようなSQL文を受信したとすると、新規のサーバ100には図25(b)に示すようなSQL文を転送してやればよい。
このような処理を行うため、本実施の形態に係るサーバ制御部210は、第1の実施の形態と同様にクライアント500からクエリを受信した全てのクエリを差分情報蓄積部203に記憶する。そして、差分情報を新規サーバ100に転送するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を新規サーバ100に転送する。他の処理については第1の実施の形態と同様である。
本実施の形態によれば、第1の実施の形態と比較すると、新規サーバ100は同期化処理時において参照系クエリを処理する必要がないので同期化処理の短縮化を図ることができる。これは、複雑な参照系SQLや集合関数を含む参照系SQLなど処理負荷が大きい参照系SQLをクライアント500が発行している場合には特に有効である。他の効果については第1の実施の形態と同様である。
本実施の形態の変形例としては、サーバ制御部210が、同期化処理中にクライアント500からクエリを受信し、このクエリを差分情報として差分情報蓄積部203に蓄積するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を差分情報蓄積部203に記憶する。そして、差分情報の転送は差分情報蓄積部203に記憶されている全てのクエリを対象に行う方法が挙げられる。この変形例は、差分情報蓄積部203の記憶容量をさらに節約できるという効果を有する。
(第3の実施の形態)
本発明の第3の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、データベース同期化動作中における差分情報の蓄積処理にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
第1の実施の形態では、サーバ制御部210は、クライアント500から受信した全てのパケットを差分情報蓄積部203に保存していた。すなわち、トランザクション制御SQL、参照系SQL及び更新系SQLの全てのSQLについて差分情報蓄積部203に保存し、サーバ100には差分情報蓄積部203に記憶されている全てのデータを古いものから順に送信していた。
一方、本実施の形態では、サーバ制御部210は、データベース同期化動作中にクライアント500から受信したパケットのうち、トランザクションの開始SQL(BEGIN)や確定SQL(COMMIT)や取消SQL(ROLLBACK)等のトランザクション制御SQL、及び、SELECTなど参照系のSQLについては保存せず、UPDATEやINSERTなどの更新系のSQLのうち正常稼働中のサーバ100でCOMMITされたもののみを差分情報蓄積部203に保存する。
ここで注意すべき点は、差分情報蓄積部203には、クライアント500から受信した順番ではなく、正常稼働中のサーバ100で処理された順番に更新クエリを蓄積することである。これは、更新対象が重複する更新クエリについては、その処理順序によってデータベース101の内容が異なってしまう可能性があるためである。
このような処理を実現するために、本実施の形態では、図26に示すような差分情報一時蓄積部205を新たに設けた。この差分情報一時蓄積部205のデータ構造は、差分情報蓄積部203と同様に、クライアントから受信したクエリと該クエリが属するトランザクションのIDとからなる。
サーバ制御部210は、同期化処理中にクライアント500からクエリを受信すると、更新系のもののみを順次、差分情報一時蓄積部205に蓄積するとともに、正常稼働中のサーバ100に転送する。一方、更新係以外のものについては、差分情報一時蓄積部205に蓄積することなく正常稼働中のサーバ100に転送する。
ここで、サーバ制御部210は、正常稼働中のサーバ100から更新クエリの実行が失敗したことを示す応答パケットを受信すると、当該更新クエリを差分情報一時蓄積部205から削除する。また、正常稼働中のサーバ100からトランザクションのROLLBACKが正常に完了したことを示す応答パケットを受信すると、サーバ制御部210は、当該トランザクションに属する全ての更新クエリを差分情報一時蓄積部205から削除する。一方、正常稼働中のサーバ100からトランザクションのCOMMITが正常に終了した応答パケットを受信すると、サーバ制御部210は、当該トランザクションに属する更新クエリについて差分情報一時蓄積部205から差分情報蓄積部203に順次移動させる。
以上のような処理により差分情報蓄積部203には、正常稼働中のサーバ100でCOMMITされた更新クエリのみが、その処理された順番で蓄積される。したがって、後に新規サーバ100から差分情報転送要求があったら、差分情報蓄積部203に記憶されている差分情報を蓄積されている順番で新規のサーバ100に転送すればよい。なお、新規のサーバ100のデータベース101は、仲介装置200からの更新クエリを順次処理するのみなので、この更新クエリはオートコミットモードで処理する。
このように、本実施の形態によれば、同期化処理には不要の参照系クエリ、BEGINやROLLBACKなどのトランザクション制御SQLを差分情報蓄積部203に蓄積することがないので、第1の実施形態と比較すると、差分情報の転送時間及びサーバでの処理時間を短縮化できる。他の効果については第1の実施の形態と同様である。
なお、本実施形態では、クライアント500から受信したクエリは、当該クエリの属するトランザクションが正常稼働中のサーバ100でCOMMITされた時点で、差分情報一時記憶部205から差分情報記憶部203へ移動されていたが、その変形例として、当該クエリが正常稼働中のサーバ100で正常処理された時点で移動するようにしてもよい。この場合には、トランザクションがROLLBACKしたら該トランザクションに属する更新クエリを差分情報記憶部203から削除すればよい。このような処理は、例えばPostgreSQLのように、更新順序によって行の順番が変わるDBMSのデータベースを完全一致させるために有効である。
(第4の実施の形態)
本発明の第4の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、差分情報蓄積部の構造にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
本実施の形態に係る仲介装置200は、図27に示すように、第1の実施の形態とは異なり差分情報蓄積部203は設けず、送信キュー206に第1の実施形態における差分情報蓄積部203と送信キュー204の機能を統合させている。
本実施の形態に係る送信キュー206のデータ構造について図28を参照して説明する。送信キュー206は、クライアント500から受信したクエリの内容と、そのクエリの属するトランザクションIDと、各サーバ100への送信状態とを記憶する。トランザクションIDは、第1の実施の形態と同様に、トランザクション管理表202から取得される。各サーバ100への送信状態は、システムに属する各サーバ100毎に記憶される。
送信キュー206の各サーバ100への送信状態は、「未送信」,「送信完了」,「保留」の3つの値を取りうる。「未送信」は、クライアント500から受信したクエリが未だ当該サーバ100に送信されていない状態である。「送信完了」は、当該サーバ100への送信が完了した状態である。「保留」は、新規サーバ100のシステムへの組み込み処理中に、当該サーバ100へ転送されることなく保留されている状態である。全てのサーバ100についての送信状態が「送信完了」になると、当該エントリは送信キュー206から削除される。
次に、サーバ制御部210の動作について説明する。サーバ制御部210は、クライアント500からクエリを受信すると、当該クエリがトランザクション開始SQL(BEGIN)の場合は当該トランザクションに対して新たなトランザクションIDを振り出してトランザクション管理表202に登録する。そして、当該クエリ内容,新規トランザクションID,各サーバ100の送信状態を「未送信」で送信キュー206に登録する。また、クライアント500から受信したクエリがトランザクション開始SQL(BEGIN)以外の場合は、当該クエリの属するトランザクションIDをトランザクション管理表202から取得し、当該クエリ内容,トランザクションID,各サーバ100の送信状態を「未送信」で送信キュー206に登録する。
サーバ制御部210は、送信キュー206に記録されているクエリを、その送信状態が「未送信」となっているサーバ100に対して送信し、当該サーバ100についての送信状態を「送信完了」に変更する。全てのサーバ100について送信状態が「送信完了」になったクエリについては送信キュー206から削除する。
仲介装置200からクエリを受信した各サーバ100は、当該クエリの処理を行い、応答パケットを仲介装置200に返す。仲介装置200のサーバ制御部210は、各サーバ100から受信した応答パケットを対比して障害発生の有無を確認し、正常な応答パケットの1つをクライアント500に返す。
一方、サーバ100から正当でない応答が仲介装置200に返ってきたり、応答そのものが返ってこない場合には、当該サーバ100に障害が発生したものとしてシステムから切り離す。具体的には、サーバ管理表201における当該サーバの稼働状態を「down」に変更するとともに、送信キュー206の送信状態の欄について当該サーバに関する項目を削除する。図29は、送信キュー206が図28に示すような状態でサーバ100bがシステムから切り離された場合の送信キュー206の一例である。
次に、新規サーバ100からデータベース同期化要求(システムへの組み込み要求)を受信した場合の動作について説明する。サーバ制御部210は、第1の実施の形態と同様に、データベース同期化要求受信時に実行中のトランザクションが終了するまで、新規トランザクションの開始は保留する。具体的には、クライアント500から受信したクエリが新規トランザクションに係るものの場合には、送信状態を「保留」として送信キュー206に保存する。一方、クライアント500から受信したクエリがデータベース同期化要求時に実行中のトランザクションに係るものの場合には、送信状態を「未送信」として送信キュー206に保存する。図30は、送信キュー206が図29に示すような状態でクライアント500から新たにクエリを受信した場合の送信キュー206の一例である。図30の例では、三行目のトランザクションID=3のBEGINを除いて上のクエリから順に(古いクエリから順に)、トランザクションID=2のSELECT,トランザクションID=1のCOMMIT,トランザクションID=2のCOMMITの順に正常稼働中のサーバ100aへ転送され、その送信状態が「未送信」から「送信完了」に変更される。トランザクションID=3のBEGINは、新規のサーバ100bからスナップショット作成完了通知を受けた後に転送されることになる。
そして、データベース同期化要求受信時に実行中のトランザクションに係るクエリを全て正常稼働中のサーバ100に送信し終えると、サーバ制御部210は、送信キュー206に組み込み対象である新規のサーバ100の項目を追加する。ここで、送信キュー206には送信状態が「保留」となっているクエリが記憶されている場合がある。この場合、サーバ制御部210は、送信キュー206に記憶されているクエリーに対して、新規サーバ100についての送信状態を「保留」とする。図31は、図30の送信キュー206に対して新規サーバ100bの登録をした場合を示している。また、サーバ制御部210は、データベース同期化要求受信時に実行中のトランザクションに係るクエリを全て正常稼働中のサーバ100に送信し終えると、第1の実施の形態と同様に、正常稼働中のサーバ100に対して同期化指示(スナップショットの作成指示)を送出する。
サーバ制御部210は、正常稼働中のサーバ100からスナップショット作成完了通知を受信すると、正常稼働中のサーバ100へのクエリの送信を再開する。具体的には、まず送信キュー206に記憶されている全てのクエリ(この時点では全てのクエリの送信状態は全てのサーバ100について「保留」になっている)について、正常稼働中のサーバ100の送信状態を「未送信」に変更する。そして、サーバ制御部210は、送信状態が「未送信」のクエリを当該サーバ100に順次送信し、送信が完了したら送信状態を「送信完了」に修正する。また、新たにクライアント500から受信したクエリは、正常稼働中のサーバ100についての送信状態は「未送信」、新規のサーバ100についての送信状態は「保留」にして送信キュー206に記憶する。図32は、図31の送信キュー206に対してスナップショット完了通知受信後に新たなクエリを受信した場合を示している。また、図33のように、正常稼働中のサーバ100aに対しては「送信完了」となっても新規のサーバ100bに対しては「送信完了」になっていない(「保留」になっている)ので、送信キュー206から当該クエリは削除しない。
新規のサーバ100が正常稼働中のサーバ100から受信したスナップショットを用いてデータベース101の復元が完了すると、サーバ制御部210は新規のサーバ100から差分情報転送要求を受信する。サーバ制御部210は、送信キュー206に記憶されているクエリであって、送信状態が「保留」となっているものを当該「保留」となっていたサーバ100、すなわち新規のサーバ100に古いものから順次送信する。送信したクエリについては、送信キュー206における当該サーバ100の送信状態を「送信完了」にし、全てのサーバ100についての送信状態が「送信完了」になったら当該エントリは削除する。なお、送信状態が「保留」となっているクエリの送信中にクライアント500からクエリを受信した場合、正常稼働中のサーバについては送信状態を「未送信」、新規のサーバ100については送信状態を「保留」にして、当該クエリを送信キュー206に記憶する。
サーバ制御部210は、送信状態が「保留」となっているクエリが送信キュー206に存在しなくなると、サーバ管理表201に新規のサーバ100を「active」として追加することで、当該サーバ100をシステムに組み込む。以降の動作は各サーバ100が正常動作している場合のものと同様になる。
以上のように本実施の形態に係る仲介装置200では、第1の実施の形態における差分情報蓄積部203と送信キュー204の機能を、1つの送信キュー206に統合しているので、メモリの利用効率や処理効率が向上する。また、送信キュー206の各クエリに対して、各サーバ100への送信状態を記憶するようにしているので、新規サーバ100を組み込む際には当該サーバ100の送信状態を追加すればよい。これにより、一度に複数台のサーバ100をシステムに組み込むことができる。他の作用効果については第1の実施の形態と同様である。
なお、本実施の形態は、第1の実施の形態の変形例として説明したが、上記第2〜第3の実施の形態において同様の変形を適用できることは言うまでもない。
(第5の実施の形態)
本発明の第5の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第4の実施の形態と異なる点は、差分情報の蓄積方法にある。他の構成・動作等については第4の実施の形態と同様なので、ここでは相違点のみを説明する。
上述の第1の〜第4の実施の形態では、仲介装置200が正常稼働中のサーバ100にスナップショットの作成指示を送信するタイミングは、正常稼働中のサーバ100において実行中のトランザクションが無くなったときである。具体的には、新規サーバ100からのデータベース同期化要求を受信した時点で実行中のトランザクションについて正常稼働中のサーバ100で処理を行うのと並行して、データベース同期化要求受信時以降にクライアント500から受信した新規トランザクションの開始要求を保留していた。そして、データベース同期化要求を受信した時に実行中のトランザクションが無くなった時点で、スナップショットの作成指示を送信している。これは、DBMSによっては、スナップショット作成時にトランザクションが実行中だと、そのトランザクションに属する更新クエリによるデータ更新がスナップショットに反映されるか否かが不確定となる場合を考慮したためである。
一方、本実施の形態では、サーバ100として、スナップショット作成時に実行中のトランザクションに属する更新クエリ及びスナップショット作成処理中に受信した更新クエリについては、当該スナップショットには反映しないという動作を行うものを用いる。すなわち、もしスナップショット作成中にトランザクションが終了しCOMMITされても、そのトランザクションによる更新はスナップショットに反映されない。これにより、本実施の形態に係る仲介装置200のサーバ制御部210は、データベース同期化要求受信時に実行中のトランザクションの終了を待つことなく、スナップショット作成指示の送信及び新規トランザクションの開始を行うことができる。なお、仲介装置200がスナップショット作成完了を待つ必要がないので、サーバ100のデータベース制御部102は、スナップショット作成が完了しても仲介装置200には完了通知を送信する必要はない。
このような処理を行うため、本実施の形態に係る仲介装置200のサーバ制御部210は、送信キュー206に記憶されている各クエリについて、全てのサーバ100について送信状態が「送信完了」となり、且つ、当該クエリに属するトランザクションが終了した場合に、当該クエリの登録を削除する。
以下、新規サーバ100をシステムに組み込む際の動作について図34〜図38を参照して説明する。いま、システムにはサーバ100aのみが組み込まれており、これから新たにサーバ100bを組み込むものとする。
サーバ制御部210は、新規サーバ100bからデータベース同期化要求を受信すると、正常稼働中のサーバ100aに対して同期化指示(スナップショット作成指示)を送信する。新規サーバ100bが仲介装置200に対してデータベース同期化要求を送信した際の送信キュー206の一例を図34に示す。前述したように、送信キュー206に記憶されたクエリは、当該クエリが送信完了しても該クエリの属するトランザクションが完了していないものは削除されずに残っている。同期化指示を受信したサーバ100aは、スナップショットの作成を開始する。ここで作成されるスナップショットは、送信キュー206に記憶されているクエリは反映されていないものである。また、サーバ制御部210は、新規サーバ100bからデータベース同期化要求を受信すると、送信キュー206に記憶されている全てのクエリについて、当該新規サーバ100bの送信状態を「保留」にして追加する。この時の、送信キュー206の一例を図35に示す。
サーバ制御部210は、データベース同期化要求受信時以降にクライアント500からクエリを受信すると、正常稼働中のサーバ100aについては送信状態を「未送信」、新規サーバ100bについては送信状態を「保留」にして送信キュー206に順次追加する。そして、送信状態が「未送信」となっているクエリについては当該「未送信」のサーバ100aに対して順次転送し、送信状態を「送信完了」に変更していく。このとき、図36に示すように、送信キュー206に記憶されているクエリは、正常稼働中のサーバ100aについてはトランザクション単位で送信状態が「送信完了」となっているが、新規サーバ100bについては「保留」となっているので、ここではクエリの削除は行わない。
一方、仲介装置200からスナップショットの作成指示を受信したサーバ100aは、作成したスナップショットを新規のサーバ100bに送信する。新規のサーバ100bのデータベース制御部102bは、受信したスナップショットからデータベース101bを復元し、仲介装置200に差分情報転送要求を送信する。
差分情報転送要求を受信したサーバ制御部210は、送信キュー206に記憶されている送信状態が「保留」となっているクエリを差分情報として順次新規サーバ100bに送信し、図37に示すように、送信状態を「送信完了」に変更する。そして、前述したように、全てのサーバについて送信状態が「送信完了」となり、且つ、当該クエリのトランザクションが完了したら、そのクエリを削除する。以降、送信状態が「保留」のクエリの送信中にクライアント500からクエリを受信すると、図38に示すように、正常稼働中のサーバ100aの送信状態を「未送信」,新規サーバ100bの送信状態を「保留」で送信キュー206へ記憶する。そして、送信状態が「保留」のクエリが無くなった時点でデータベース101aとデータベース101bの同期が完了したことになる。
本実施形態によれば、システムで用いるサーバ100の機能的要件が限定されるためサーバ選択の幅が狭くなるものの、仲介装置200での処理が簡略化されるので処理効率の高いものとなる。
なお、本実施の形態では、サーバ100として、(1)トランザクション実行中でもスナップショットの作成開始ができ、(2)スナップショット作成中にクエリを処理可能であり且つ当該クエリがスナップショットに反映されないものを用いたが、(1’)トランザクション実行中でもスナップショットの作成開始ができるが、(2’)スナップショット作成中にはクエリを処理できない又はスナップショット作成中にクエリを処理すると当該処理がスナップショットに反映される場合があるようなサーバ100を用いることもできる。
ただし、この場合には、新規サーバ100からデータベース同期化要求を受信すると直ちに正常稼働中のサーバ100に対してスナップショット作成指示を送信してよいが、スナップショット作成開始から作成完了までは正常稼働中のサーバ100に対するクエリの送信を保留する必要がある。つまり、スナップショット作成中にクライアント500から受信するクエリは送信キューに保持しておく。また、仲介装置200がスナップショットの作成完了を認識するために、スナップショットの作成が完了したサーバ100は、スナップショット作成完了を仲介装置200に通知する必要がある。これにより、本実施の形態よりもサーバ選択の幅が広いものとなる。
(第6の実施の形態)
本発明の第6の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、第1の実施の形態では同期化処理中におけるクライアントからのクエリの処理とスナップショットの作成を同一のサーバで行っていたが、本実施の形態ではそれぞれ別のサーバで行うところにある。このため、図39に示すようにサーバ100は3台以上必要になる。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
以下に本実施の形態に係る多重化データベースシステムにおけるデータベース同期化処理時の動作について図40〜図48を参照して説明する。
今、データベース101cはデータベース101a及び101bと同期がとれていない状態、つまり、同一ではない状態とする。例えば、データベース101cは、再起動直前のデータ又は障害発生直前のデータを保持しているかもしれないし、全く新しいサーバの場合には、データを全く持っていない状態かもしれない。本発明では、前者の場合でも古いデータは削除し、データベース101cはデータを全く保持していないものとしてシステムに組み込む。
ここでは、サーバ管理表201は図43のようになっているとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。
図40に示すように、クライアント500aが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS500)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS501)。図44にこのときのトランザクション管理表202を示す。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び101bへ該パケットを転送する(ステップS502,S503)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、応答パケットを各サーバ100から受信すると(ステップS504,S505)、各応答パケットを比較して障害有無をチェックし(ステップS506)、正当な応答パケットの1つをクライアント500aへ転送する(ステップS507)。
ここで、新規サーバ100cは再起動されたものとする。これにより、サーバ100cのデータベース制御部102cは、データベース同期化要求(組込要求)を仲介装置200へ送信する(ステップS508)。
データベース同期化要求を受信したサーバ制御部210は、トランザクション管理表202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとともに、実行中トランザクションの情報を記録しておく(ステップS509)。図44より、クライアント500a,トランザクション番号3のトランザクションが実行中なので、データベース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション開始要求を受け取った場合は、その要求をサーバ100へ転送することを遅らせる(ステップS510)。つまり、同期化動作は実行中のトランザクションが全くない状態で始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュー204での保留という手段で実現する。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS511)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS509で記憶したトランザクション情報を参照することでデータベース同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び100bへ該パケットを転送する(ステップS512,S513)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、正常稼働中の各サーバ100a及び100bから応答パケットを受信(ステップS514,S515)するまで待ち、各応答パケットが揃うと該パケットから障害の有無を判定する(ステップS516)。そして、サーバ制御部210は、正当な応答パケットの1つをクライアント500aへ転送する(ステップS517)。
次に、クライアント500bが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS518)。サーバ制御部210は、このパケットによりトランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500bのIPアドレスとトランザクション番号を登録する(ステップS519)。図45にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始クエリは送信キュー204に保持したまま、正常稼働中のサーバ100a,100bへは転送しない(ステップS520)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.11.1.1へ送信する(ステップS521)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS509で記憶したトランザクション情報を参照することでデータベース同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び100bへ該パケットを転送する(ステップS522,S523)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、正常稼働中の全てのサーバ100a及び100bから応答パケットを受信(ステップS524,S525)するまで待ち、全ての応答パケットが揃ったら該パケットから障害の有無をチェックする(ステップS526)。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS527)。この時のトランザクション管理表202を図46に示す。サーバ制御部210は正当な応答パケットの1つをクライアント500aへ転送する(ステップS528)。
ここで、新規サーバ100cからのデータベース同期化要求時に実行していたトランザクションが全て無くなったので、サーバ制御部210は同期化動作を開始する(ステップS529)。具体的には、まず、サーバ制御部210は、正常稼働中のサーバ100a及び100bの中から同期化用サーバ100を1つ選定する(ステップS530)。本実施の形態ではサーバ100bを選択したものとする。そして、同期化用サーバ100bに対して同期化指示(スナップショット作成指示)を送出する(ステップS531)。また、サーバ管理表201のサーバ100bについて状態を「sync」に変更し、サーバ100bを一旦システムから切り離す(ステップS532)。ここで、サーバ管理表201の状態「sync」とは、当該サーバ100が同期処理中であることを意味する。この時のサーバ管理表201を図47に示す。なお、前記ステップS529において、トランザクション管理表202に記録されているトランザクションがデータベース同期化要求時に実行中であったものか、又は、その後にクライアント500から受信したものかを判定するには、前記ステップS509で記録しておいたデータベース同期要求時のトランザクション情報を参照すればよい。
同期化指示を受け取った同期化用サーバ100bのデータベース制御部102bは、データベース101bのスナップショットを作り出す(ステップS533)。ここで、このスナップショットは、同期化指示を受け取った時点でのデータベース全体のバックアップデータやデータベースを復元するための情報であり、同期化指示後の更新は反映されていないことに注目すべきである。
同期化用サーバ100bのデータベース制御部102bは、スナップショット作成が完了すると(ステップS534)、作成したスナップショットを新規サーバ100cへ転送する。このスナップショットの転送とデータベースの復元は、データベース101bのサイズが大きければ大きいほど時間がかかるが、クライアントからのデータベースアクセスと並行して実行されるのでクライアントに対するサービスを止めることはない。
新規サーバ100cのデータベース制御部102cは、同期化用サーバ100bから受信したスナップショットからデータベースを復元する(ステップS535)。
仲介装置200のサーバ制御部210は、サーバ100bについてサーバ管理表201の状態を「sync」に変更すると(前記ステップS532)、クライアント500へのサービスを再開する。ここで、クライアント500から処理要求を処理するサーバは、状態が「active」のサーバ100aである。つまり、同期化用サーバ100bは、一時的にシステムから切り離され専ら同期化処理のみを行うことになる。また、ここでは、処理せずに送信キュー204に保持していた、クライアント500bからのBEGINを含んだパケットの処理を再開する。すなわち、サーバ制御部210は、転送せずに保持していたクライアント500bからのBEGIN SQLを含んだパケットを送信キュー204から取り出して差分情報蓄積部203に保存するとともに(ステップS535)、正常稼働中のサーバ100aへ転送する(ステップS536)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。
正常稼働中のサーバ100aは、応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS537)。仲介装置200は、この応答パケットをクライアント500bへ転送する(ステップS538)。
次いで、クライアント500bがテーブルtest_tableの更新SQL(UPDATE)のパケットを仲介装置200に送信すると(ステップS539)、サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該クエリを差分情報蓄積部203に保存するとともに(ステップS540)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS541)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。ここで、サーバ100aはUPDATEに失敗し、その旨を通知する応答パケットを仲介装置200に送信したものとする(ステップS542)。仲介装置200は、この応答パケットをクライアント500bに送信する(ステップS543)。
UPDATE失敗の応答パケットを受信したクライアント500bは、トランザクションを取り消すSQL(ROLLBACK)のパケットを仲介装置に送信する(ステップS544)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該SQLを差分情報蓄積部203に保存するとともに(ステップS545)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS546)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。そして、サーバ100aから正常にトランザクションがROLLBACKされたことを通知する応答パケットを受信すると(ステップS547)、トランザクション管理表202から当該トランザクションの登録を削除するとともに(ステップS548)、この応答パケットをクライアント500bに送信する(ステップS549)。この時点での差分情報蓄積部203を図48に示す。また、トランザクション管理表202は空になる。
ここで、新規サーバ100cにおいてスナップショットからのデータベース101cの復元が完了したものとする(ステップS550)。新規サーバ100cはデータベース101cの復元が完了すると差分情報転送要求を仲介装置200に送信する(ステップS551)。仲介装置200のサーバ制御部210は、差分情報転送要求を受信すると、差分情報蓄積部203に蓄積されているデータを古いものから順に新規サーバ100c及び同期化用サーバ100bに転送する処理を開始する(ステップS552)。
前記ステップS552で差分情報蓄積部203に蓄積されている全てのクエリが転送・処理されることでデータベース101aとデータベース101b及び101cとは完全に一致した状態(同期状態)になるが、この転送処理中にクライアント500から新たなクエリを受信する場合がある。例えば、図42に示すように、仲介装置200は、クライアント500bから新規トランザクションを開始するクエリ(BEGIN)を受信する(ステップS553)。仲介装置200は、当該新規トランザクションをトランザクション管理表202に登録する(ステップS554)。そして、当該クエリを送信キュー204に入れる。次いで、送信キュー204から当該クエリを取り出し、差分情報蓄積部203の最後に当該クエリを追加するとともに(ステップS555)、正常稼働中のサーバ100aに送信する(ステップS556)。そして、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。次いで、サーバ100aから応答パケットを受信すると(ステップS557)、当該応答パケットをクライアント500bに転送する(ステップS558)。
このように差分情報転送中にクライアント500から受信したクエリは、正常稼働中のサーバ100で処理するとともに、差分情報蓄積部203に蓄積していく。この処理を継続していくと、やがて差分情報蓄積部203に蓄積されているクエリは全て新規サーバ100c及び同期化用サーバ100bに転送され、差分情報蓄積部203は空になり、これを契機に差分情報転送処理が終了する(ステップS559)。これによりデータベース101aとデータベース101b及び101cは完全に一致した状態(同期状態)となる。以上で同期化処理は完了するので、図13及び図15を参照して前述した第1の実施の形態と同様に、同期化用サーバ100b及び新規サーバ100cについてのサーバ管理表201の稼働状態をともにactiveに変更することでシステムに当該サーバ100b及び100cを追加することができる(図13のステップS144,図15のステップS242)。なお、この時のサーバ管理表201を図49に示す。
以上のように本実施の形態によれば、サーバ100のデータベース同期化処理の際には、正常稼働中の複数のサーバ100の中から同期化処理用のサーバ100を選定し、この同期化処理用サーバ100を用いてスナップショットの作成・転送を行っているので、これと並行してクライアント500からの処理要求を正常稼働中の他のサーバ100を用いて処理できる。したがって、組込処理とクライアントからの処理要求に係る処理が異なるサーバで処理されるので負荷が分散されるとともに、スナップショットの作成中にもクライアント500からの処理要求に応じることができるので、クライアント500に対して円滑なサービスの提供を継続できる。
なお、本実施の形態は第1の実施の形態の変形例として説明したが、本実施の形態に対して更に上述した第2〜第5の実施形態における変形を施しても本発明を実施できる。
(第7の実施の形態)
本発明の第7の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。本実施の形態に係る多重化データベースシステムが前述の第6の実施の形態と異なる点は、同期化用サーバ及び新規サーバへの差分情報の送出タイミングにある。
すなわち、上記第6の実施の形態では、仲介装置は新規サーバから差分情報転送要求を受信すると、新規サーバ及び同期化用サーバの双方に同時に差分情報の送出を行っていた。一方、本実施の形態では、同期化用サーバに対する差分情報の送出処理と新規サーバに対する差分情報の送出処理とを非同期でそれぞれ並行して実施する。このため、本実施の形態に係る仲介装置は、複数のサーバに対する差分情報を互いに独立して蓄積する必要があるので、前述の第4の実施の形態に係る仲介装置と同じ構成とした。すなわち、送信キュー206において、各サーバ毎に差分情報を記憶する。
仲介装置200は、前記各実施の形態とは異なり、新規サーバ100からだけでなく同期化用サーバ100からも差分情報転送要求を受信する。そして、差分情報転送要求を受信すると、送信キュー206における要求元のサーバについての送信状態が「保留」となっているクエリを、当該要求元のサーバに順次送出し、当該サーバについての送信状態を「送信完了」に更新する。そして、差分情報転送要求元のサーバについて「保留」となっているクエリの送出が完了すると、当該サーバについてサーバ管理表201を更新してシステムに組み込む。差分情報転送処理時におけるクライアント500からのクエリの処理など他の処理については前述した第4の実施の形態と同様である。例えば、全てのサーバ100について送信状態が「送信完了」になったクエリは送信キュー206から削除する点などは、第4の実施の形態と同様である。
同期化用サーバ100は、仲介装置200から同期化指示(スナップショット作成指示)を受信すると、スナップショットの作成を開始する。次に、スナップショットの作成が完了すると、仲介装置200に対して差分情報転送要求を送信するとともに、新規サーバ100に対するスナップショットの転送を開始する。この差分情報転送要求に応じて仲介装置200から差分情報を順次受信するので、同期化用サーバ100はこの差分情報の処理を行う。
次に、新規サーバ100をシステムに組み込む際の動作について図50及び図51のシーケンスチャートを参照して具体的に説明する。
今、新規サーバ100cが仲介装置200にデータベース同期化要求(システムへの組込要求)を送信し、仲介装置200がサーバ100bを同期化用サーバとして選定して、該同期化用サーバ100bに同期化指示を送信するとともに(ステップS601)、該サーバ100bをシステムから切り離したとする(ステップS602)。
同期化用サーバ100bは、仲介装置200から同期化指示を受信すると(ステップS601)、スナップショットの作成を開始する(ステップS603)。そして、スナップショットの作成が完了すると(ステップS604)、仲介装置200に対して差分情報転送要求を送信するとともに(ステップS605)、当該スナップショットを新規サーバ100cへ転送する処理を開始する(ステップS606)。
仲介装置200は、同期化用サーバ100bから差分情報転送要求を受信すると、当該サーバ100bに対する差分情報の送出を開始する(ステップS607)。具体的には、送信キュー206に蓄積されているクエリのうち同期化用サーバ100bについての送信状態が「保留」となっているものを、古いものから順に同期化用サーバ100bに送信する。そして、当該クエリについて送信キュー206における同期化用サーバ100bの送信状態を「送信完了」に更新する。
同期化用サーバ100bへの差分情報転送中に、クライアント500からクエリ(図50ではUPDATE)を受信すると(ステップS608)、仲介装置200は当該クエリを差分情報として記憶する(ステップS609)。具体的には、当該クエリを、正常稼働中のサーバ100aについては送信状態を「未送信」で、同期化用サーバ100b及び新規サーバ100cについては送信状態を「保留」にして、送信キュー206に蓄積する。次に、仲介装置200は、当該クエリを含んだパケットを正常稼働中のサーバ100aに転送し(ステップS610)、送信キュー206のサーバ100aについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100aからの応答パケット(ステップS611)を、要求元のクライアント500に返す(ステップS612)。
新規サーバ100cは、スナップショットに基づきデータベース101cの復元を完了すると(ステップS613)、仲介装置200に対して差分情報転送要求を送信する(ステップS614)。
仲介装置200は、新規サーバ100cから差分情報転送要求を受信すると(ステップS614)、当該サーバ100cに対する差分情報の送出を開始する(ステップS615)。具体的には、送信キュー206に蓄積されているクエリのうち新規サーバ100cについての送信状態が「保留」となっているものを、古いものから順に新規サーバ100cに送信し、当該クエリについて新規サーバ100cの送信状態を「送信完了」に更新する。本実施の形態は、同期化用サーバ100bへの差分情報転送と、新規サーバ100cへの差分情報転送は、互いに並行して非同期で行うことが特徴的な点である。
同期化用サーバ100b及び新規サーバ100cへの差分情報転送中に、クライアント500からクエリ(図50ではINSERT)を受信すると(ステップS616)、仲介装置200は当該クエリを差分情報として記憶する(ステップS617)。具体的には、当該クエリを、正常稼働中のサーバ100aについての送信状態を「未送信」にして、同期化用サーバ100b及び新規サーバ100cについて送信状態を「保留」で送信キュー206に蓄積する。次に、仲介装置200は、正常稼働中のサーバ100aに転送し(ステップS618)、送信キュー206のサーバ100aについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100aからの応答パケット(ステップS619)を、要求元のクライアント500に返す(ステップS620)。
仲介装置200は、同期化用サーバ100b又は新規サーバ100cについて送信状態が「保留」となっているクエリが送信キュー206からなくなると、差分情報の送出が完了したことになるので、当該サーバ100b,100cについてそれぞれサーバ管理表201を更新してシステムに組み込む。
通常は、図51に示すように、同期化用サーバ100bへの差分情報送出は新規サーバ100cより先に終了し(ステップS621)、仲介装置200は、同期化用サーバ100bについてサーバ管理表201の稼働状態をactiveに変更してシステムに組み込む(ステップS622)。
以降、新規サーバ100cへの差分情報転送中にクライアント500からのクエリ(図51ではUPDATE)は、正常稼働中のサーバ100a及び前記ステップS622で組み込まれたサーバ100bで処理される。すなわち、まず、当該クライアント500からクエリを受信すると(ステップS623)、仲介装置200は当該クエリを差分情報として記憶する(ステップS624)。具体的には、当該クエリを、正常稼働中のサーバ100a及び100bについて送信状態を「未送信」にして、新規サーバ100cについて送信状態を「保留」で送信キュー206に蓄積する。次に、仲介装置200は、正常稼働中のサーバ100a及び100bに転送し(ステップS625,S626)、送信キュー206のサーバ100a及び100bについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100a及び100bからの応答パケット(ステップS627,S628)の正当性をチェックし(ステップS629)、正しい応答の1つを要求元のクライアント500に返す(ステップS630)。
次に、仲介装置200は、新規サーバ100cについて送信状態が「保留」となっているクエリが送信キュー206からなくなると、差分情報の送出が完了したことになるので(ステップS631)、当該新規サーバ100cについてサーバ管理表201の稼働状態を「active」で追加してシステムに組み込む(ステップS632)。
本実施の形態によれば、上記第6の実施の形態と比較して、同期化用サーバ100のシステムの組込復帰の時期が早くなるので、システムに組み込まれているサーバの数が通常時よりも少なくなっている期間を短縮することができる。したがって、システムの耐故障性が向上する。
なお、本実施形態では、同期化用サーバ100bが新規サーバ100cよりも先にシステムに組み込まれた例について説明したが、状況によっては新規サーバ100cの方が先にシステムに組み込まれる場合も考えられる。
以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なものであり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれるものである。
例えば、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はない。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラオプション、ハードウェアかソフトウェアか、などが異なっていてもよい。サーバには、PostgreSQLなどのフリーソフトウェアやOracleなどの市販のソフトウェア、独自開発のソフトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サーバ100aはPostgreSQLでサーバ100bはOracleでも良い。
DBMSとしては、市中品(例えば、OracleやPostgreSQL)を使う場合は、データベース制御部102は、データベース管理部とデータベースサーバ管理部に機能を分けることによって、市中品を無改造で使うことができる。データベース管理部は、データベース101を直接操作するもので、例えばPostgreSQLの場合はpostmasterやpostgresに相当する。データベースサーバ管理部は、仲介装置200とデータベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを同期化する際のデータベース101のスナップショットを作成したり、そのスナップショットを他のサーバへ転送したりする処理を行う。
スナップショットの作成方法は、例えばDBMSがPostgreSQLならばpg_dumpなどのダンプツールやバックアップツールを使って実現する。なお、pg_dumpはPostgreSQLサーバ同士を同期化する場合には有用だが、異種のDBMS同士(例えばPostgreSQLとOracle)を同期化する場合には、DBMS固有のツールは使わずに、正常稼働中のDBMSサーバからSELECTクエリで全てのデータを取りだしINSERTクエリでデータを入れる汎用のツールを使えばよい。
また、上記実施の形態では、システムへの組み込み要求(新規サーバのデータベース同期化要求)は当該新規サーバ100のデータベース制御部102が仲介装置200へ送信しているが、さらに保守端末などの他の装置から送信可能にしてもよいし、オペレータが仲介装置200に直接指示可能としても良い。
さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが、ハードウェアで実装しても良い。
また、上記実施の形態では、仮想サーバ800を構成する仲介装置200は1台のみであったが、複数台設けて冗長性を持たせることにより、より可用性の高い構成とすることも可能である。仲介装置を多重化させる技術については、例えば本願出願人による特開2003−345679号公報に記載されたものなどを用いればよい。
さらに、上記各実施の形態では、データベース一致検査装置600を多重化データベースシステムの外側、すなわちネットワーク400に接続していたが、図52に示すように、多重化データベースシステムの内側のネットワーク300にデータベース一致検査装置600を接続するようにしてもよい。
第1の実施形態に係る多重化データベースシステムの構成図 第1の実施形態に係るサーバ管理表の一例を示す図 第1の実施形態に係るトランザクション管理表の一例を示す図 第1の実施形態に係る差分情報蓄積部の一例を示す図 第1の実施形態に係る送信キューの一例を示す図 各サーバが正常稼働している場合の多重化データベースシステムの動作を説明するシーケンスチャート 図5の動作におけるサーバ管理表の一例 図5の動作におけるトランザクション管理表の一例 サーバが故障した場合の多重化データベースシステムの動作を説明するシーケンスチャート 図8の動作におけるトランザクション管理表の一例 図8の動作におけるサーバ管理表の一例 サーバにより異なる順序でクエリが実行された場合の多重化データベースシステムの動作を説明するシーケンスチャート サーバにより異なる順序でクエリが実行された場合の多重化データベースシステムの動作を説明するシーケンスチャート サーバにより異なる順序でクエリが実行された場合の多重化データベースシステムの動作を説明するシーケンスチャート サーバにより異なる順序でクエリが実行された場合の多重化データベースシステムの動作を説明するシーケンスチャート 多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 図16乃至図18の動作におけるサーバ管理表の一例 図16乃至図18の動作におけるトランザクション管理表の一例 図16乃至図18の動作におけるトランザクション管理表の一例 図16乃至図18の動作におけるトランザクション管理表の一例 図16乃至図18の動作における差分情報蓄積部の一例 多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 第2の実施形態の同期化処理においてクライアントから受信したクエリと差分情報として送出するクエリの関係を説明する図 第3の実施形態に係る差分情報蓄積部の一例 第4の実施形態に係る仲介装置の構成図 第4の実施形態に係る送信キューの一例を示す図 第4の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの同期化処理中の送信キューの一例 第6の実施形態に係る多重化データベースシステムの構成図 第6の実施形態に係る多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 第6の実施形態に係る多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 第6の実施形態に係る多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 図40乃至図42の動作におけるサーバ管理表の一例 図40乃至図42の動作におけるトランザクション管理表の一例 図40乃至図42の動作におけるトランザクション管理表の一例 図40乃至図42の動作におけるトランザクション管理表の一例 図40乃至図42の動作におけるサーバ管理表の一例 図40乃至図42の動作における差分情報蓄積部の一例 図40乃至図42の動作におけるサーバ管理表の一例 第7の実施形態に係る多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 第7の実施形態に係る多重化データベースシステムにおける同期化処理を説明するシーケンスチャート 他の例に係る多重化データベースシステムの構成図 従来のデータベース同期化システムの構成図 データベースのテーブルの一例 処理順序が問題となるトランザクションの一例 処理順序が問題となるトランザクションの一例
符号の説明
100…サーバ、101…データベース、102…データベース制御部、200…仲介装置、201…サーバ管理表、202…トランザクション管理表、203…差分情報蓄積部、204,206…送信キュー、205…差分情報一時蓄積部、210…サーバ制御部、300,400…ネットワーク、500…クライアント、600…データベース一致検査装置。

Claims (13)

  1. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバを同期化する方法であって、
    仲介装置は、
    (a)データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、
    (b)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、
    (c)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む
    ことを特徴とする多重化データベースシステムにおける同期化方法。
  2. 仲介装置は、
    (d)各データベースサーバ間における処理結果の矛盾を検出し、
    (e)処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返す
    ことを特徴とする請求項1記載の多重化データベースシステムにおける同期化方法。
  3. 仲介装置は、
    (f)選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、
    (g)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、
    (h)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む
    ことを特徴とする請求項2記載の多重化データベースシステムにおける同期化方法。
  4. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、各データベースサーバを同期化する方法であって、
    仲介装置は、
    (i)各データベースサーバ間における処理結果の矛盾を検出し、
    (j)処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、
    (k)選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、
    (l)システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、
    (m)同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む
    ことを特徴とする多重化データベースシステムにおける同期化方法。
  5. 仲介装置は、データベースサーバのシステムからの切り離し処理を行うと該データベースサーバに対して再起動指示を送出し、
    データベースサーバは、仲介装置からの再起動指示に応じて自身の再起動を行うとともに再起動後に仲介装置に対してシステムへの組込要求を送出し、
    仲介装置は、データベースサーバからシステムの組込要求を受信すると該データベースサーバと正常稼働中のデータベースサーバとの同期化処理を開始する
    ことを特徴とする請求項1乃至4何れか1項記載の多重化データベースシステムにおける同期化方法。
  6. 仲介装置は、クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を備え、前記同期化処理において、クライアントコンピュータからの処理要求を差分情報として記憶するとともに、正常稼働中のデータベースサーバに対してスナップショットの作成を指示し、
    スナップショット作成指示を受信したデータベースサーバは、データベースのスナップショットを作成してシステムから切り離されたデータベースサーバに対してスナップショットを転送し、
    スナップショットを受信したデータベースサーバは、該スナップショットからデータベースを復元するとともに仲介装置に対して差分情報の転送を要求し、
    差分情報転送要求を受信した仲介装置は、要求元のデータベースサーバに対して差分情報記憶部に記憶した処理要求を差分情報として送出する
    ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステムにおける同期化方法。
  7. データベースサーバ検査用のクライアントコンピュータが検査用の参照系の処理要求を仲介装置に送出する
    ことを特徴とする請求項1乃至6何れか1項記載の多重化データベースシステムにおける同期化方法。
  8. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
    仲介装置は、
    データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部を備えた
    ことを特徴とする多重化データベースシステム。
  9. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
    仲介装置は、
    各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部を備えた
    ことを特徴とする多重化データベースシステム。
  10. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置であって、
    データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部を備えた
    ことを特徴とする仲介装置。
  11. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置であって、
    各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部を備えた
    ことを特徴とする仲介装置。
  12. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置を実現するプログラムであって、
    コンピュータを、
    データベースサーバから処理要求に対する応答がない事を検出すると該無応答のデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部として機能させる
    ことを特徴とする仲介プログラム。
  13. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正当な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置を実現するプログラムであって、
    コンピュータを、
    各データベースサーバ間における処理結果の矛盾を検出し、処理結果の矛盾を検出したら各応答の中から1つの応答を選定するとともに当該選定した応答をクライアントコンピュータに返し、選定した応答以外の応答を返したデータベースサーバをシステムから切り離し、システムから切り離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータベースサーバとの同期化処理を行い、同期化処理が完了したらシステムから切り離されたデータベースサーバを再びシステムに組み込む制御部として機能させる
    ことを特徴とする仲介プログラム。
JP2004237438A 2004-04-01 2004-08-17 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム Pending JP2007241324A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004237438A JP2007241324A (ja) 2004-08-17 2004-08-17 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
PCT/JP2005/006483 WO2005096155A1 (ja) 2004-04-01 2005-04-01 多重化データベースシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004237438A JP2007241324A (ja) 2004-08-17 2004-08-17 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム

Publications (1)

Publication Number Publication Date
JP2007241324A true JP2007241324A (ja) 2007-09-20

Family

ID=38586852

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004237438A Pending JP2007241324A (ja) 2004-04-01 2004-08-17 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム

Country Status (1)

Country Link
JP (1) JP2007241324A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010067115A (ja) * 2008-09-12 2010-03-25 Nec Informatec Systems Ltd データ記憶システム、データ記憶方法
JP2011248752A (ja) * 2010-05-28 2011-12-08 Fujitsu Ltd プログラム、情報処理装置及び情報処理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010067115A (ja) * 2008-09-12 2010-03-25 Nec Informatec Systems Ltd データ記憶システム、データ記憶方法
JP2011248752A (ja) * 2010-05-28 2011-12-08 Fujitsu Ltd プログラム、情報処理装置及び情報処理方法

Similar Documents

Publication Publication Date Title
US6035415A (en) Fault-tolerant processing method
CA2657676C (en) Failure tolerant transaction processing system
US6023772A (en) Fault-tolerant processing method
CN110673932B (zh) 具有多项目事务支持的多数据库日志
US20180150501A1 (en) Database system, server device, computer program product, and information processing method
EP3364632A1 (en) System for live-migration and automated recovery of applications in a distributed system
JP5467625B2 (ja) トランザクションを処理する本番システムと該本番システムのバックアップ・システムである代行システムとを含む本番−代行システム
JP2004295540A (ja) トランザクション同期方法、データベースシステム及びデータベース装置
US20080178050A1 (en) Data backup system and method for synchronizing a replication of permanent data and temporary data in the event of an operational error
GB2519157A (en) Robust data replication
GB2367667A (en) Serialising replicated transactions of a distributed computing environment
JP2006338145A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
Rodrigues et al. The GlobData fault-tolerant replicated distributed object database
EP1164484A2 (en) Method, system and program product for managing processing groups of a distributed computing environment
JP3823169B1 (ja) データ制御装置、システム、方法、及びプログラム
JP2007241324A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
CN106951443B (zh) 基于分布式系统的副本同步的方法、设备和系统
Sarin et al. System architecture for partition-tolerant distributed databases
JP2007241323A (ja) 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム
JP2007183728A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JPH04165437A (ja) データベース同期方式
JP2007241325A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JP2002330132A (ja) 通信システムにおける管理装置のバックアップシステム
JP2006053737A (ja) レプリケーションシステム及びレプリケーション方法
CN114510539B (zh) 分布式数据库一致性检查点的生成及应用方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080507

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20081014