明 細 書
多重化データベースシステム 技術分野
[0001] 本発明は、障害などによりサービスが停止することなく常時連続したサービス提供 が要求される多重化データベースシステムに関し、特に該システムを構成するデータ ベースサーバに障害が発生した場合の復旧処理や新規のデータベースサーバの組 み込み処理を、サービス提供を継続したまま実施するための同期化技術に関する。 また、本発明は、複数のデータベースサーバを並列動作させた多重化データベース システムに関し、特に各データベースサーバ間の同期技術に関する。
[0002] 本願は、 2004年 4月 1日に出願された特願 2004— 109106号に対し優先権を主 張し、その内容をここに援用する。
本願は、 2004年 5月 11日に出願された特願 2004— 141174号に対し優先権を 主張し、その内容をここに援用する。
本願は、 2004年 8月 17日に出願された特願 2004— 237438号に対し優先権を 主張し、その内容をここに援用する。
本願は、 2004年 12月 21日に出願された特願 2004— 369841号に対し優先権を 主張し、その内容をここに援用する。
背景技術
[0003] 従来のデータベース同期化技術としては、例えば特許文献 1に記載されているもの が知られている。この従来技術では、それぞれデータベースを内蔵する複数のサー バがネットワーク等を介して相互接続されている。図 36に示すように、特許文献 1に 記載されている実施例では、 3個のサーノ 10, 20, 30を含み、それぞれネットワーク 40を介して相互接続されている。各サーバ 10, 20及び 30は、それぞれデータ更新 帘 U御咅 21, 31と、レプリケーシヨン帘||御咅 12, 22, 32と、データベース 13, 23, 33及び差分ファイル 14, 24, 34を含んでいる。
[0004] サーバ 10のデータ更新制御部 11は、データベースの更新処理を行う。レプリケー シヨン制御部 12は、差分ファイル 14によりデータベース 13の同期化処理を行う。デ ータベース 13は、データを一括管理する。差分ファイル 14は、データベース 13の差 分情報を格納する。また、サーバ 20及び 30のデータ更新制御部 21, 31、レプリケー シヨン制御部 22, 32、データベース 23, 33及び差分ファイル 24, 34は、それぞれ上 述したデータ更新制御部 11,レプリケーシヨン制御部 12,データベース 13及び差分 ファイル 14と同様の機能を有する。
[0005] サーバ 10にデータ更新イベントが発生した場合、サーバ 10のデータ更新制御部 1 1は、自データベース 13の内容を更新した後、サーバ 20及びサーバ 30に対してデ ータ更新通知を送信する。サーバ 20及びサーバ 30のデータ更新制御部 21, 31は、 自データベース 23, 33の内容を更新する。その後、サーバ 20及び 30は、それぞれ サーバ 10に対してデータ更新完了通知を送信する。サーバ 10は、サーバ 20及びサ ーバ 30からのデータ更新完了通知がともに正常であれば、何も行わずに更新処理 を終了する。差分ファイル 14, 24, 34には何も書き込まれない。
[0006] サーバ 30が障害などでダウンしている時にサーバ 10にデータ更新イベントが発生 した場合、サーバ 20はデータ更新完了通知をサーバ 10へ送信するが、サーバ 30は データ更新完了通知をサーバ 10へ送信できない。サーバ 10は、サーバ 30からのデ ータ更新完了通知を待ち続けるが、タイムアウトし、サーバ 30での更新が正常に終 了しな力つたことを知る。サーバ 10は、差分ファイル 14に更新が失敗した装置の情 報 (この場合、サーバ 30)と更新内容を保存する。以上で、サーバ 10は更新処理を 終了する。
[0007] サーバ 20にデータ更新イベントが発生した場合も、サーバ 20は上述と同様の処理 を行い、差分ファイル 24に更新が失敗した装置の情報と更新内容を保存し、更新処 理を終了する。
[0008] 以上のようにして、サーバ 30が復旧するまでの間、サーバ 10とサーバ 20は更新内 容をそれぞれ差分ファイル 14, 24へ保存し続ける。
[0009] サーバ 30が障害力も復旧すると、サーバ 30のレプリケーシヨン制御部 32はサーバ
10に対してレプリケーシヨン開始通知を送信する。サーバ 10のレプリケーシヨン制御
部 12は差分ファイル 14に保存されて 、るデータを古 、順に取り出し、サーバ 30へデ ータ更新通知を送信する。サーバ 30は自データベース 33の内容を更新した後、デ ータ更新完了通知をサーバ 10へ送信する。サーバ 10は、データ更新完了通知を受 信するたびに該当するデータを差分ファイル 14から削除する。
[0010] 差分ファイル 14が空になったら、サーノ 20の差分ファイル 24のデータを上記と同 様にしてサーバ 30に送信する。差分ファイル 24も空になったら、サーバ 30の同期化 が完了する。
[0011] し力しながら、上記特許文献 1に記載のものでは、障害発生直後から正常稼働中の サーバがデータ更新内容を差分ファイルに蓄積しはじめるため、障害サーバの復旧 までの時間が長くなると差分ファイルが巨大になってしまう。その結果、正常稼働中 のサーバの記憶容量を食い潰してそのサーバが障害になってしまったり、障害から 復旧したサーバの同期完了までに時間が力かるなどの問題がある。
[0012] また、同期化の手順は障害が発生した時点のデータベースに、障害が発生した後 の更新内容を反映させるという方法である。このことは、同期化するサーバは障害が 発生する直前までのデータベースを正常に保持して 、ることが前提となって 、ること を意味する。したがって、ハードディスクの故障などデータベースが破壊される障害 が発生した場合、このサーバを同期化させることが不可能であるという問題がある。ま た、同じ理由から、サーバをアップグレードする場合など、データを全く保持していな
Vヽ新し 、サーバを同期化することができな 、と 、う問題もある。
[0013] さらに、同期化の手順は障害が発生した後の更新内容と障害が発生する直前まで のデータベースを基に行う方式、つまり、障害発生時点をポイントとした方式であるた め、障害復旧以外の目的にこの方式を使うことができない。すなわち、システム全体 のサーバ台数を増やす目的で、新たなサーバを同期化させることはできないという問 題がある。例えば、特許文献 1の実施例では、システム全体のサーバ台数は 3台であ る力 これを 4台に増やすために 4台目のサーバを同期化させることはできない。
[0014] また、システム全体のサーバ台数を減らすことができないという問題点もある。その 理由は、サーバを 1台切り離すと、永遠に差分ファイルを蓄積するためである。
[0015] さらに、トランザクションが失敗した場合にその失敗したトランザクションの更新内容
を取り消す方法が無 、と 、う問題もある。
[0016] さらに、障害でダウンしたサーバ以外の全てのサーバで、更新内容を分散して保存 しているため、 2台以上のサーバがダウンした場合には障害になったサーバを同期 化できな 、と!/、う問題もある。
[0017] 更に、上述の他の従来技術、及び、問題点についても説明する。従来の多重化デ ータベースシステムは、例えば特許文献 2に記載されたものが知られている。このシ ステムでは、図 127に示すように、それぞれデータベースを備えた 2つの計算機 110 と計算機 120が通信回線により接続されている。各計算機 110と 120とは、いわゆる 二相コミット制御によりデータベース間の同期が図られている。
[0018] 計算機 110は、各種の業務処理を実行する応用プログラム 111と、データベース 1 14の検索及び更新の制御を行うとともにトランザクションモニタ 113を介して他の計 算機 120のデータベース 124における更新処理との同期を取るデータベース管理シ ステム 112と、いわゆる二相コミット制御によってデータベース 114と 124の更新処理 の同期をとるトランザクションモニタ 113とから構成される。計算機 120についても計 算機 110と同様に、応用プログラム 121と、データベース管理システム 122と、トラン ザクシヨンモニタ 123と力も構成されている。
[0019] 本システムにおいて、計算機 110のデータベース 114と計算機 120のデータべ一 ス 124で同じデータを保持し、更新があつた場合でも両方のデータベース 114と 124 に同じ更新が反映される処理手順について説明する。
[0020] 応用プログラム 111は、あるトランザクション内でデータベース 114と 124を同一タエ リで更新する。データベース 114は、データベース管理システム 112が更新し、デー タベース 124はデータベース管理システム 122が更新する。
[0021] そして、応用プログラム 111は、トランザクションの最後に今までの更新を確定する「 COMMIT要求」又は今までの更新を取り消す「ROLLBACK要求」を発行する。「C OMMIT要求」又は「ROLLBACK要求」は、トランザクションモニタ 113によってデ ータベース管理システム 112と、トランザクションモニタ 123を経由してデータベース 管理システム 122へ送られる。
[0022] 例えば、トランザクションモニタ 113が「COMMIT要求」を転送した場合、データべ
ース管理システム 112と 122は、 COMMIT実行の可否をトランザクションモニタ 113 へ返答する。この際、データベース管理システム 112と 122は実際には COMMITを 実行せず、実行の可否のみを答えるのみである。
[0023] トランザクションモニタ 113及び 123は、データベース管理システム 112及び 122の 双方から「COMMIT可」の応答を受け取ると、それぞれデータベース管理システム 1 12及び 122に「COMMIT実行」を送信する。「COMMIT実行」を受け取ったデー タベース管理システム 1112と 122は、実際に COMMITを実行する。
[0024] 一方、例えばトランザクションモニタ 113力 データベース管理システム 112又は 12 2の一方から「COMMIT不可」の応答を受け取った場合、他方の応答が「COMMI T可」であったとしても、データベース管理システム 112と122に対して¾01^ 八じ K実行」を送信し、トランザクションをキャンセルする。「ROLLBACK実行」を受け取 つたデータベース管理システム 112と 122は、実際に
ROLLBACKを実行する。
[0025] 以上のようにして、どちらか一方のデータベースだけ更新が反映されることを防ぎ、 両方のデータベースに対して常に同一の更新が行われるようにすることで、データべ ース間の同期を保つ。
[0026] し力しながら、上述の従来技術は、複数のデータベースにおける一トランザクション のデータベースの同期を図る方法であって、複数のトランザクション間でのデータべ ースの同期を制御することはできない。つまり、複数のトランザクションが並行に実行 されている状態で、且つ、それらのトランザクションが同一のテーブルの同一行にほ ぼ同時にアクセスした場合には、データベースの同期が崩れたり、クライアントへ返す 返答が一意に決まらないなどの問題が生じる。この問題点について以下に具体的に 例示する。
[0027] 図 128に示す test— tableという名前のテーブルを考える。この時、図 129に示すト ランザクシヨン T1及び T2がほぼ同時に実行される場合を考える。トランザクション T1 は id= 101の行を更新し、トランザクション T2は id = 101の行と id= 102の行を更新 する。どちらのトランザクションの UPDATEが先に実行されるかによって、 id= 101の 値は異なってしまう。
[0028] 2つのトランザクション中の UPDATEが実行される順序は以下の 2通りが考えられ る。
[0029] (1)T1の UPDATEの後に T2の UPDATE
(2) T2の UPDATEの後に T1の UPDATE
(1)の場合、 2つのトランザクション実行後には T2の UPDATEが残り、 departmen t = 2となる。一方(2)の場合、 2つのトランザクション実行後には T1の UPDATEが残 り、 department = 1となる。すなわち、(1)と(2)では最終的なテーブル test— table のデータが異なる。
[0030] つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実 行したとしても、ある DBMS (Data Base Management System)では(1)の順 で実行し、別の DBMSは(2)の順で実行した場合、 2つのデータベースは同期状態 (同じデータを保持している状態)が崩れてしまう問題が発生する。
[0031] また、別の例として、図 130に示すトランザクション T3及び T4がほぼ同時に実行さ れる場合を考える。トランザクション T4の SELECTがトランザクション T3の COMMI Tの前に実行されるか又は後に実行されるかで、トランザクション T4の SELECTで得 られる値は異なってしまう。
[0032] トランザクション T4の SELECTとトランザクション T3の COMMITが実行される順序 は以下の 2通りが考えられる。
[0033] (3) T4の SELECTの後に T3の COMMIT
(4) T3の COMMITの後に T4の SELECT
(3)の場合、トランザクション T4の SELECT実行後には、トランザクション T3の UP DATEが反映されていない古い値 department= 3が得られる。一方(4)の場合、ト ランザクシヨン T4の SELECT実行後には、トランザクション T3の UPDATEが反映さ れた値 department = 1が得られる。
[0034] つまり、複数のデータベースの初期状態が同じで、且つ、同じトランザクションを実 行したとしても、ある DBMSは(3)の順で実行し、別の DBMSは(4)の順で実行した 場合、得られる値が異なってしまう。
特許文献 1:特開 2001— 290687号公報
特許文献 2:特開平 6 - 161862号公報
[0035] 本発明は、上記事情に鑑みてなされたものであり、第 1の目的とするところは、デー タベースサーバに障害が発生しても少ない同期化用データで復旧後のデータべ一 スサーバの同期化を図ることができる多重化データベースシステムを提供することに ある。また、第 2の目的とするところは、システム全体をダウンさせることなぐデータべ ースサーバのデータ記憶状況に拘わらずデータベースサーバを任意に切り離し又は 組み込むことができる多重化データベースシステムを提供することにある。
[0036] また、本発明が第 3の目的とするところは、複数のトランザクションを並行処理しても 各データベース間で矛盾の生じることがない多重化データベースシステムにおける 同期化方法を提供することにある。
発明の開示
[0037] 上記目的を達成するために、本願発明では、複数のデータベースサーバと、クライ アントコンピュータ力 の処理要求を各データベースサーバに中継するとともに各デ ータベースサーバからの正常な応答の 1つをクライアントコンピュータに処理結果とし て返す仲介装置とを備えた多重化データベースシステムにおいて、仲介装置は、ク ライアントコンピュータ力 の処理要求を差分情報として記憶する差分情報記憶部を 備える。そして、この仲介装置は、新規の又はこのシステム力も切り離されたデータべ ースサーバ(以後「新規データベースサーバ」と言う)のシステムへの組み込み要求が あると、(la)正常稼働中のデータベースサーバに対してスナップショットの作成を指 示し、(lb)組み込み要求受信時以降にクライアントコンピュータ力 受信する処理要 求を差分情報として差分情報記憶部に順次記憶し、(lc)新規データベースサーバ 力 差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を 新規データベースサーバに順次送出し、(Id)差分情報記憶部に記憶されている処 理要求の送出が終了すると差分情報の記憶処理を終了するとともに新規データべ一 スサーバをシステムに組み込む。
[0038] 正常稼働中のデータベースサーバは、(2a)仲介装置力 スナップショット作成指示
を受信するとその時点でのデータベースのスナップショットの作成を開始し、 (2b)作 成したスナップショットを新規データベースサーバに転送する。
[0039] 新規データベースサーバは、(3a)正常稼働中のデータベースサーバからスナップ ショットを受信すると該スナップショットを用いてデータベースを復元し、(3b)スナップ ショットに基づきデータベースの復元が完了すると仲介装置に差分情報要求を送出 し、 (3c)仲介装置力 順次受信した処理要求に応じた処理を行う。
[0040] このようなシステムによれば、仲介装置では新規データベースサーバの同期化用の 差分情報を差分情報記憶部に記憶するが、この差分情報は新規データベースサー バからの組み込み要求を契機として差分情報記憶部への記憶が開始される。したが つて、データベースサーバを故障等によりシステム力 切り離した後に再びシステム に組み込む場合、障害復旧までに長時間要しても、仲介装置に多大な差分情報が 蓄積することがない。これにより、仲介装置の記憶容量を節約できるとともに差分情報 の増大による仲介装置の負荷増大やダウンを防止できる。
[0041] また、正常稼働中のデータベースサーバにおけるスナップショット及び仲介装置で 記憶された差分情報に基づき新規データベースサーバのデータが復元されるので、 組み込み時の新規データベースにおけるデータ蓄積状況はどのようなものであって も構わない。したがって、ディスク故障により切り離されたデータベースサーバの復帰 や、新規のデータベースサーバの組み込み(すなわちデータベースサーバの増強) を実現できる。すなわち、任意のデータベースサーバの組み込みが可能となる。
[0042] さらに、データベースサーバをシステム力 切り離しただけでは差分情報の記憶や スナップショットの作成は行われな 、ので、データベースのシステムからの切り離しを 任意に行うことができる。
[0043] なお、ここでシステムへのデータベースサーバの組み込みとは、多重化データべ一 スシステムを構成するデータベースサーバとして機能するよう仲介装置が当該データ ベースサーバを取り扱うようにすることを意味する。また、システムからのデータベース サーバからの切り離しとは、多重化データベースシステムを構成するデータベースサ ーバとして機能しないよう仲介装置が当該データベースサーバを取り扱うようにするこ とを意味する。したがって、システムに組み込まれているデータベースサーバにはクラ
イアントコンピュータからの処理要求が仲介装置を介して届くが、システム力も切り離 されたデータベースサーバにはクライアントコンピュータからの処理要求が届かない 状態となる。なお、データベースサーバがシステムに組み込まれていること又は切り 離されて!/、ることと、データベースサーバが仲介装置と通信可能又は不能であること とは無関係である点に留意されたい。つまり、データベースサーバと仲介装置が通信 可能な状態にある場合であっても、データベースサーバがシステムに組み込まれて いない場合もあり得る。
[0044] また、スナップショットとは、その作成時点で確定して 、る(COMMITされて!/、る)の データベース全体の複製データやデータベースを復元するために必要なデータを意 味する。したがって、スナップショットには、作成時点で COMMITされていないデー タは含まれな 、ことに留意すべきである。
[0045] また、上記目的を達成するために、本願発明では、複数のデータベースサーバと、 クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに 各データベースサーバからの正常な応答の 1つをクライアントコンピュータに処理結 果として返す仲介装置とを備えた多重化データベースシステムにお 、て、仲介装置 は、クライアントコンピュータ力もの処理要求を差分情報として記憶する差分情報記 憶部を備える。そして、この仲介装置は、新規の又はこのシステム力も切り離されたデ ータベースサーバ(以後「新規データベースサーバ」と言う)のシステムへの組み込み 要求があると、(la)正常稼働中のデータベースサーバの中力 選択した 1つのデー タベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショッ トの作成を指示するとともに、この同期化用データベースサーバをシステム力 切り離 し、(lb)組み込み要求受信時以降にクライアントコンピュータから受信する処理要求 を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を 差分情報として差分情報記憶部に順次記憶し、 (lc)差分情報転送要求を受信する と差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は 新規データベースサーバに順次送出し、(Id)差分情報記憶部に記憶されている処 理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出 が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データべ
ースサーバをシステムに組み込み、(le)同期化用データベースサーバ及び新規デ ータベースサーバの双方についてシステムへの糸且込が終了すると差分情報の記憶 処理を終了する。
[0046] 正常稼働中のデータベースサーバは、(2a)仲介装置力 スナップショット作成指示 を受信するとその時点でのデータベースのスナップショットの作成を開始し、 (2b)作 成したスナップショットを新規データベースサーバに転送し、 (2c)仲介装置から差分 情報として順次受信した処理要求に応じた処理を行う。
[0047] 新規データベースサーバは、(3a)同期化用データベースサーバからスナップショッ トを受信すると該スナップショットを用いてデータベースを復元し、(3b)スナップショッ トに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し 、 (3c)仲介装置力 差分情報として順次受信した処理要求に応じた処理を行う。
[0048] このようなシステムによれば、仲介装置では新規データベースサーバの同期化用の 差分情報を差分情報記憶部に記憶するが、この差分情報は新規データベースサー バの組み込み要求を契機として差分情報記憶部への記憶が開始される。したがって 、データベースサーバを故障等によりシステム力も切り離した後に再びシステムに組 み込む場合、障害復旧までに長時間要しても、仲介装置に多大な差分情報が蓄積 することがない。これにより、仲介装置の記憶容量を節約できるとともに差分情報の増 大による仲介装置の負荷増大やダウンを防止できる。
[0049] さらに、同期化処理中は、スナップショットの作成及び新規データベースサーバへ の転送処理を、クライアントコンピュータからの処理要求に対する処理を行うデータべ ースサーバとは異なるデータベースサーバ(同期化用データベースサーバ)が行うの で、クライアントコンピュータからの処理要求を処理するデータベースサーバの負荷 増大を防止できる。これにより、同期化処理中であってもクライアントへのサービス提 供を円滑に維持できる。
[0050] また、本願発明は、複数のデータベースサーバと、クライアントコンピュータからの処 理要求を各データベースサーバに中継するとともに各データベースサーバからの正 当な応答の 1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた 多重化データベースシステムにおける各データベースの同期化処理に関するもので
ある。
[0051] ところで、各データベースサーバにおいて複数のトランザクションが並行して処理さ れ、し力も各データベースサーバでトランザクション内での処理要求が互いに異なる 順番で処理されると、仲介装置側からは、(1)あるデータベースサーノくからの応答は あるが他のデータベースサーバからの応答はない、又は、(2)あるデータベースサー ノくからの応答と他のデータベースサーノくからの応答とが矛盾して ヽる(異なって!/ヽる) 、と認識される場合がある。
[0052] そこで、本願発明では、仲介装置は、(a)データベースサーノから処理要求に対す る応答がない事を検出すると該無応答のデータベースサーバをシステム力 切り離し 、 (b)システム力 切り離されたデータベースサーバとシステムに組み込まれて 、る正 常稼働中のデータベースサーバとの同期化処理を行い、 (c)同期化処理が完了した らシステム力 切り離されたデータベースサーバを再びシステムに組み込む。
[0053] これにより、あるデータベースサーバからの応答はあるが他のデータベースからの 応答がない場合には、当該応答のないデータベースサーバがシステム力 切り離さ れる。すなわち、各データベースサーバ間で処理要求の処理順序が異なり各データ ベースサーバ間で非同期になった(各データベースサーバ間で同一であるはずのデ ータが同一でなくなった)可能性を検出すると、あるデータベースサーバを基準として 該データベースサーバと非同期になった可能性のあるデータベースサーバがシステ ムから切り離される。そして、正常稼働中のデータベースサーバとシステム力 切り離 されたデータベースサーバとの同期化処理が行われ、同期化処理が完了するとシス テム力 切り離されたデータベースサーバが再びシステムに組み込まれる。これによ り、各データベースサーバの同期化が図られる。
[0054] また、本願発明では、仲介装置は、(i)各データベースサーバ間における処理結果 の矛盾を検出し、(j)処理結果の矛盾を検出したら各応答の中から 1つの応答を選定 するとともに当該選定した応答をクライアントコンピュータに返し、(k)選定した応答以 外の応答を返したデータベースサーバをシステム力 切り離し、 (1)システム力 切り 離されたデータベースサーバとシステムに組み込まれている正常稼働中のデータべ ースサーバとの同期化処理を行い、 (m)同期化処理が完了したらシステム力も切り
離されたデータベースサーバを再びシステムに組み込む。
[0055] これにより、あるデータベースサーバからの応答と他のデータベースサーバからの 応答とが矛盾している場合には、各応答の中から 1つの応答が選定され、選定された 応答以外の応答を返したデータベースサーバがシステム力 切り離される。すなわち 、各データベースサーバ間で処理要求の処理順序が異なって 、る可能性又は何ら かの原因で各データベースサーバ間で非同期になった(各データベースサーバ間で 同一であるはずのデータが同一でなくなった)可能性を検出すると、あるデータべ一 スサーバを基準として該データベースサーバと非同期になった可能性のあるデータ ベースサーバがシステム力も切り離される。そして、正常稼働中のデータベースサー ノ とシステム力 切り離されたデータベースサーバとの同期化処理が行われ、同期化 処理が完了するとシステム力 切り離されたデータベースサーバが再びシステムに組 み込まれる。これにより、各データベースサーバの同期化が図られる。
[0056] 上記同期化処理においては、仲介装置にクライアントコンピュータ力 の処理要求 を差分情報として記憶する差分情報記憶部を設け、データベースサーバがシステム 力も切り離されている間にクライアントコンピュータ力も受信した処理要求を差分情報 として記憶する。また、正常稼働中のデータベースサーバにおいてスナップショットを 作成し、システム力 切り離されたデータベースサーバは該スナップショットからデー タベースを復元する。その後に、前記差分情報記憶部に記憶されていた差分情報を 処理することで各データベースサーバの同期化が図れる。
[0057] ところで、このような同期化処理においては仲介装置力 送出された差分情報につ いても、前述したような処理順序の問題が生じる恐れが考えられる。すなわち、差分 情報の処理を行うデータベースサーバと、当該差分情報を蓄積中に処理要求を処 理した正常稼働中のデータベースサーバとでは、処理順序が異なる場合が考えられ る。
[0058] そこで、本願発明では、仲介装置は、差分情報として記憶した処理要求について、 正常稼働中のデータベースサーバで処理した当該処理要求に対する処理結果を、 差分情報とともに記憶しておく。そして、差分情報を送出したデータベースサーバか ら当該差分情報の処理に対する処理結果を受信すると、該処理結果と差分情報とと
もに記憶した処理結果とを比較し、両者が一致しない場合には同期化処理を再試行 する。このような処理により、データベースサーバの同期化をより確実に実施できる。
[0059] なお、ここでシステムへのデータベースサーバの組み込みとは、多重化データべ一 スシステムを構成するデータベースサーバとして機能するよう仲介装置が当該データ ベースサーバを取り扱うようにすることを意味する。また、システムからのデータベース サーバからの切り離しとは、多重化データベースシステムを構成するデータベースサ ーバとして機能しないよう仲介装置が当該データベースサーバを取り扱うようにするこ とを意味する。したがって、システムに組み込まれているデータベースサーバにはクラ イアントコンピュータからの処理要求が仲介装置を介して届くが、システム力も切り離 されたデータベースサーバにはクライアントコンピュータからの処理要求が届かない 状態となる。なお、データベースサーバがシステムに組み込まれていること又は切り 離されて!/、ることと、データベースサーバが仲介装置と通信可能又は不能であること とは無関係である点に留意されたい。つまり、データベースサーバと仲介装置が通信 可能な状態にある場合であっても、データベースサーバがシステムに組み込まれて いない場合もあり得る。
[0060] 以上説明したように本発明によれば、データベースサーバに障害が発生しても少な い同期化用データで復旧後のデータベースサーバの同期化を図ることができる。ま た、システム全体をダウンさせることなぐデータベースサーバのデータ記憶状況に拘 わらずデータベースサーバを任意に切り離し又は組み込むことができる。
[0061] また、本発明によれば、複数のトランザクションを並行処理することにより各データべ ースサーバ間で矛盾が生じても、各データベースサーバの同期化が図られるので当 該矛盾を解消できる。 図面の簡単な説明
[0062] [図 1]第 1の実施形態に係る多重化データベースシステムの構成図
[図 2]第 1の実施形態に係るサーバ管理表の一例を示す図
[図 3]第 1の実施形態に係るトランザクション管理表の一例を示す図
[図 4]第 1の実施形態に係る差分情報蓄積部の一例を示す図
圆 5]第 1の実施形態に係る送信キューの一例を示す図
[図 6]各サーバが正常稼働している場合の多重化データベースシステムの動作を説 明するシーケンスチャート
圆 7]図 5の動作におけるサーバ管理表の一例
圆 8]図 5の動作におけるトランザクション管理表の一例
[図 9]サーバが故障した場合の多重化データベースシステムの動作を説明するシー ケンスチャート
[図 10]図 8の動作におけるトランザクション管理表の一例
[図 11]図 8の動作におけるサーバ管理表の一例
[図 12]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 13]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 14]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 15]図 11及び図 12の動作におけるサーバ管理表の一例
[図 16]図 11及び図 12の動作におけるトランザクション管理表の一例
[図 17]図 11及び図 12の動作におけるトランザクション管理表の一例
[図 18]図 11及び図 12の動作におけるトランザクション管理表の一例
圆 19]図 11及び図 12の動作における差分情報蓄積部の一例
[図 20]図 11及び図 12の動作におけるサーバ管理表の一例
[図 21]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
圆 22]第 2の実施形態においてクライアントから受信したクエリと差分情報として送出 するクエリの関係を説明する図
[図 23]第 3の実施形態に係る差分情報蓄積部の一例
圆 24]第 4の実施形態に係る仲介装置の構成図
[図 25]第 4の実施形態に係る送信キューの一例を示す図
[図 26]第 4の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 27]第 4の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 28]第 4の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 29]第 4の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 30]第 4の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 31]第 5の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 32]第 5の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 33]第 5の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 34]第 5の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 35]第 5の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 36]従来のデータベース同期化システムの構成図
[図 37]第 6の実施形態に係る多重化データベースシステムの構成図
圆 38]第 6の実施形態に係るサーバ管理表の一例を示す図
圆 39]第 6の実施形態に係るトランザクション管理表の一例を示す図
圆 40]第 6の実施形態に係る差分情報蓄積部の一例を示す図
圆 41]第 6の実施形態に係る送信キューの一例を示す図
[図 42]各サーバが正常稼働している場合の多重化データベースシステムの動作を説 明するシーケンスチャート
[図 43]図 41の動作におけるサーバ管理表の一例
[図 44]図 41の動作におけるトランザクション管理表の一例
[図 45]サーバが故障した場合の多重化データベースシステムの動作を説明するシー ケンスチャート
[図 46]図 44の動作におけるトランザクション管理表の一例
[図 47]図 44の動作におけるサーバ管理表の一例
[図 48]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 49]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 50]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
[図 51]図 47及び図 48の動作におけるサーバ管理表の一例
[図 52]図 47及び図 48の動作におけるトランザクション管理表の一例
[図 53]図 47及び図 48の動作におけるトランザクション管理表の一例
[図 54]図 47及び図 48の動作におけるトランザクション管理表の一例
[図 55]図 47及び図 48の動作におけるサーバ管理表の一例
圆 56]図 47及び図 48の動作における差分情報蓄積部の一例
[図 57]図 47及び図 48の動作におけるサーバ管理表の一例
[図 58]新規にサーバを組み込む場合の多重化データベースシステムの動作を説明 するシーケンスチャート
圆 59]第 7の実施形態においてクライアントから受信したクエリと差分情報として送出 するクエリの関係を説明する図
[図 60]第 8の実施形態に係る差分情報蓄積部の一例
[図 61]第 9の実施形態に係る仲介装置の構成図
[図 62]第 9の実施形態に係る送信キューの一例を示す図
[図 63]第 9の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 64]第 9の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 65]第 9の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 66]第 9の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 67]第 9の実施形態に係る多重化データベースシステムの動作中の送信キューの 一例
[図 68]第 10の実施形態に係る多重化データベースシステムの動作中の送信キュー の一例
[図 69]第 10の実施形態に係る多重化データベースシステムの動作中の送信キュー の一例
[図 70]第 10の実施形態に係る多重化データベースシステムの動作中の送信キュー の一例
[図 71]第 10の実施形態に係る多重化データベースシステムの動作中の送信キュー の一例
[図 72]第 10の実施形態に係る多重化データベースシステムの動作中の送信キュー の一例
圆 73]第 11の実施形態に係る多重化データベースシステムの動作を説明するシー ケンスチャート
圆 74]第 11の実施形態に係る多重化データベースシステムの動作を説明するシー ケンスチャート
[図 75]第 12の実施形態に係る多重化データベースシステムの構成図
圆 76]第 12の実施形態に係るサーバ管理表の一例を示す図
圆 77]第 12の実施形態に係るトランザクション管理表の一例を示す図
[図 78]第 12の実施形態に係る差分情報蓄積部の一例を示す図
圆 79]第 12の実施形態に係る送信キューの一例を示す図
[図 80]各サーバが正常稼働している場合の多重化データベースシステムの動作を説
明するシーケンスチャート
[図 81]図 79の動作におけるサーバ管理表の一例
[図 82]図 79の動作におけるトランザクション管理表の一例
[図 83]サーバが故障した場合の多重化データベースシステムの動作を説明するシー ケンスチャート
[図 84]図 82の動作におけるトランザクション管理表の一例
[図 85]図 82の動作におけるサーバ管理表の一例
[図 86]サーバにより異なる順序でクエリが実行された場合の多重化データベースシス テムの動作を説明するシーケンスチャート
[図 87]サーバにより異なる順序でクエリが実行された場合の多重化データベースシス テムの動作を説明するシーケンスチャート
[図 88]サーバにより異なる順序でクエリが実行された場合の多重化データベースシス テムの動作を説明するシーケンスチャート
[図 89]サーバにより異なる順序でクエリが実行された場合の多重化データベースシス テムの動作を説明するシーケンスチャート
[図 90]多重化データベースシステムにおける同期化処理を説明するシーケンスチヤ ート
[図 91]多重化データベースシステムにおける同期化処理を説明するシーケンスチヤ ート
[図 92]多重化データベースシステムにおける同期化処理を説明するシーケンスチヤ ート
[図 93]図 90乃至図 92の動作におけるサーバ管理表の一例
[図 94]図 90乃至図 92の動作におけるトランザクション管理表の一例
[図 95]図 90乃至図 92の動作におけるトランザクション管理表の一例
[図 96]図 90乃至図 92の動作におけるトランザクション管理表の一例
圆 97]図 90乃至図 92の動作における差分情報蓄積部の一例
[図 98]多重化データベースシステムにおける同期化処理を説明するシーケンスチヤ ート
圆 99]第 13の実施形態の同期化処理においてクライアントから受信したクエリと差分 情報として送出するクエリの関係を説明する図
[図 100]第 14の実施形態に係る差分情報蓄積部の一例
[図 101]第 15の実施形態に係る仲介装置の構成図
圆 102]第 15の実施形態に係る送信キューの一例を示す図
[図 103]第 15の実施形態に係る多重化データベースシステムの同期化処理中の送 信キューの一例
[図 104]第 15の実施形態に係る多重化データベースシステムの同期化処理中の送 信キューの一例
[図 105]第 4の実施形態に係る多重化データベースシステムの同期化処理中の送信 キューの一例
[図 106]第 15の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 107]第 15の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 108]第 16の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 109]第 16の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 110]第 16の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 111]第 16の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 112]第 16の実施形態に係る多重化データべースシステムの同期化処理中の送 信キューの一例
[図 113]第 17の実施形態に係る多重化データベースシステムの構成図
[図 114]第 17の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 115]第 17の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 116]第 17の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 117]図 114乃至図 116の動作におけるサーバ管理表の一例
[図 118]図 114乃至図 116の動作におけるトランザクション管理表の一例
[図 119]図 114乃至図 116の動作におけるトランザクション管理表の一例
[図 120]図 114乃至図 116の動作におけるトランザクション管理表の一例
[図 121]図 114乃至図 116の動作におけるサーバ管理表の一例
圆 122]図 114乃至図 116の動作における差分情報蓄積部の一例
[図 123]図 114乃至図 116の動作におけるサーバ管理表の一例
[図 124]第 18の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 125]第 18の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 126]他の例に係る多重化データベースシステムの構成図
[図 127]従来のデータベース同期化システムの構成図
[図 128]データベースのテーブルの一例
[図 129]処理順序が問題となるトランザクションの一例
[図 130]処理順序が問題となるトランザクションの一例
[図 131]第 19の実施形態に係る多重化データベースシステムの構成図
[図 132]第 19の実施形態に係る仲介装置の機能ブロック図
圆 133]第 19の実施形態に係るサーバ管理表の一例を示す図
圆 134]第 19の実施形態に係るトランザクション管理表の一例を示す図
圆 135]第 19の実施形態に係る送信キューの一例を示す図
[図 136]各サーバが正常稼働している場合の多重化データベースシステムの動作を 説明するシーケンスチャート
[図 137]図 135の動作におけるサーバ管理表の一例
[図 138]図 135の動作におけるトランザクション管理表の一例
[図 139]サーバが故障した場合の多重化データベースシステムの動作を説明するシ 一ケンスチャート
[図 140]図 139の動作におけるトランザクション管理表の一例
[図 141]図 139の動作におけるサーバ管理表の一例
[図 142]図 139の動作における送信キューの一例
[図 143]サーバにより異なる順序でクエリが実行された場合の多重化データベースシ ステムの動作を説明するシーケンスチャート
[図 144]サーバにより異なる順序でクエリが実行された場合の多重化データベースシ ステムの動作を説明するシーケンスチャート
[図 145]サーバにより異なる順序でクエリが実行された場合の多重化データベースシ ステムの動作を説明するシーケンスチャート
[図 146]サーバにより異なる順序でクエリが実行された場合の多重化データベースシ ステムの動作を説明するシーケンスチャート
[図 147]第 19の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 148]第 19の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 149]第 19の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 150]第 19の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 151]図 208乃至図 150の動作におけるサーバ管理表の一例
[図 152]図 208乃至図 150の動作におけるトランザクション管理表の一例
[図 153]図 208乃至図 150の動作における送信キューの一例
[図 154]図 208乃至図 150の動作における送信キューの一例
[図 155]図 208乃至図 150の動作におけるサーバ管理表の一例
[図 156]図 208乃至図 150の動作における送信キューの一例
[図 157]図 208乃至図 150の動作におけるトランザクション管理表の一例
[図 158]図 208乃至図 150の動作における送信キューの一例
[図 159]図 208乃至図 150の動作における送信キューの一例
[図 160]図 208乃至図 150の動作における送信キューの一例
[図 161]図 208乃至図 150の動作におけるサーバ管理表の一例
[図 162]図 208乃至図 150の動作における送信キューの一例
[図 163]図 208乃至図 150の動作における送信キューの一例
[図 164]図 208乃至図 150の動作における送信キューの一例
[図 165]図 208乃至図 150の動作における送信キューの一例
[図 166]図 208乃至図 150の動作における送信キューの一例
[図 167]図 208乃至図 150の動作における送信キューの一例
[図 168]図 208乃至図 150の動作におけるサーバ管理表の一例
[図 169]第 20の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 170]第 20の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 171]第 20の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 172]第 20の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 173]第 20の実施形態に係る多重化データベースシステムにおける同期化処理を 説明するシーケンスチャート
[図 174]図 169乃至図 173の動作におけるサーバ管理表の一例
[図 175]図 169乃至図 173の動作における送信キューのデータ構造の一例
[図 176]図 169乃至図 173の動作における送信キューの一例
[図 177]図 169乃至図 173の動作における送信キューの一例
[図 178]図 169乃至図 173の動作におけるサーバ管理表の一例
[図 179]図 169乃至図 173の動作における送信キューの一例
[図 180]図 169乃至図 173の動作に:おける送信キュ -の-一例
[図 181]図 169乃至図 173の動作に :おける送信キュ -の-一例
[図 182]図 169乃至図 173の動作に :おける送信キュ -の-一例
[図 183]図 169乃至図 173の動作に :おける送信キュ -の-一例
[図 184]図 169乃至図 173の動作に :おける送信キュ -の-一例
[図 185]図 169乃至図 173の動作に :おける送信キュ -の-一例
[図 186]図 169乃至図 173の動作に :おける送信キュ —の-一例
[図 187]他の実施の形態における多重化データベースシステムの構成図
[図 188]他の実施の形態における多重化データベースシステムの構成図
[図 189]他の実施の形態における多重化データベースシステムの同期化処理を説明 するシーケンスチャート
[図 190]他の実施の形態における多重化データベースシステムの同期化処理を説明 するシーケンスチャート
[図 191]他の実施の形態における多重化データベースシステムの同期化処理を説明 するシーケンスチャート
[図 192]他の実施の形態における多重化データベースシステムの構成図
符号の説明
1100 サーノ
1101 データべ -ス
1102 データべ -ス制御部
1200 仲介装置
1201 サーバ管理表
1202 トランザクション管理表
1203 差分情報蓄積部
1204 送 1 やユー
1206 送 1 やユー
1205 差分情報- 時蓄積部
1210 サーバ制御部
1300 ネットワーク
1400 ネットワーク
1500 クライアント
1800 仮想サーバ
2100 サーノ
2101 データベース
2102 データベース制御部
2200 仲介装置
2201 サーバ管理表
2202 トランザクション管理表
2203 差分情報蓄積部
2204 送 1 やユー
2206 送 1 やユー
2205 差分情報一時蓄積部
2210 サーバ制御部
2300 ネットワーク
2400 ネットワーク
2500 クライアント
2800 仮想サーバ
2101 サーバ管理表
3100 サーノ
3101 データベース
3102 データベース制御部
3200 仲介装置
3201 サーバ管理表
3202 トランザクション管理表
3203 差分情報蓄積部
3206 送 1 キュー
3204 送信キュー
3205 差分情報一時蓄積部
3210 サーバ制御部
3300 ネットワーク
3400 ネットワーク
3500 クライアント
3600 データベース一致検査装置
3800 仮想サーバ
4100 サーノ
4101 データベース
4102 データベース制御部
4200 仲介装置
4201 サーバ管理表
4202 トランザクション管理表
4203 送 1 やユー
4204 受信クエリ処理部
4205 クエリ送信処理部
4206 正当性判定部
4207 応答送信処理部
4208 同期化処理制御部
4300 ネットワーク
4400 ネットワーク
4500 クライアント
4600 データベース一致検査装置
4800 仮想サーバ 発明を実施するための最良の形態
以下、図面を参照しつつ、本発明の好適な実施例について説明する。ただし、本
発明は以下の各実施例に限定されるものではなぐ例えばこれら実施例の構成要素 同士を適宜組み合わせてもよ 、。
[0065] (第 1の実施の形態)
本発明の第 1の実施の形態に係る多重化データベースシステムについて図面を参 照して説明する。図 1は本実施の形態に係る多重化データベースシステムの全体構 成を説明するブロック図である。
[0066] この多重化データベースシステムは、図 1に示すように、複数のデータベースサー ノ (以下「サーバ」と言う) 1100と仲介装置 1200とをネットワーク 1300で接続したも のであり、ネットワーク 1400を介して 1以上のクライアントコンピュータ(以下「クライア ント」と言う) 1500からアクセスされるものである。本実施の形態では、図 1に示すよう 【こ、 2台のサーノ 1100a及び 1100bを有しており、 2台のクライアント 1500a及び 15 00bからアクセスされる。以降の説明にお 、て各サーバ 1100を他のサーバ 1100と 区別する場合には添え字「a」「b」を付加するものとする。クライアント 1500についても 同様である。なお、図 1の例では、サーバ 1100とクライアント 1500はそれぞれ別々 のネットワーク 1300, 1400に接続されている力 同じネットワークに接続されていて ちょい。
[0067] 図 1に示すように、仲介装置 1200は、ネットワーク 1400側に IPアドレス 172.17.1.1 を持っており、これをデータベースサーバの IPアドレスとして公開している。クライアン ト 1500はデータベースにアクセスしたいときは IPアドレス 172.17.1.1へクエリを送信し 、 IPアドレス 172.17.1.1の仲介装置 1200からそのクエリに対する応答パケットを受信 する。これは、クライアント 1500にとつては、 IPアドレス 172.17.1.1を持ったデータべ ースサーバとパケットを送受信していることと同じである。この IPアドレス 172.17.1.1を 持った仮想的なデータベースサーバを仮想サーバ 1800と呼ぶ。この仮想サーバ 18 00の目的は、サーバ 1100が冗長化されていることを隠蔽するためである。つまり、サ ーバ 1100aとサーバ 1100b両方が稼働していようとサーバ 1100bがダウンしてサー ノ 1100aのみが稼働して!/、ようとサーバ 1100aとサーバ 1100bの他に新たなサーバ が追加されようとクライアントには影響は無ぐ動作を変更する必要がない。
[0068] サーバ 1100は、データを保存'管理するデータベース 1101と、データベース 110
1の動作を制御するデータベース制御部 1102とを備えて 、る。
[0069] データベース 1101は、 SQL (Structured Query Language)を解して処理を行う RD BMS (Relational Database Management System)である。このようなデータベース 11 01としては種々のものがあり、例えば The PostgreSQL Global Development Groupによる PostgreSQL (http://www.postgres.org/)や、 Oracle社による Oracl e (登録商標) (http://www.oracle.com)などが挙げられる。
[0070] データベース制御部 1102は、ネットワーク 1300を介して仲介装置 1200から送ら れてくるパケットに基づき動作する。このパケットは、 SQLなどデータベース 1101で の処理に係るもの、同期化処理に係るものに大別される。 SQLなどデータベース 11 01での処理に係るものについては、データベース制御部 1102は、当該パケットをデ ータベース 1101に渡し、データベース 1101からの処理結果を仲介装置 1200に返 す。
[0071] 一方、同期化処理に係るものは、さらに自身が本システムに組み込まれている場合 のものと、障害復旧時などこれからシステムに組み込む場合のものとに別れる。前者 については、スナップショットの作成指示がある。データベース制御部 1102は、スナ ップショット作成指示を仲介装置 1200から受信すると、データベース 1101のスナツ プショットを作成する。そして、スナップショットの作成が完了すると、スナップショット 作成完了を仲介装置 1200に通知する。そして、作成したスナップショットを、スナツ プショット作成指示で指示されている転送先の他のサーバ 1100に転送する。
[0072] 他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部 11 02は、他のデータベースからスナップショットを受信すると、このスナップショットを用 いて自身のデータベース 1101を復元する。データベース 1101の復元が完了すると 仲介装置 1200に対して差分情報転送要求を送出する。後述するように、差分情報 転送要求に応じて仲介装置 1200から差分情報が転送されるので、この差分情報を 用いてデータベース 1101を復元する。
[0073] また、データベース制御部 1102は、本システムに組み込む際には、仲介装置 120 0に対して組み込み要求を送信する。この組み込み要求は、サーバ 1100の起動時 や、必要に応じて任意のタイミングで送出する。
[0074] 仲介装置 1200は、本システム内のサーバ 1100を管理するサーバ管理表 1201と 、トランザクションを管理するトランザクション管理表 1202と、同期化用に差分情報を 蓄積する差分情報蓄積部 1203と、サーバ 1100に送信するクエリを一時保存する送 信キュー 1204と、クライアント 1500 ·サーバ 1100間での処理の仲介やサーバ 1100 の同期化制御などを行うサーバ制御部 1210とを備えている。
[0075] サーバ管理表 1201は、サーバが正常稼働中(active)か、障害などで停止してい る(down)力 という状態を保存している。図 2にサーバ管理表の一例を示す。サー バ管理表 1201は、図 2に示すように、サーバ 1100を識別するためのサーバ IDと、 サーバの稼働状態から構成されている。図 2の例では、サーノ 1100aとサーノ 1100 bとが登録されており、稼働状態は共に正常稼働を示す activeである。また、本実施 形態では、サーノ IDとしてサーバ 1100に付された IPアドレスを用いた。
[0076] トランザクション管理表 1202は、現在実行中の又は実行開始を保留されているトラ ンザクシヨンの有無を記憶する。図 3にトランザクション管理表 1202の一例を示す。 図 3に示すように、トランザクション管理表 1202は、クライアントを一意に識別するクラ イアント IDとトランザクションを一意に識別するトランザクション ID力も構成される。こ れらのペアは、トランザクション開始時にトランザクション管理表 1202に登録され、トラ ンザクシヨン終了時にトランザクション管理表 1202から削除される。クライアント IDは 、例えばクライアント 1500の IPアドレスやポート番号である。トランザクション IDは新し いトランザクションが発生する毎にサーバ制御部 1210が新たに割り振る。
[0077] 差分情報蓄積部 1203は、サーバ同期化時にクライアント 1500から受信する全て のクエリを蓄積する。図 4に差分情報蓄積部 1203が蓄積している差分情報の一例を 示す。差分情報蓄積部 1203の各データは、図 4に示すように、クライアント 1500が 送信したクエリと、このクエリが所属するトランザクション IDとから構成される。トランザ クシヨン IDはトランザクション管理表 1202から取得する。同期化処理時におけるクラ イアント 1500からの新たなクエリは、この差分情報蓄積部 1203の最後に追加される 。つまり、上から古いクエリが蓄積されている。図 4の例では、トランザクション ID= 1の BE
GINが一番古ぐ COMMITが一番新しい。
[0078] 送信キュー 1204は、各クライアント 1500から受信したクエリを各サーバ 1100に送 信するまで一時的に保存するバッファメモリである。図 5に送信キュー 1204の一例を 示す。送信キュー 1204の各データは、図 5に示すように、クライアント 1500が送信し たクエリと、このクエリが所属するトランザクション IDと、サーバ 1100に送信した力否 かを表す送信情報とから構成される。トランザクション IDはトランザクション管理表 12 02から取得する。クライアント 1500からの新たなクエリは、この送信キュー 1204の最 後に追加される。つまり、上から古いクエリが蓄積されている。図 5の例では、トランザ クシヨン ID= 1の BEGINが一番古ぐトランザクション ID = 2の BEGINが一番新しい 。この送信キュー 1204の送信状態は、クライアント 1500からクエリを受信した際には 「未送信」が設定され、正常稼働中の全てのサーバ 1100に送信されると「送信完了」 が設定される。送信完了となったエントリは、直ちに又は所定期間経過後に送信キュ 一 1204から削除される。
[0079] サーバ制御部 1210は、通常の処理(同期化処理時以外の処理)として、クライアン ト 1500からのパケットをネットワーク 1400経由で受信し、サーバ管理表 1201を見て 正常稼働している全てのサーバ 1100へ該パケットを転送する。ここで、サーバ 1100 へ転送するパケットは、送信キュー 1204に「未送信」として記憶されているクエリが対 象であり、送信キュー 1204に記憶されている古いクエリから順に転送される。そして 、サーバ 1100からのパケットをネットワーク 1300経由で受信し後述するパケットの正 当性判断方法により 1つ以上の該パケットのうち 1つを選出し 1つの正しいパケットを ネットワーク 1400を経由してクライアント 1500へ転送する。なお、同期化処理時には 、「未送信」のクエリであっても新規トランザクションに属するクエリは送信せず、実行 中のトランザクションに属するクエリのみを古い順に正常稼働中のサーバ 1100に送 信する。
[0080] ここで、サーバ制御部 1210は、クライアント 1500からの処理要求を解析してトラン ザクシヨンの開始と終了を検出してトランザクション管理表 1202を更新する。トランザ クシヨン開始と終了をサーバ制御部 1210が検出する方法は、 DBMSの種類によつ て異なる。例えば前述の PostgreSQLの場合は、トランザクションの開始はクライアン ト 1500力 S「BEGIN」という SQLを送信した時であり、トランザクションの終了はクライア
ント 1500力 COMMIT」「ROLLBACK」という SQLを送信した時である。また、 Or acleの場合は、トランザクションの開始はクライアント 1500
が有効な SQLを送信したときであり(明示的なトランザクションの開始を宣言する SQ Lは無い)、トランザクションの終了はクライアント 1500が「COMMIT」「ROLLBAC K」と!、う SQLを送信した時である。また、 AUTO COMMITモードで動作する場合 には、クライアント 1500から受信した SQL文はそれぞれ 1つの独立したトランザクショ ンに属していると解釈できるので、クライアント 1500から SQLを受信する毎に、該 SQ L実行前にトランザクションが開始されるとともに SQL実行後に当該トランザクションが 終了したこととして扱うことができる。
[0081] また、パケットの正当性判断方法は、例えば、多数決で決める方法や、受信したパ ケットを所定のルールに基づいて判断する方法がある。例えば、クライアント 1500力 らの「参照」要求に対して「更新成功」 、う応答が返ってきた場合、正常であればそ のような応答はあり得ないので (参照成功など参照に関する応答のはず)、この応答 パケットは正しくないと判断する。また、パケット中にデータ長フィールドがある場合、 このデータ長フィールドの値と実際に受信したパケット長を比較し、異なる場合は正し くないと判断する。また、複数のサーバ 1100の中力も Masterサーバを予め 1台決め ておき、この
サーバ 1100からのパケットを常に正しいと判断する。また、上記複数の方法を併用 する方法もある。例えば、 3台で多数決を行った結果、パケットの中身が全てバラバラ であり、多数派のパケットを決められない場合は Masterサーバのパケットを正しいと 判断する。正常稼働しているサーバが 1つだけの場合は、そのサーノくからの応答パ ケットを正常と判断する。
[0082] サーバ制御部 1210は、正当ではない応答を送信したサーバ 1100は障害と判断し 、そのサーバ 1100についてはサーバ管理表 1201から登録を削除することによりシ ステム力も切り離す。なお、応答を返してこないサーバ 1100も障害と判断する。
[0083] さらに、サーバ制御部 1210は、ネットワーク 1300を介してサーバ 1100からシステ ムの組み込み要求を受信すると、この新規のサーバ 1100と、正常稼働中のサーバ 1 100とを同期化させる処理を行う。以下にその処理にっ 、て説明する。
[0084] サーバ制御部 1210は、サーバ 1100からシステムの組み込み要求を受信すると、 正常稼働中のサーバ 1100に対してスナップショットの作成指示を送出する。ここで、 スナップショットの作成指示を送出するタイミングは、サーバ 1100においてトランザク シヨンが実行中でないことが求められる。これはスナップショット作成中にトランザクシ ヨンが ROLLBACKするとデータの同期化が図れない場合があることを防止するた めや、 COMMITされて!/、な!/、ために更新データがスナップショットに反映されな!、こ とを防止するためである。このためサーバ制御部 1210は、処理中のトランザクション が終了するまでスナップショットの作成指示の送出を待つとともに、スナップショット作 成完了通知をサーバ 1100から受信するまでは新規トランザクションを開始しないよう にしている。そして、新規トランザクションに係る SQLについては、スナップショット作 成完了通知の受信後に、正常稼働中のサーバ 1100で処理するとともに、差分情報 蓄積部 1203に蓄積する。差分情報蓄積部 1203に蓄積するクエリは、トランザクショ ン制御 SQL、参照系 SQL及び更新系 SQLを含む全ての SQLが対象となる。
[0085] サーバ制御部 1210がスナップショットの作成指示を送出すると、当該スナップショ ットは新規のサーバ 1100に転送され、このサーバ 1100からサーバ制御部 1210に 対して差分情報転送要求が送出される。サーバ制御部 1210は、差分情報転送要求 を受信すると、新規のサーバ 1100に対して差分情報蓄積部 1203に蓄積されている クエリを古いもの力も順次送信する。差分情報蓄積部 1203に蓄積されている SQLを 全て送出すると、サーバ制御部 1210は、新規サーバ 1100をシステムに組み込むベ くサーバ管理表 1201を更新する。
[0086] ここで、サーバ制御部 1210は、差分情報の送出中にクライアント 1500から新たな クエリを受信する場合があるが、この場合は当該クエリを差分情報蓄積部 1203の最 後に追加するとともに正常稼働中のサーバ 1100へ送信すれば良い。ただし、クライ アント 1500のクエリ送出頻度が高い場合などには、差分情報の送出終了まで、すな わち同期化終了まで長時間要する場合が考えられる。そこで、差分情報蓄積部 120 3における未送信の差分情報が所定件数以下となったら、クライアント 1500からのク エリを一時保留して差分情報の送出のみを行い、まず差分情報の送出を完了させる 。そして、前述のように新規サーバ 1100をシステムに組み込むべくサーバ管理表 12
01を更新した後に、保留していたクエリ処理を再開すると好適である。
[0087] クライアント 1500は、データベースサーバに対して更新クエリ(データベースを更新 するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)などを発行す るものである。
[0088] 次に、本実施の形態に係る多重化データベースシステムの動作について図面を参 照して説明する。まず、サーバ 1100aと 1100bが正常に動作している場合の動作を 図 6から図 8を参照して説明する。
[0089] 初期状態では、データベース 1101aと 1101bは完全に同一であり、サーバ管理表 1201は図 7のようになっているものとする。また、トランザクション管理表 1202と差分 情報蓄積部 1203は空であるとする。各サーバ 1100a, 1100bには、テーブル test —tableが存在して!/、るとする。
[0090] クライアント 1500a力 172.17.1.1宛にトランザクション開始 SQLを含んだパケットを送 信すると、仲介装置 1200はそのパケットを受信する (ステップ S 11)。サーバ制御部 1 210は、トランザクションが開始されたことを検知し、トランザクション管理表 1202にク ライアント 1500aの IPアドレスとトランザクション番号を登録する(ステップ S 12)。図 8 にこのときのトランザクション管理表 1202を示す。そして、このパケットに係るクエリを 送信状態「未送信」で送信キュー 1204に入れる。
[0091] サーバ制御部 1210は、送信キュー 1204から当該「未送信」のクエリを取り出し、サ ーバ管理表 1201を見て正常稼働している全てのサーバ 1100に該パケットを送信す る。この場合、サーバ 1100aと 100bが正常稼働しているので、サーバ制御部 1210 はサーバ 1100aとサーバ 1100bへ該パケットを転送する(それぞれステップ S13と S 14)。そして、各サーバ 1100への送信が完了したので送信キュー 1204の送信状態 を「送信完了」にして当該エントリを削除する。仲介装置 1200は、トランザクションが 正常に開始されたことを通知する応答パケットをサーバ 1100aから受信するが (ステ ップ S 15)、この時点では、未だ全ての応答パケットが揃っているわけではないので( この場合、サーバ 1100bからの応答パケットが来ていない)、サーバ制御部 1210は 何もせずにサーバ 1100bからの応答パケットを待つ。そして、トランザクションが正常 に開始されたことを通知する応答パケットをサーバ 1100bから受信すると (ステップ S
16)、これで全ての応答パケットが揃ったので、サーバ制御部 1210はそれらの応答 パケットを互いに比較することでサーバ 1100に障害が発生している力否かをチェック する (ステップ S17)。この場合、 2つの応答パケットはともにトランザクションが正常に 開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの 1つを クライアント 1500aへ転送する(ステップ S 18)。
[0092] 次に、クライアント 1500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S19)。サーバ制御部 1210は、受 信したクエリを送信キュー 1204に入れる。そして、送信キュー 1204から当該クエリを 取り出し、サーバ管理表 1201を見て正常稼働しているサーノ 、この場合、サーバ 11 00aと 100bへ該パケットを転送する(それぞれステップ S 110と S 111)。次いで、送 信キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 110 Oaは正常に UPDATE完了したことを通知する応答パケットを仲介装置 1200に送信 し、仲介装置 1200がこの応答パケットを受信する (ステップ S112)。この時点では全 ての応答パケットが全て揃っているわけではないので、サーバ制御部 1210は何もせ ず待機する。そして、正常に UPDATE完了したことを通知する応答パケットをサー ノ 1100bから受信すると (ステップ S 113)、これで応答パケットが全て揃ったので、サ ーバ制御部 1210はそれら応答パケットを互いに比較することでサーバ 1100に障害 が発生している力否かをチェックする(ステップ S 114)。この場合、 2つの応答パケット はともに UPDATE成功したことを示すパケットであるため、障害は無いと判断し応答 パケットの 1つをクライアント 1500aへ転送する(ステップ S 115)。
[0093] 次に、クライアント 1500aは、テーブル test— tableへの更新を確定する(実際にデ ータベースを更新する) SQL (COMMIT)を含んだパケットを 172.17.1.1へ送信する (ステップ S116)。サーバ制御部 1210は、受信したクエリを送信キュー 1204に入れ る。そして、送信キュー 1204から当該クエリを取り出し、サーバ管理表 1201を見て 正常稼働しているサーノ 、この場合、サーバ 1100aとサーバ 1100bへ該パケットを 転送する(それぞれステップ S 117と S 118)。次いで、送信キュー 1204の送信状態 を「送信完了」にして当該エントリを削除する。サーバ 1100aは正常に COMMIT完 了したことを通知するパケットを仲介装置 1200に送信し、仲介装置 1200がこの応答
パケットを受信する (ステップ S 119)。この時点では全ての応答パケットが全て揃って いるわけではないので、サーバ制御部 1210は何もせず待機する。そして、正常に C OMMIT完了したことを通知する応答パケットをサーバ 1100bから受信すると (ステツ プ S 120)、これで応答パケットが全て揃ったので、サーバ制御部 1210はそれら応答 パケットを互いに比較することでサーバ 1100に障害が発生している力否かをチェック する(ステップ S121)。この場合、 2つの応答パケットはともに COMMIT成功したこと を示すパケットであるため、障害は無いと判断する。 COMMITが正常に完了したこ と力ら、トランザクションが終了したことが分力るので、サーバ制御部 1210はトランザ クシヨン管理表 1202からこのトランザクションの登録を削除する (ステップ S122)。こ のときのトランザクション管理表 1202は再び初期状態 (すなわち空)になる。サーバ 制御部 1210は応答パケットの 1つをクライアント 1500aへ転送する(ステップ S 123)
[0094] 次に、サーバ 1100bが故障などで障害になった場合の動作を図 9から図 11を参照 して説明する。初期状態では、データベース 1101aと 101bは完全に同一であり、サ ーバ管理表 1201は前述した図 7のようになっているとする。また、トランザクション管 理表 1202と差分情報蓄積部 1203は空であるとする。
[0095] クライアント 1500aが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を含んだ パケットを送信すると、仲介装置 1200はそのパケットを受信する (ステップ S130)。サ ーバ制御部 1210は、トランザクションが開始されたことを検知し、トランザクション管 理表 1202にクライアント 1500aの IPアドレスとトランザクション番号を登録する(ステツ プ S131)。図 10にこのときのトランザクション管理表 1202を示す。そして、このバケツ トに係るクエリを送信状態「未送信」で送信キュー 1204に入れる。
[0096] サーバ制御部 1210は、送信キュー 1204から当該「未送信」のクエリを取り出し、サ ーバ管理表 1201を見て正常稼働している全てのサーバ 1100、この場合、サーバ 1 100aと 100bへ該パケットを転送する(それぞれステップ S132と S133)。次いで、送 信キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 1 200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 11 00aから受信するが(ステップ S134)、この時点では、未だ全ての応答パケットが揃つ
て!、るわけではな 、ので(この場合、サーバ 1100bからの応答パケットが来て!/ヽな!ヽ )、サーバ制御部 1210は何もせずにサーバ 1100bからの応答パケットを待つ。そし て、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 1100b 力も受信すると (ステップ S135)、これで全ての応答パケットが揃ったので、サーバ制 御部 1210はそれら応答パケットを互 、に比較することでサーバ 1100に障害が発生 しているか否かをチェックする(ステップ S 136)。この場合、 2つの応答パケットはとも にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと 判断し応答パケットの 1つをクライアント 1500aへ転送する(ステップ S137)。
[0097] ここで、サーバ 1100bは、ステップ S135で応答パケットを返した後、故障などの障 害が発生してダウンしたものとする(ステップ S 138)。
[0098] 次に、クライアント 1500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S139)。サーバ制御部 1210は、受 信したクエリを送信キュー 1204に入れる。そして、送信キュー 1204から当該クエリを 取り出し、サーバ管理表 1201を見て正常稼働しているサーノ 、この場合、サーバ 11 00aと 100bへ該パケットを転送する(それぞれステップ S 140と S 141)。この時点で は、サーバ制御部 1210はサーバ 1100bのダウンを知らないので、サーノ 1100b力 S 正常稼働して 、ると 、う情報がサーバ管理表 1201に格納されたままである。、 、で 、送信キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 1100aは正常に UPDATE完了したことを通知する応答パケットを仲介装置 1200に 送信し、仲介装置 1200がこの応答パケットを受信する (ステップ S142)。この時点で は応答パケットが全て揃っているわけではないので、サーバ制御部 1210は何もせず 待機する。し力し、サーバ 1100bはダウンしているのでサーバ 1100bからの応答パ ケットはいつまで経っても仲介装置 1200には届かない。これによりサーバ制御部 12 10はタイムアウトし、サーバ 1100bのダウンを検知する。そして、サーバ制御部 1210 はサーバ管理表 1201のサーバ 1100bを activeから down (サーバ停止状態)に書き 換える(ステップ S143)。そのときのサーバ管理表 1201を図 11に示す。サーバ制御 部 1210は応答パケットをクライアント 1500aへ転送する(ステップ S 144)。ここでは、 クライアント 1500aにとつて、サーバ 1100bが障害になったかどうかは認識せず、今
までと同様に仮想サーバ 1800からサービスを受けることができることに注目すべきで ある。
[0099] 次に、クライアント 1500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.17.1.1へ送信する(ステップ S 145)。サーバ制御部 1 210は、受信したクエリを送信キュー 1204に入れる。そして、送信キュー 1204から 当該クエリを取り出し、サーバ管理表 1201を見て正常稼働しているサーバ、この場 合、サーバ 1100aのみへ該パケットを転送する(ステップ S146)。次いで、送信キュ 一 1204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 1100aは 正常に COMMIT完了したことを通知する応答パケットを送信し、仲介装置 1200が この応答パケットを受信する (ステップ S 147)。 COMMITが正常に完了したことから 、トランザクションが終了したことが分力るので、サーバ制御部 1210はトランザクション 管理表 1202からこのトランザクションの登録を削除する(ステップ S148)。このときの トランザクション管理表 1202は再び初期状態 (すなわち空)になる。サーバ制御部 1 210は応答パケットをクライアント 1500aへ転送する(ステップ S149)。
[0100] ここで、ステップ S146によって、サーバ 1100aのデータベース 1101aは、クライア ント 1500aからの UPDATE (ステップ S 139)が反映されて!、るのに対して、サーバ 1 100bのデータベース 110 lbにはクライアント 1500aからの UPDATE (ステップ S 13 9)が反映されていない、つまり、データベース 1101aとデータベース 1101bは非同 期状態になったことに注目すべきである。
[0101] 次に、サーバ 1100bが障害力も復旧しシステムに組み込む(追加する)場合の動作 を図 12から図 20を参照して説明する。このとき注目すべきポイントは、クライアント 15 00a及び 500bに対するサービスを続けたままサーバ 1100bを追加する、つまり、シ ステムダウンさせずにデータベース 1101aと 1101bを同期させることである。
[0102] データベース 1101bはデータベース 1101aと同期がとれていない状態、つまり、同 一ではない状態である。例えば、データベース 1101bは、図 9のステップ S138の障 害が起きる直前のデータを保持して 、る力もしれな 、し、全く新 、サーバの場合に は、データを全く持っていない状態力もしれない。本発明では、前者の場合でも古い データは削除し、データベース 110 lbはデータを全く保持して!/、な!/、ものとしてシス
テムに組み込む。つまり、ステップ SI 38以前の古いデータを保持している必要はな い。
[0103] ここでは、サーバ管理表 1201は図 15のようになっているとする。また、トランザクシ ヨン管理表 1202と差分情報蓄積部 1203は空であるとする。
[0104] 図 12に示すように、クライアント 1500aが 172.17.1.1宛のトランザクション開始 SQL ( BEGIN)を含んだパケットを送信すると、仲介装置 1200はそのパケットを受信する( ステップ S160)。サーバ制御部 1210は、トランザクションが開始されたことを検知し、 トランザクション管理表 1202にクライアント 1500aの IPアドレスとトランザクション番号 を登録する(ステップ S 161)。図 16にこのときのトランザクション管理表 1202を示す。 サーバ制御部 1210は、受信したクエリを送信キュー 1204に入れる。そして、送信キ ユー 1204から当該クエリを取り出し、サーバ管理表 1201を見て正常稼働しているサ ーノ 、この場合、サーバ 1100aへ該パケットを転送する(ステップ S162)。次いで、送 信キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 1 200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 11 00aから受信すると (ステップ S163)、応答パケットをクライアント 1500aへ転送する( ステップ S 164)。
[0105] ここで、サーバ 1100bは電源を投入し起動されたものとする。これにより、サーバ 11 00bのデータベース制御部 1102bは、データベース同期化要求を仲介装置 1200 へ送信する(ステップ S 165)。
[0106] データベース同期化要求を受信したサーバ制御部 1210は、トランザクション管理 表 1202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとと もに、実行中トランザクションの情報を記録しておく(ステップ S166)。図 16より、クラ イアント 1500a,トランザクション番号 3のトランザクションが実行中なので、データべ ース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション 開始要求を受け取った場合は、その要求をサーバ 1100aへ転送することを遅らせる (ステップ S167)。つまり、同期化動作は実行中のトランザクションが全くない状態で 始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュ 一 1204での保留と 、う手段で実現する。
[0107] 次に、クライアント 1500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S168)。サーバ制御部 1210は、受 信したクエリを送信キュー 1204に入れる。このクエリは前記ステップ S 166で記憶した トランザクション情報力 同期化要求時に実行していたトランザクションに属するものと 判定できるので、サーバ制御部 1210は、送信キュー 1204から当該クエリを取り出し 、サーバ管理表 1201を見て正常稼働しているサーノ 、この場合、サーバ 1100aへ 該パケットを転送する (ステップ S169)。次いで、送信キュー 1204の送信状態を「送 信完了」にして当該エントリを削除する。サーバ 1100aは正常に UPDATE完了した ことを通知する応答パケットを仲介装置 1200に送信し、仲介装置 1200がこの応答 パケットを受信する (ステップ S170)。サーバ制御部 1210は、応答パケットをクライア ント 1500aへ転送する(ステップ S 171)。
[0108] 次に、クライアント 1500bが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を 含んだパケットを送信すると、仲介装置 1200はそのパケットを受信する (ステップ S1 72)。サーバ制御部 1210は、このパケットによりトランザクションが開始されたことを検 知し、トランザクション管理表 1202にクライアント 1500bの IPアドレスとトランザクショ ン番号を登録する(ステップ S 173)。図 17にこのときのトランザクション管理表 1202 を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー 1204に 入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始タエ リは送信キュー 1204に保持したままサーバ 1100aへは転送しな!、(ステップ S 174)
[0109] 次に、クライアント 1500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.11.1.1へ送信する(ステップ S 175)。サーバ制御部 1 210は、受信したクエリを送信キュー 1204に入れる。このクエリは前記ステップ S 166 で記憶したトランザクション情報から同期化要求時に実行していたトランザクションに 属するものと判定できるので、サーバ制御部 1210は、送信キュー 1204から当該タエ リを取り出し、サーバ管理表 1201を見て正常稼働しているサ一ノ^この場合、サー ノ 1100aのみへ該パケットを転送する(ステップ S176)。次いで、送信キュー 1204 の送信状態を「送信完了」にして当該エントリを削除する。サーバ 1100aは正常に C
OMMIT完了したことを通知する応答パケットを仲介装置 1200に送信し、仲介装置 1200がこの応答パケットを受信する(ステップ S177)。 COMMITが正常に完了した こと力 、トランザクションが終了したことが分力るので、サーバ制御部 1210はトラン ザクシヨン管理表 1202からこのトランザクションの登録を削除する (ステップ S 178)。 この時のトランザクション管理表 1202を図 18に示す。サーバ制御部 1210は応答パ ケットをクライアント 1500aへ転送する(ステップ S 179)。
[0110] ここで、新規サーバ 1100bからの同期化要求時に実行していたトランザクションが 全て無くなつたので、サーバ制御部 1210は同期化動作を開始する (ステップ S180) 。具体的には、図 13に示すように、まず、サーバ制御部 1210は、サーバ 1100aに対 して同期化指示 (スナップショット作成指示)のパケットを送信する (ステップ S181)。 なお、前記ステップ 180において、トランザクション管理表 1202に記録されているトラ ンザクシヨンが同期化要求時に実行中であったもの力、又は、その後にクライアント 1 500から受信したものかを判定するには、前記ステップ S166で記録しておいた同期 要求時のトランザクション情報を参照すればよい。
[0111] 同期化指示を受け取ったサーバ 1100aのデータベース制御部 1102aは、データ ベース 1101aのスナップショットを作り出す (ステップ S 182)。ここで、このスナップシ ヨットは、同期化指示を受け取った時点でのデータベース全体のバックアップデータ やデータベースを復元するための情報であり、同期化指示後の更新は反映されてい ないことに注目すべきである。
[0112] サーバ 1100aのデータベース制御部 1102aは、スナップショット作成が完了すると
(ステップ S 183)、その旨を仲介装置 1200へ通知する(ステップ S 184)。
[0113] データベース制御部 1102aは作成したスナップショットをサーバ 1100bへ転送し、 サーバ 1100bのデータベース制御部 1102bは、サーバ 1100aから受信したスナツ プショットからデータベースを復元する(ステップ S 185)。このスナップショットの転送 とデータベースの復元は、データベース i ioiaのサイズが大きければ大きいほど時 間が力かる力 クライアントからのデータベースアクセスと並行して実行されるのでクラ イアントに対するサービスを止めることはない。
[0114] スナップショット作成完了通知を受け取った仲介装置 1200のサーバ制御部 1210
は、クライアント 1500へのサービスを再開する。この場合、処理せずに送信キュー 12 04に保持して!/、た、クライアント 1500bからの BEGINを含んだパケットの処理を再開 する。すなわち、サーバ制御部 1210は、転送せずに保持していたクライアント 1500 bからの BEGIN SQLを含んだパケットを送信キュー 1204から取り出して差分情報 蓄積部 1203に保存するとともに (ステップ S 186)、サーバ 1100aへ転送する (ステツ プ S187)。次いで、送信キュー 1204の送信状態を「送信完了」にして当該エントリを 削除する。
[0115] なお、ここではステップ S187の処理をステップ S185の後に説明した力 ステップ S 185の動作 (スナップショットの転送)はクライアントへのサービスを妨げるものではな いので、スナップショットの転送中にステップ S187や後述のステップ S188が行われ てもよい。
[0116] サーバ 1100aは、トランザクションが正常に開始されたことを通知する応答パケット を仲介装置 1200に送信し、仲介装置 1200がこの応答パケットを受信する (ステップ S188)。仲介装置 1200は、この応答パケットをクライアント 1500bへ転送する (ステ ップ S 189)。
[0117] 次いで、クライアント 1500bがテーブル test_tableの更新 SQL (UPDATE)のパ ケットを仲介装置 1200に送信すると (ステップ S190)、サーバ制御部 1210は、受信 したクエリを送信キュー 1204に入れる。そして、送信キュー 1204から当該クエリを取 り出し、当該クエリを差分情報蓄積部 1203に保存するとともに (ステップ S191)、正 常稼働中のサーバ 1100aに当該パケットを送信する (ステップ S192)。次いで、送信 キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。ここで、サーバ 1100aは UPDATEに失敗し、その旨を通知する応答パケットを仲介装置 1200に送 信したものとする (ステップ S 193)。仲介装置 1200は、この応答パケットをクライアン 卜 1500bに送信する(ステップ S 194)。
[0118] UPDATE失敗の応答パケットを受信したクライアント 1500bは、トランザクションを 取り消す SQL (ROLLBACK)のパケットを仲介装置に送信する(ステップ S195)。 サーバ制御部 1210は、受信したクエリを送信キュー 1204に入れる。そして、送信キ ユー 1204から当該クエリを取り出し、当該 SQLを差分情報蓄積部 1203に保存する
とともに (ステップ S 196)、正常稼働中のサーバ 11 OOaに当該パケットを送信する(ス テツプ S197)。次いで、送信キュー 1204の送信状態を「送信完了」にして当該ェント リを削除する。そして、サーバ 1100aから正常にトランザクションが ROLLBACKされ たことを通知する応答パケットを受信すると (ステップ S198)、トランザクション管理表 1202から当該トランザクションの登録を削除するとともに (ステップ S199)、この応答 パケットをクライアント 1500bに送信する (ステップ S1100)。この時点での差分情報 蓄積部 1203を図 19に示す。また、トランザクション管理表 1202は空になる。
[0119] ここで、サーバ 1100bにおいてスナップショットからのデータベース 1101bの復元 が完了したものとする(ステップ S1101)。サーバ 1100bはデータベース 1101bの復 元が完了すると差分情報転送要求を仲介装置 1200に送信する (ステップ S1102)。 仲介装置 1200のサーバ制御部 1210は、差分情報転送要求を受信すると、図 14に 示すように、差分情報蓄積部 1203に蓄積されているデータを古いものから順にサー バ 1100bに転送する処理を開始する(ステップ S 1103)。
[0120] 前記ステップ S 1103で差分情報蓄積部 1203に蓄積されて 、る全てのクエリが転 送 ·処理されることでデータベース 1101aと 101bは完全に一致した状態(同期状態) になる力 この転送処理中にクライアント 1500から新たなクエリを受信する場合があ る。例えば、図 14に例示するように、仲介装置 1200は、クライアント 1500bから新規 トランザクションを開始するクエリ(BEGIN)を受信する (ステップ S 1104)。仲介装置 1200は、当該新規トランザクションをトランザクション管理表 1202に登録する (ステツ プ S1105)。そして、当該クエリを送信キュー 1204に入れる。次いで、送信キュー 20 4から当該クエリを取り出し、差分情報蓄積部 1203の最後に当該クエリを追加すると ともに(ステップ S 1106)、正常稼働中のサーバ 1100aに送信する(ステップ S 1107) 。そして、送信キュー 1204の送信状態を「送信完了」にして当該エントリを削除する。 次いで、サーバ 1100aから応答パケットを受信すると (ステップ S1108)、当該応答パ ケッ卜をクライアン卜 1500bに転送する(ステップ S 1109)。
[0121] このように差分情報転送中にクライアント 1500から受信したクエリは、正常稼働中 のサーバ 1100で処理するとともに、差分情報蓄積部 1203に蓄積していく。この処理 を継続していくと、やがて差分情報蓄積部 1203に蓄積されているクエリは全て新規
サーバ 1100bに転送され、差分情報蓄積部 1203は空になり、これを契機に差分情 報転送処理が終了する(ステップ SI 110)。これによりデータベース 1101aと 101bは 完全に一致した状態(同期状態)となるので、サーバ制御部 1210は、サーバ管理表 1201にサーバ 1100bを追加し稼働状態を activeとすることでシステムにサーバ 110 Obを追カロする(ステップ S1111)。この時のサーバ管理表 1201を図 20に示す。これ により、サーバ 1100bがシステムに組み込まれた状態となるので、以降の動作は図 6 を参照して前述したものと同様となる。
[0122] この手順を繰り返せば、もともとシステムに組み込まれていたが障害等のためにシス テム力も切り離されたサーバであっても、新規のサーバであっても、理論的にはいくら でも追加できる。つまり、追加できるサーバ数に制限はない。
[0123] 以上のように本実施の形態に係る多重化データベースシステムによれば、サーバ 1 100のデータベース 1101の記憶状況に拘わらず、サーバ 1100をシステムに組み込 むことができる。すなわち、元々システムに組み込まれていたが障害により切り離され たサーバ(ディスク障害によりデータを失ってしまったものなども含む)であっても、全 く新規のサーバであっても同様の手順でシステムに組み込むことができる。
[0124] また、仲介装置 1200においてデータ同期化用に差分情報蓄積部 1203に記憶す る同期化用データは、これから組み込むサーバ 1100からの組み込み要求を受信し て力も蓄積を開始するので、仲介装置 1200において同期化用データが増大するこ とがない。これにより、仲介装置 1200の記憶容量を節約でき、該記憶容量が溢れる ことによる障害発生を未然に防止できる。また、サーバ 1100の切り離しも任意に行う ことができる。
[0125] したがって、本実施の形態に係る多重化データベースシステムでは、サーバの組み 込み及び切り離しを任意に実施できるので、用途や予算などの要求に応じて柔軟な システム設計を行うことができる。
[0126] 本実施の形態の変形例について説明する。上記実施形態では、差分情報転送中 にクライアント 1500から新たなクエリを受信すると、当該クエリを差分情報蓄積部 120 3に追記していた。このような処理では、差分情報の処理に時間が力かる場合や、ク ライアントからの受信するクエリの受信間隔が短い場合には、差分情報蓄積部 1203
のデータが何時までたっても空にならな力つたり空になるまで長時間要することになり
、結果として新規サーバ 1100bの組み込み処理完了まで長時間要することが考えら れる。そこで、差分情報転送中に差分情報蓄積部 1203のエントリ数が所定数以下と なったら、新規クエリの処理を一時保留して専ら差分情報の転送のみを行って差分 情報蓄積部 1203を空にしてしまうと良い。以下、このような処理について図 21を参 照して説明する。
[0127] ここでは、新規のサーバ 1100bがスナップショットからデータベース 1101bの復元 処理中であるとする(ステップ S1200)。そして、サーバ 1100bにおいてデータべ一 ス 110 lbの復元処理が完了し (ステップ S 1201 )、サーノ 1100bが仲介装置 1200 に差分情報転送要求を送信した時点で (ステップ S 1202)、差分情報蓄積部 1203 には所定件数以上の差分情報が蓄積されているものとする。図 21の例では、ステツ プ S 1203〜ステップ S 1207による UPDATEのクエリが最新の差分情報として差分 情報蓄積部 1203に記憶されて 、るものとする。
[0128] 図 21に示すように、仲介装置 1200のサーバ制御部 1210は、サーバ 1100bから 差分情報転送要求を受信すると、前述したように、差分情報蓄積部 1203に記憶され ている各クエリを古いものから順にサーバ 1100bに転送する処理を開始する (ステツ プ S 1208)。
[0129] サーバ制御部 1210は、クライアント 1500bから新たなクエリを受信したとする。図 2 1の例では、サーバ制御部 1210は、クライアント 1500b力もデータを追加する SQL ( INSERT)を含むパケットを受信する (ステップ S 1209)。差分情報転送中に新規ク エリを受信したサーバ制御部 1210は、受信したクエリを送信キュー 1204に入れる。 そして、送信キュー 1204から当該クエリを取り出し、差分情報蓄積部 1203に蓄積さ れている未転送のクエリの件数が所定件数より多い場合には、このクエリを差分情報 蓄積部 1203の最後に追記するとともに (ステップ S 1210)、正常稼働中のサーバ 11 00aに該パケットを転送する (ステップ S1211)。次いで、送信キュー 1204の送信状 態を「送信完了」にして当該エントリを削除する。サーバ制御部 1210は、 INSERTが 成功したことを示す応答パケットをサーバ 1100aから受信すると (ステップ S 1212)、 この応答パケットをクライアント 1500bに転送する (ステップ S 1213)。
[0130] ここで、仲介装置 1200力もサーバ 1100bへの差分情報の転送は並行して行われ ており、これにより差分情報蓄積部 1203に記憶されている未転送のクエリが所定数 以下となったとする。
[0131] サーバ制御部 1210は、クライアント 1500b力もデータを更新する SQL (UPDATE )を含むパケットを受信すると (ステップ S 1214)、受信したクエリを送信キュー 1204 に入れる。ここでは、差分情報蓄積部 1203に蓄積されている未転送のクエリの件数 が所定件数以下となっているので、この新規クエリの処理は保留する (ステップ S121 5)。すなわち、この新規クエリの差分情報蓄積部 1203への記憶及びサーバ 1100a への転送は行わない。この保留処理は、差分情報蓄積部 1203に記憶されているク エリを全てサーバ 1100bに転送し、サーバ 1100bがシステムへ組み込まれるまで継 続する。
[0132] 差分情報の転送が終了すると (ステップ S1216)、差分情報蓄積部 1203に蓄積さ れている全てのクエリが転送.処理されることでデータベース 1101aと 101bは完全に 一致した状態(同期状態)になる。そこで、サーバ制御部 1210は、サーバ管理表 12 01にサーバ 1100bを追加し稼働状態を activeとすることでシステムにサーバ 1100b を追加する(ステップ S 1217)。
[0133] ここで、サーバ制御部 1210は、前記ステップ S1215で保留していた新規クエリの 処理を再開する。この時点では既に同期化が終了しているので、以降の処理は図 6 を参照して前述したものと同様となる。すなわち、サーバ制御部 1210は、当該クエリ を送信キュー 1204から取り出して正常稼働中のサーバ、この場合サーバ 1100a及 び 100b【こ転送する(ステップ S1218, S1219)。次!ヽで、送信キュー 1204の送信状 態を「送信完了」にして当該エントリを削除する。そして、各サーバ 1100a及び 100b 力も受信した応答パケットを比較して障害発生の有無をチェックし (ステップ SI 220 〜S1222)、正常な応答パケットの 1つをクライアント 1500bへ転送する(ステップ S1 223) o
[0134] このような処理により、差分情報の転送中にクライアントから受信したクエリは、未転 送の差分情報が所定数より多い場合には差分情報蓄積部 1203への記憶及びサー ノ 1100bへの転送が行われる。一方、未転送の差分情報が所定数以下の場合には
新規クエリは保留される。これにより、差分情報の処理に時間が力かる場合ゃクライア ントからの受信するクエリの受信間隔が短い場合であっても、データベースの同期を 短時間に行うことができる。なお、閾値となる「所定件数」は、大きく設定すると新規ク エリの保留時間が長くなる一方、小さく設定すると同期化処理完了までの時間が長 引くことになるというトレードオフの関係にある。したがって、この「所定件数」は各装置 の処理負荷やネットワーク速度などシステムの要件に応じて個々に最適な値を設定 すればよい。また、本変形例において閾値を 0以下に設定すれば、図 12〜図 20を 参照して前述した実施例と同様の処理となる。
[0135] (第 2の実施の形態)
本発明の第 2の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 1の実施の形態と異なる点 は、仲介装置力 新規のサーバに転送する差分情報の内容にある。他の構成'動作 等については第 1の実施の形態と同様なので、ここでは相違点のみを説明する。
[0136] 第 1の実施の形態では差分情報蓄積部 1203にはクライアント 1500から受信した 全てのクエリを保存.転送していた。これにより、同期化処理を実施している間に正常 稼働中のサーバ 1100で処理されたクエリを、新規のサーバ 1100においても忠実に 再現することができるので、完全な同期化を図ることができる。
[0137] ところで、仲介装置力 新規のサーバに転送する差分情報は専ら同期処理用にの み用いられるので、該同期化において不要なクエリは転送する必要がない。具体的 には、参照系クエリの SQL (SELECT)は不要である。なお、ここでは、 SELECT F OR UPDATE文は、 SELECT文の一種であるが更新処理に影響を与えるので、 ここでは参照系クエリではなく更新系クエリとして取り扱うものとする。
[0138] そこで、本実施の形態では、第 1の実施の形態と異なり、クライアント 1500から受信 したクエリのうち、参照系クエリを除いたものを差分情報として新規のサーバ 1100に 転送する。例えば、クライアント 1500から図 22 (a)に示すような SQL文を受信したと すると、新規のサーバ 1100には図 22 (b)に示すような SQL文を転送してやればよい
[0139] このような処理を行うため、本実施の形態に係るサーバ制御部 1210は、第 1の実
施の形態と同様にクライアント 1500からクエリを受信した全てのクエリを差分情報蓄 積部 1203に記憶する。そして、差分情報を新規サーバ 1100に転送するにあたって 、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を新規サーバ 110 0に転送する。他の処理については第 1の実施の形態と同様である。
[0140] 本実施の形態によれば、第 1の実施の形態と比較すると、新規サーバ 1100は同期 化処理時において参照系クエリを処理する必要がないので同期化処理の短縮ィ匕を 図ることができる。これは、複雑な参照系 SQLや集合関数を含む参照系 SQLなど処 理負荷が大きい参照系 SQLをクライアント 1500が発行している場合には特に有効 である。他の効果については第 1の実施の形態と同様である。
[0141] 本実施の形態の変形例としては、サーバ制御部 1210が、同期化処理中にクライァ ント 1500からクエリを受信し、このクエリを差分情報として差分情報蓄積部 1203に蓄 積するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外 を差分情報蓄積部 1203に記憶する。そして、差分情報の転送は差分情報蓄積部 1 203に記憶されている全てのクエリを対象に行う方法が挙げられる。この変形例は、 差分情報蓄積部 1203の記憶容量をさらに節約できるという効果を有する。
[0142] (第 3の実施の形態)
本発明の第 3の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 1の実施の形態と異なる点 は、データベース同期化動作中における差分情報の蓄積処理にある。他の構成'動 作等については第 1の実施の形態と同様なので、ここでは相違点のみを説明する。
[0143] 第 1の実施の形態では、サーバ制御部 1210は、クライアント 1500から受信した全 てのパケットを差分情報蓄積部 1203に保存していた。すなわち、トランザクション制 御 SQL、参照系 SQL及び更新系 SQLの全ての SQLについて差分情報蓄積部 120 3に保存し、サーバ 1100には差分情報蓄積部 1203に記憶されて 、る全てのデータ を古 、もの力 順に送信して 、た。
[0144] 一方、本実施の形態では、サーバ制御部 1210は、データベース同期化動作中に クライアント 1500から受信したパケットのうち、トランザクションの開始 SQL (BEGIN) や確定 SQL (COMMIT)や取消 SQL (ROLLBACK)等のトランザクション制御 SQ
L、及び、 SELECTなど参照系の SQLについては保存せず、 UPDATEや INSER Tなどの更新系の SQLのうち正常稼働中のサーバ 1100で COMMITされたものの みを差分情報蓄積部 1203に保存する。
[0145] ここで注意すべき点は、差分情報蓄積部 1203には、クライアント 1500から受信し た順番ではなぐ正常稼働中のサーバ 1100で処理された順番に更新クエリを蓄積 することである。これは、更新対象が重複する更新クエリについては、その処理順序 によってデータベース 1101の内容が異なってしまう可能性があるためである。
[0146] このような処理を実現するために、本実施の形態では、図 23に示すような差分情報 一時蓄積部 1205を新たに設けた。この差分情報一時蓄積部 1205のデータ構造は 、差分情報蓄積部 1203と同様に、クライアントから受信したクエリと該クエリが属する トランザクションの IDとからなる。
[0147] サーバ制御部 1210は、同期化処理中にクライアント 1500からクエリを受信すると、 更新系のもののみを順次、差分情報一時蓄積部 1205に蓄積するとともに、正常稼 働中のサーバ 1100に転送する。一方、更新係以外のものについては、差分情報一 時蓄積部 1205に蓄積することなく正常稼働中のサーバ 1100に転送する。
[0148] ここで、サーバ制御部 1210は、正常稼働中のサーバ 1100から更新クエリの実行 が失敗したことを示す応答パケットを受信すると、当該更新クエリを差分情報一時蓄 積部 1205から削除する。また、正常稼働中のサーバ 1100からトランザクションの RO LLBACKが正常に完了したことを示す応答パケットを受信すると、サーバ制御部 12 10は、当該トランザクションに属する全ての更新クエリを差分情報一時蓄積部 1205 力も削除する。一方、正常稼働中のサーバ 1100からトランザクションの COMMITが 正常に終了した応答パケットを受信すると、サーバ制御部 1210は、当該トランザクシ ヨンに属する更新クエリについて差分情報一時蓄積部 1205から差分情報蓄積部 12 03に順次移動させる。
[0149] 以上のような処理により差分情報蓄積部 1203には、正常稼働中のサーバ 1100で COMMITされた更新クエリのみ力 その処理された順番で蓄積される。したがって、 後に新規サーバ 1100から差分情報転送要求があったら、差分情報蓄積部 1203に 記憶されて ヽる差分情報を蓄積されて ヽる順番で新規のサーバ 1100に転送すれば
よい。なお、新規のサーバ 1100のデータベース 1101は、仲介装置 1200からの更 新クエリを順次処理するのみなので、この更新クエリはオートコミットモードで処理する
[0150] このように、本実施の形態によれば、同期化処理には不要の参照系クエリ、 BEGI Nや ROLLBACKなどのトランザクション制御 SQLを差分情報蓄積部 1203に蓄積 することがないので、第 1の実施形態と比較すると、差分情報の転送時間及びサーバ での処理時間を短縮ィ匕できる。他の効果については第 1の実施の形態と同様である
[0151] なお、本実施形態では、クライアント 1500から受信したクエリは、当該クエリの属す るトランザクションが正常稼働中のサーバ 1100で COMMITされた時点で、差分情 報一時記憶部 205から差分情報記憶部 203へ移動されて 、たが、その変形例として 、当該クエリが正常稼働中のサーバ 1100で正常処理された時点で移動するようにし てもよい。この場合には、トランザクションが ROLLBACKしたらら該トランザクション に属する更新クエリを差分情報記憶部 203から削除すればよい。このような処理は、 例えば PostgreSQLのように、更新順序によって行の順番が変わる DBMSのデータ ベースを完全一致させるために有効である。
[0152] (第 4の実施の形態)
本発明の第 4の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 1の実施の形態と異なる点 は、差分情報蓄積部の構造にある。他の構成 ·動作等については第 1の実施の形態 と同様なので、ここでは相違点のみを説明する。
[0153] 本実施の形態に係る仲介装置 1200は、図 24に示すように、第 1の実施の形態とは 異なり差分情報蓄積部 1203は設けず、送信キュー 1206に第 1の実施形態における 差分情報蓄積部 1203と送信キュー 1204の機能を統合させて 、る。
[0154] 本実施の形態に係る送信キュー 1206のデータ構造について図 25を参照して説明 する。送信キュー 1206は、クライアント 1500から受信したクエリの内容と、そのクエリ の属するトランザクション IDと、各サーバ 1100への送信状態とを記憶する。トランザク シヨン IDは、第 1の実施の形態と同様に、トランザクション管理表 1202から取得され
る。各サーバ 1100への送信状態は、システムに属する各サーバ 1100毎に記憶され る。
[0155] 送信キュー 1206の各サーバ 1100への送信状態は、「未送信」, 「送信完了」, 「保 留」の 3つの値を取りうる。「未送信」は、クライアント 1500から受信したクエリが未だ当 該サーバ 1100に送信されていない状態である。「送信完了」は、当該サーバ 1100 への送信が完了した状態である。「保留」は、新規サーバ 1100のシステムへの組み 込み処理中に、当該サーバ 1100への転送されることなく保留されて 、る状態である 。全てのサーバ 1100についての送信状態が「送信完了」になると、当該エントリは送 信キュー 1206から削除される。
[0156] 次に、サーバ制御部 1210の動作について説明する。サーバ制御部 1210は、クラ イアント 1500からクエリを受信すると、当該クエリがトランザクション開始 SQL (BEGI N)の場合は当該トランザクションに対して新たなトランザクション IDを振り出してトラン ザクシヨン管理表 1202に登録する。そして、当該クエリ内容,新規トランザクション ID ,各サーバ 1100の送信状態を「未送信」で送信キュー 1206に登録する。また、クラ イアント 1500から受信したクエリがトランザクション開始 SQL (BEGIN)以外の場合 は、当該クエリの属するトランザクション IDをトランザクション管理表 1202から取得し、 当該クエリ内容,トランザクション ID,各サーバ 1100の送信状態を「未送信」で送信 キュー 1206に登録する。
[0157] サーバ制御部 1210は、送信キュー 1206に記録されているクエリを、その送信状態 が「未送信」となって 、るサーバ 1100に対して送信し、当該サーバ 1100につ!/、ての 送信状態を「送信完了」に変更する。全てのサーバ 1100について送信状態が「送信 完了」になったクエリについては送信キュー 1206から削除する。
[0158] 仲介装置 1200からクエリを受信した各サーバ 1100は、当該クエリの処理を行い、 応答パケットを仲介装置 1200に返す。仲介装置 1200のサーバ制御部 1210は、各 サーバ 1100から受信した応答パケットを対比して障害発生の有無を確認し、正常な 応答パケットの 1つをクライアント 1500に返す。
[0159] 一方、サーバ 1100から正当でない応答が仲介装置 1200に返ってきたり、応答そ のものが返ってこない場合には、当該サーバ 1100に障害が発生したものとしてシス
テム力も切り離す。具体的には、サーバ管理表 1201における当該サーバの稼働情 報を「down」に変更するとともに、送信キュー 1206の送信状態の欄について当該サ ーバに関する項目を削除する。図 26は、送信キュー 1206が図 25に示すような状態 でサーバ 1100bがシステム力も切り離された場合の送信キュー 1206の一例である。
[0160] 次に、新規サーバ 1100からシステムへの組み込み要求を受信した場合の動作に ついて説明する。サーバ制御部 1210は、第 1の実施の形態と同様に、組み込み要 求受信時に実行中のトランザクションが終了するまで、新規トランザクションの開始は 保留する。具体的には、クライアント 1500から受信したクエリが新規トランザクション に係るものの場合には、送信状態を「保留」として送信キュー 1206に保存する。一方 、クライアント 1500から受信したクエリが組み込み要求時に実行中のトランザクション に係るものの場合には、送信状態を「未送信」として送信キュー 1206に保存する。図 27は、送信キュー 1206が図 26に示すような状態でクライアント 1500から新たにタエ リを受信した場合の送信キュー 1206の一例である。図 27の例では、三行目のトラン ザクシヨン ID = 3の BEGINを除 、て上のクエリから順に(古!/、クエリから順に)、トラン ザクシヨン ID = 2の SELECT,トランザクション ID= 1の COMMIT,トランザクション I D = 2の COMMITの順に正常稼働中のサーバ 1100aへ転送され、その送信状態 が「未送信」から「送信完了」に変更される。トランザクション ID = 3の BEGINは、新規 のサーバ 1100bからスナップショット作成完了通知を受けた後に転送されることにな る。
[0161] そして、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼 働中のサーバ 1100に送信し終えると、サーバ制御部 1210は、送信キュー 1206に 組み込み対象である新規のサーバ 1100の項目を追加する。ここで、送信キュー 120 6には送信状態が「保留」となって 、るクエリが記憶されて 、る場合がある。この場合、 サーバ制御部 1210は、送信キュー 1206に記憶されているクエリーに対して、新規 サーバ 1100についての送信状態を「保留」とする。図 28は、図 27の送信キュー 120 6に対して新規サーバ 1100bの登録をした場合を示している。また、サーバ制御部 1 210は、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼 働中のサーバ 1100に送信し終えると、第 1の実施の形態と同様に、正常稼働中のサ
ーバ 1100に対してスナップショットの作成指示を送出する。
[0162] サーバ制御部 1210は、正常稼働中のサーバ 1100からスナップショット作成完了 通知を受信すると、正常稼働中のサーバ 1100へのクエリの送信を再開する。具体的 には、まず送信キュー 1206に記憶されている全てのクエリ(この時点では全てのタエ リの送信状態は全てのサーバ 1100について「保留」になっている)について、正常稼 働中のサーバ 1100の送信状態を「未送信」に変更する。そして、サーバ制御部 121 0は、送信状態が「未送信」のクエリを当該サーバ 1100に順次送信し、送信が完了し たら送信状態を「送信完了」に修正する。また、新たにクライアント 1500から受信した クエリは、正常稼働中のサーバ 1100についての送信状態は「未送信」、新規のサー ノ 1100についての送信状態は「保留」にして送信キュー 1206に記憶する。図 29は 、図 28の送信キュー 1206に対してスナップショット完了通知受信後に新たなクエリを 受信した場合を示している。また、図 30のように、正常稼働中のサーバ 1100aに対し ては「送信完了」となっても新規のサーバ 1100bに対しては「送信完了」になって!/ヽ ない(「保留」になっている)ので、送信キュー 1206から当該クエリは削除しない。
[0163] 新規のサーバ 1100が正常稼働中のサーバ 1100から受信したスナップショットを用 いてデータベース 1101の復元が完了すると、サーバ制御部 1210は新規のサーバ 1 100から差分情報転送要求を受信する。サーバ制御部 1210は、送信キュー 1206 に記憶されて 、るクエリであって、送信状態が「保留」となって!/、るものを当該「保留」 となって!/、たサーバ 1100、すなわち新規のサーバ 1100に古 、ものから順次送信す る。送信したクエリについては、送信キュー 1206における当該サーバ 1100の送信 状態を「送信完了」にし、全てのサーバ 1100についての送信状態力 S「送信完了」に なったら当該エントリは削除する。
[0164] サーバ制御部 1210は、送信状態が「保留」となっているクエリが送信キュー 1206 に存在しなくなると、サーバ管理表 1201に新規のサーバ 1100を「active」として追 加することで、当該サーバ 1100をシステムに組み込む。以降の動作は各サーバ 110 0が正常動作して 、る場合のものと同様になる。
[0165] 以上のように本実施の形態に係る仲介装置 1200では、第 1の実施の形態における 差分情報蓄積部 1203と送信キュー 1204の機能を、 1つの送信キュー 1206に統合
しているので、メモリの利用効率や処理効率が向上する。また、送信キュー 1206の 各クエリに対して、各サーバ 1100への送信状態を記憶するようにしているので、新規 サーバ 1100を組み込む際には当該サーバ 1100の送信状態を追加すればよい。こ れにより、一度に複数台のサーバ 1100をシステムに組み込むことができる。他の作 用効果については第 1の実施の形態と同様である。
[0166] なお、本実施の形態は、第 1の実施の形態の変形例として説明したが、上記第 2〜 第 3の実施の形態において同様の変形を適用できることは言うまでもない。
[0167] (第 5の実施の形態)
本発明の第 5の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 4の実施の形態と異なる点 は、差分情報の蓄積方法にある。他の構成'動作等については第 4の実施の形態と 同様なので、ここでは相違点のみを説明する。
[0168] 上述の第 1の〜第 4の実施の形態では、仲介装置 1200が正常稼働中のサーバ 11 00にスナップショットの作成指示を送信するタイミングは、正常稼働中のサーバ 110 0において実行中のトランザクションが無くなったときである。具体的には、新規サー ノ 1100からの組込要求を受信した時点で実行中のトランザクションについて正常稼 働中のサーバ 1100で処理を行うのと並行して、組込要求受信時以降にクライアント 1500から受信した新規トランザクションの開始要求を保留していた。そして、組込要 求を受信した時に実行中のトランザクションが無くなった時点で、スナップショットの作 成指示を送信している。これは、 DBMSによっては、スナップショット作成時にトラン ザクシヨンが実行中だと、そのトランザクションに属する更新クエリによるデータ更新が スナップショットに反映されるか否かが不確定となる場合を考慮したためである。
[0169] 一方、本実施の形態では、サーバ 1100として、スナップショット作成時に実行中の トランザクションに属する更新クエリ及びスナップショット作成処理中に受信した更新 クエリについては、当該スナップショットには反映しないという動作を行うものを用いる 。これにより、本実施の形態に係る仲介装置 1200のサーバ制御部 1210は、組込要 求受信時に実行中のトランザクションの終了を待つことなぐスナップショット作成指示 の送信及び新規トランザクションの開始を行うことができる。なお、仲介装置 1200が
スナップショット作成完了を待つ必要がないので、サーバ 1100のデータベース制御 部 1102は、スナップショット作成が完了しても仲介装置 1200には完了通知を送信 する必要はない。
[0170] このような処理を行うため、本実施の形態に係る仲介装置 1200のサーバ制御部 12 10は、送信キュー 1206に記憶されている各クエリについて、全てのサーバ 1100に ついて送信状態が「送信完了」となり、且つ、当該クエリに属するトランザクションが終 了した場合に、当該クエリの登録を削除する。
[0171] 以下、新規サーバ 1100をシステムに組み込む際の動作について図 31〜図 35を 参照して説明する。いま、システムにはサーバ 1100aのみが組み込まれており、これ 力 新たにサーバ 1100bを組み込むものとする。
[0172] サーバ制御部 1210は、新規サーバ 1100bから組込要求を受信すると、正常稼働 中のサーバ 1100aに対して同期化指示 (スナップショット作成指示)を送信する。新 規サーバ 1100bが仲介装置 1200に対して組込要求を送信した際の送信キュー 12 06の一例を図 31に示す。前述したように、送信キュー 1206に記憶されたクエリは、 当該クエリが送信完了しても該クエリの属するトランザクションが完了して 、な 、もの は削除されずに残っている。同期化指示を受信したサーバ 1100aは、スナップショッ トの作成を開始する。ここで作成されるスナップショットは、送信キュー 1206に記憶さ れているクエリは反映されていないものである。また、サーバ制御部 1210は、新規サ ーバ 1100bから組込要求を受信すると、送信キュー 1206に記憶されて 、る全てのク エリについて、当該新規サーバ 1100bの送信状態を「保留」にして追加する。この時 の、送信キュー 1206の一例を図 32に示す。
[0173] サーバ制御部 1210は、組込要求受信時以降にクライアント 1500からクエリを受信 すると、正常稼働中のサーバ 1100aについては送信状態を「未送信」、新規サーバ 1 100bについては送信状態を「保留」にして送信キュー 1206に順次追加する。そして 、送信状態が「未送信」となって 、るクエリにつ 、ては当該「未送信」のサーバ 1100a に対して順次転送し、送信状態を「送信完了」に変更していく。このとき、図 33に示す ように、送信キュー 1206に記憶されているクエリは、正常稼働中のサーバ 1100aに ついてはトランザクション単位で送信状態が「送信完了」となっているが、新規サーバ
1100bにつ!/ヽては「保留」となって!/、るので、ここではクエリの削除は行わな!/、。
[0174] 一方、仲介装置 1200からスナップショットの作成指示を受信したサーバ 1100aは、 作成したスナップショットを新規のサーバ 1100bに送信する。新規のサーバ 1100b のデータベース制御部 1102bは、受信したスナップショットからデータベース 1101b を復元し、仲介装置 1200に差分情報転送要求を送信する。
[0175] 差分情報転送要求を受信したサーバ制御部 1210は、送信キュー 1206に記憶さ れて 、る送信状態が「保留」となって!/、るクエリを差分情報として順次新規サーバ 11 00bに送信し、図 34に示すように、送信状態を「送信完了」に変更する。そして、前述 したように、全てのサーバについて送信状態力 ^送信完了」となり、且つ、当該クエリ のトランザクションが完了したら、そのクエリを削除する。以降、送信状態が「保留」の クエリの中の送信中にクライアント 1500からクエリを受信すると、図 35に示すように、 正常稼働中のサーバ 1100a及び新規サーバ 1100bの双方の送信状態を「未送信」 で送信キュー 1206へ記憶する。そして、送信状態力 ^保留」のクエリが無くなった時 点でデータベース 100aとデータベース 100bの同期が完了したことになる。
[0176] 本実施形態によれば、システムで用いるサーバ 1100の機能的要件が限定される ためサーバ選択の幅が狭くなるものの、仲介装置 1200での処理が簡略ィ匕されるの で処理効率の高 、ものとなる。
[0177] なお、本実施の形態では、サーバ 1100として、 (1)トランザクション実行中でもスナ ップショットの作成開始ができ、(2)スナップショット作成中にクエリを処理可能であり 且つ当該クエリがスナップショットに反映されないものを用いた力 (1 ')トランザクショ ン実行中でもスナップショットの作成開始ができる力 (2')スナップショット作成中に はクエリを処理できな!/ヽ又はスナップショット作成中にクエリを処理すると当該処理が スナップショットに反映される場合があるようなサーバ 1100を用いることもできる。
[0178] ただし、この場合には、新規サーバ 1100から組込要求を受信すると直ちに正常稼 働中のサーバ 1100に対してスナップショット作成指示を送信してよいが、スナップシ ヨット作成完了までは正常稼働中のサーバ 1100に対するクエリの送信を保留する必 要がある。この保留処理の具体的な方法は上記第 1の実施の形態と同様であるので ここでは説明は省略する。また、仲介装置 1200がスナップショットの作成完了を認識
するために、スナップショットの作成が完了したサーバ 1100は、スナップショット作成 完了を仲介装置 1200に通知する必要がある。これにより、本実施の形態よりもサー バ選択の幅が広 、ものとなる。
[0179] 以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なもので あり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に 示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれる ものである。
[0180] 例えば、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はな い。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラォプ シヨン、ハードウェア力ソフトウェア力 などが異なっていてもよい。サーバには、 Post greSQLなどのフリーソフトウェアや Oracleなどの市販のソフトウェア、独自開発のソ フトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サー ノ 1100aは PostgreSQLでサーバ 1100bは Oracleでも良い。
[0181] DBMSとしては、巿中品(例えば、 Oracleや PostgreSQL)を使う場合は、データ ベース制御部 1102は、データベース管理部とデータベースサーバ管理部に機能を 分けることによって、巿中品を無改造で使うことができる。データベース管理部は、デ ータベース 1101を直接操作するもので、例えば PostgreSQLの場合は postmaste rや postgresに相当する。データベースサーバ管理部は、仲介装置 1200とデータ ベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを 同期化する際のデータベース 1101のスナップショットを作成したり、そのスナップショ ットを他のサーバへ転送したりする処理を行う。
[0182] スナップショットの作成方法は、例えば DBMSが PostgreSQLならば pg— dumpな どのダンプツールやバックアップツールを使って実現する。なお、 pg— dumpは Post greSQLサーバ同士を同期化する場合には有用だ力 異種の DBMS同士 (例えば PostgreSQLと Oracle)を同期化する場合には、 DBMS固有のツールは使わずに、 正常稼働中の DBMSサーバから SELECTクエリで全てのデータを取りだし INSER Tクエリでデータを入れる汎用のツールを使えばよい。
[0183] また、上記実施の形態では、システムへの組み込み要求 (新規サーバのデータべ
ース同期化要求)は当該新規サーバ 1100のデータベース制御部 1102が仲介装置 1200へ送信している力 保守端末などの他の装置力も送信してもよいし、オペレー タが仲介装置 1200に直接指示しても良 、。
[0184] さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが 、ハードウェアで実装しても良い。
[0185] また、上記実施の形態では、仮想サーバ 1800を構成する仲介装置 1200は 1台の みであつたが、複数台設けて冗長性を持たせることにより、より可用性の高い構成と することも可能である。仲介装置を多重化させる技術については、例えば本願出願 人による特開 2003— 345679号公報に記載されたものなどを用いればよい。
[0186] (第 6の実施の形態)
本発明の第 6の実施の形態に係る多重化データベースシステムについて図面を参 照して説明する。図 37は本実施の形態に係る多重化データベースシステムの全体 構成を説明するブロック図である。
[0187] この多重化データベースシステムは、図 37に示すように、複数のデータベースサー バ(以下「サーバ」と言う) 100と仲介装置 2200とをネットワーク 2300で接続したもの であり、ネットワーク 2400を介して 1以上のクライアントコンピュータ(以下「クライアント 」と言う) 500からアクセスされるものである。本実施の形態では、図 37に示すように、 3台のサーノ 2100a, 2100b, 2100cを有しており、 2台のクライアン卜 2500a及び 2 500b力らアクセスされる。以降の説明にお ヽて各サーバ 2100を他のサーバ 2100と 区別する場合には添え字「a」「b」などの英小文字を付加するものとする。クライアント 2500につ!/ヽても同様である。なお、図 37の f列では、サーノ 2100とクライアント 2500 はそれぞれ別々のネットワーク 2300, 2400に接続されている力 同じネットワークに 接続されていてもよい。
[0188] 図 37に示すように、仲介装置 2200は、ネットワーク 2400側に IPアドレス 172.17.1.1 を持っており、これをデータベースサーバの IPアドレスとして公開している。クライアン ト 2500はデータベースにアクセスしたいときは IPアドレス 172.17.1.1へクエリを送信し 、 IPアドレス 172.17.1.1の仲介装置 2200からそのクエリに対する応答パケットを受信
する。これは、クライアント 2500にとつては、 IPアドレス 172.17.1.1を持ったデータべ ースサーバとパケットを送受信していることと同じである。この IPアドレス 172.17.1.1を 持った仮想的なデータベースサーバを仮想サーバ 2800と呼ぶ。この仮想サーバ 28 00の目的は、サーバ 2100が冗長化されていることを隠蔽するためである。つまり、全 てのサーノ 2100a,サーノ 2100b, 2100c力稼働して! /、ようと、サーノ 2100b力ダ ゥンしてサーバ 2100a及び 2100cのみが稼働していようと、サーノ 2100a, 2100b, 2100cの他に新たなサーバが追加されようとクライアントには影響は無く、動作を変 更する必要がない。
[0189] サーバ 2100は、データを保存'管理するデータベース 2101と、データベース 210 1の動作を制御するデータベース制御部 2102とを備えている。
[0190] データベース 2101は、 SQL (Structured Query Language)を解して処理を行う RD BMS (Relational Database Management System)である。このようなデータベース 21 01としては種々のものがあり、例えば The PostgreSQL Global Development Groupによる PostgreSQL (http://www.postgres.org/)や、 Oracle社による Oracl e (登録商標) (http://www.oracle.com)などが挙げられる。
[0191] データベース制御部 2102は、ネットワーク 2300を介して仲介装置 2200から送ら れてくるパケットに基づき動作する。このパケットは、 SQLなどデータベース 2101で の処理に係るもの、同期化処理に係るものに大別される。 SQLなどデータベース 21 01での処理に係るものについては、データベース制御部 2102は、当該パケットをデ ータベース 2101に渡し、データベース 2101からの処理結果を仲介装置 2200に返 す。
[0192] 一方、同期化処理に係るものは、さらに自身が本システムに組み込まれている場合 のものと、障害復旧時などこれからシステムに組み込む場合のものとに別れる。前者 については、スナップショットの作成指示がある。データベース制御部 2102は、スナ ップショット作成指示を仲介装置 2200から受信すると、データベース 2101のスナツ プショットを作成する。そして、作成したスナップショットを、スナップショット作成指示 で指示されている転送先の他のサーバ 2100に転送する。サーバ 2100はスナップシ ヨットの転送の後にシステムから一時的に切り離される。また、サーバ 2100は、スナツ
プショットを転送すると、後述するように、やがて仲介装置 2200から差分情報を受信 する。この差分情報は、サーバ 2100が一時的にシステム力も切り離されている間に、 仲介装置 2200がクライアント 2500から受信した処理要求である。データベース制御 部 2102は、この差分情報を処理する。
[0193] 他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部 21 02は、他のデータベースサーバ 2100からスナップショットを受信すると、このスナツ プショットを用いて自身のデータベース 2101を復元する。データベース 2101の復元 が完了すると仲介装置 2200に対して差分情報転送要求を送出する。後述するよう に、差分情報転送要求に応じて仲介装置 2200から差分情報が転送されるので、こ の差分情報を用 、てデータベース 2101を復元する。
[0194] また、データベース制御部 2102は、本システムに組み込む際には、仲介装置 220 0に対して組み込み要求を送信する。この組み込み要求は、サーバ 2100の起動時 や、必要に応じて任意のタイミングで送出する。
[0195] 仲介装置 2200は、本システム内のサーバ 2100を管理するサーバ管理表 2201と 、トランザクションを管理するトランザクション管理表 2202と、同期化用に差分情報を 蓄積する差分情報蓄積部 2203と、サーバ 2100に送信するクエリを一時保存する送 信キュー 2204と、クライアント 2500 ·サーバ 2100間での処理の仲介やサーバ 2100 の同期化制御などを行うサーバ制御部 2210とを備えている。
[0196] サーバ管理表 2201は、サーバが正常稼働中(active)か、障害などで停止してい る(down)力 同期化処理中(sync)かという状態を保存している。図 38にサーバ管 理表の一例を示す。サーバ管理表 2201は、図 38に示すように、サーバ 2100を識 別するためのサーバ IDと、サーバの稼働状態力も構成されている。図 38の例では、 サーバ 2100aとサーバ 2100bとサーバ 2100cが登録されており、稼働状態は共に 正常稼働を示す activeである。また、本実施形態では、サーバ IDとして各サーバ 21 00に付された IPアドレスを用いた。
[0197] トランザクション管理表 2202は、現在実行中の又は実行開始を保留されているトラ ンザクシヨンの有無を記憶する。図 39にトランザクション管理表 2202の一例を示す。 図 39に示すように、トランザクション管理表 2202は、クライアントを一意に識別するク
ライアント IDとトランザクションを一意に識別するトランザクション ID力も構成される。こ れらのペアは、トランザクション開始時にトランザクション管理表 2202に登録され、トラ ンザクシヨン終了時にトランザクション管理表 2202から削除される。クライアント IDは 、例えばクライアント 2500の IPアドレスやポート番号である。トランザクション IDは新し いトランザクションが発生する毎にサーバ制御部 2210が新たに割り振る。
[0198] 差分情報蓄積部 2203は、サーバ同期化時にクライアント 2500から受信する全て のクエリを蓄積する。図 40に差分情報蓄積部 2203が蓄積している差分情報の一例 を示す。差分情報蓄積部 2203の各データは、図 40に示すように、クライアント 2500 が送信したクエリと、このクエリが所属するトランザクション IDとから構成される。トラン ザクシヨン IDはトランザクション管理表 2202から取得する。同期化処理時におけるク ライアント 2500からの新たなクエリは、この差分情報蓄積部 2203の最後に追加され る。つまり、上力も古いクエリが蓄積されている。図 40の例では、トランザクション ID = 1の BEGINが一番古ぐ COMMITが一番新しい。
[0199] 送信キュー 2204は、各クライアント 2500から受信したクエリを各サーバ 2100に送 信するまで一時的に保存するバッファメモリである。図 41に送信キュー 2204の一例 を示す。送信キュー 2204の各データは、図 41に示すように、クライアント 2500が送 信したクエリと、このクエリが所属するトランザクション IDと、サーバ 2100に送信したか 否かを表す送信情報とから構成される。トランザクション IDはトランザクション管理表 2 202力ら取得する。クライアント 2500からの新たなクエリは、この送信キュー 2204の 最後に追加される。つまり、上から古いクエリが蓄積されている。図 41の例では、トラ ンザクシヨン ID= 1の BEGINが一番古ぐトランザクション ID = 2の BEGINが一番新 しい。この送信キュー 2204の送信状態は、クライアント 2500からクエリを受信した際 には「未送信」が設定され、正常稼働中の全てのサーバ 2100に送信されると「送信 完了」が設定される。送信完了となったエントリは、直ちに又は所定期間経過後に送 信キュー 2204から削除される。
[0200] サーバ制御部 2210は、通常の処理(同期化処理時以外の処理)として、クライアン ト 2500からのパケットをネットワーク 2400経由で受信し、サーバ管理表 2201を見て 正常稼働している全てのサーバ 2100へ該パケットを転送する。ここで、サーバ 2100
へ転送するパケットは、送信キュー 2204に「未送信」として記憶されているクエリが対 象であり、送信キュー 2204に記憶されている古いクエリから順に転送される。そして 、サーバ 2100からのパケットをネットワーク 2300経由で受信し後述するパケットの正 当性判断方法により 1つ以上の該パケットのうち 1つを選出し 1つの正しいパケットを ネットワーク 2400を経由してクライアント 2500へ転送する。なお、同期化処理時には 、「未送信」のクエリであっても新規トランザクションに属するクエリは送信せず、実行 中のトランザクションに属するクエリのみを古い順に正常稼働中のサーバ 2100に送 信する。
[0201] ここで、サーバ制御部 2210は、クライアント 2500からの処理要求を解析してトラン ザクシヨンの開始と終了を検出してトランザクション管理表 2202を更新する。トランザ クシヨン開始と終了をサーバ制御部 2210が検出する方法は、 DBMSの種類によつ て異なる。例えば前述の PostgreSQLの場合は、トランザクションの開始はクライアン ト 2500力 S「BEGIN」という SQLを送信した時であり、トランザクションの終了はクライア ント 2500力 COMMIT」「ROLLBACK」という SQLを送信した時である。また、 Or acleの場合は、トランザクションの開始はクライアント 2500が有効な SQLを送信した ときであり(明示的なトランザクションの開始を宣言する SQLは無い)、トランザクション の終了はクライアント 2500が「COMMIT」「ROLLBACK」という SQLを送信した時 である。また、 AUTO COMMITモードで動作する場合には、クライアント 2500力 ら受信した SQL文はそれぞれ 1つの独立したトランザクションに属していると解釈でき るので、クライアント 2500から SQLを受信する毎に、該 SQL実行前にトランザクショ ンが開始されるとともに SQL実行後に当該トランザクションが終了したこととして扱うこ とがでさる。
[0202] また、パケットの正当性判断方法は、例えば、多数決で決める方法や、受信したパ ケットを所定のルールに基づいて判断する方法がある。例えば、クライアント 2500力 らの「参照」要求に対して「更新成功」 、う応答が返ってきた場合、正常であればそ のような応答はあり得ないので (参照成功など参照に関する応答のはず)、この応答 パケットは正しくないと判断する。また、パケット中にデータ長フィールドがある場合、 このデータ長フィールドの値と実際に受信したパケット長を比較し、異なる場合は正し
くないと判断する。また、複数のサーバ 2100の中力も Masterサーバを予め 1台決め ておき、このサーバ 2100からのパケットを常に正しいと判断する。また、上記複数の 方法を併用する方法もある。例えば、 3台で多数決を行った結果、パケットの中身が 全てバラバラであり、多数派のパケットを決められない場合は Masterサーバのバケツ トを正しいと判断する。正常稼働しているサーバが 1つだけの場合は、そのサーバか らの応答パケットを正常と判断する。
[0203] サーバ制御部 2210は、正当ではない応答を送信したサーバ 2100は障害と判断し 、そのサーバ 2100につ 、てはサーバ管理表 2201から登録を削除することによりシ ステム力も切り離す。なお、応答を返してこないサーバ 2100も障害と判断する。
[0204] さらに、サーバ制御部 2210は、ネットワーク 2300を介してサーバ 2100からシステ ムの組み込み要求を受信すると、この新規のサーバ 2100と、正常稼働中のサーバ 2 100とを同期化させる処理を行う。以下にその処理にっ 、て説明する。
[0205] サーバ制御部 2210は、サーバ 2100からシステムの組み込み要求を受信すると、 正常稼働中の複数のサーバ 2100から 1つのサーバ 2100を選定し、このサーバ 210 0に対してスナップショットの作成指示を送出する。そして、スナップショットの作成指 示を送信したサーバ 2100については、サーバ管理表 2101の状態を「sync」に変更 することによりシステム力も切り離す。なお、以降の説明において、サーバ管理表 210 1の状態が「sync」となっているサーバ 2100を「同期化用サーバ 2100」と呼ぶことと する。また、状態が「active」となっているサーバ 2100を「正常稼働中のサーバ 2100 」と呼ぶこととする。
[0206] スナップショットの作成指示を送出するタイミングは、サーバ 2100においてトランザ クシヨンが実行中でないことが求められる。これはスナップショット作成中にトランザク シヨンが ROLLBACKするとデータの同期化が図れない場合があることを防止するた めや、 COMMITされて!/、な!/、ために更新データがスナップショットに反映されな!、こ とを防止するためである。このためサーバ制御部 2210は、処理中のトランザクション が終了するまでスナップショットの作成指示の送出を待つとともに、スナップショット作 成指示の送出までは新規トランザクションを開始しないようにしている。そして、新規ト ランザクシヨンに係る SQLについては、スナップショット作成指示の送信後に、正常稼
働中のサーバ 2100で処理するとともに、差分情報蓄積部 2203に蓄積する。差分情 報蓄積部 2203に蓄積するクエリは、トランザクション制御 SQL、参照系 SQL及び更 新系 SQLを含む全ての SQLが対象となる。
[0207] サーバ制御部 2210がスナップショットの作成指示を送出すると、当該スナップショ ットは新規のサーバ 2100に転送され、このサーバ 2100からサーバ制御部 2210に 対して差分情報転送要求が送出される。サーバ制御部 2210は、差分情報転送要求 を受信すると、新規のサーバ 2100及び同期化用サーバ 2100に対して、差分情報 蓄積部 2203に蓄積されているクエリを古いもの力も順次送信する。差分情報蓄積部 2203に蓄積されている SQLを全て送出すると、サーバ制御部 2210は、新規サーバ 2100及び同期化用サーバ 2100をシステムに組み込むべくサーバ管理表 2201を 更新する。
[0208] ここで、サーバ制御部 2210は、差分情報の送出中にクライアント 2500から新たな クエリを受信する場合があるが、この場合は当該クエリを差分情報蓄積部 2203の最 後に追加するとともに正常稼働中のサーバ 2100へ送信すれば良い。ただし、クライ アント 2500のクエリ送出頻度が高い場合などには、差分情報の送出終了まで、すな わち同期化終了まで長時間要する場合が考えられる。そこで、差分情報蓄積部 220 3における未送信の差分情報が所定件数以下となったら、クライアント 2500からのク エリを一時保留して差分情報の送出のみを行い、まず差分情報の送出を完了させる 。そして、前述のように新規サーバ 2100及び同期化用サーバ 2100をシステムに組 み込むべくサーバ管理表 2201を更新した後に、保留していたクエリ処理を再開する と好適である。
[0209] クライアント 2500は、データベースサーバ 2100に対して更新クエリ(データベース を更新するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)などを 発行するものである。
[0210] 次に、本実施の形態に係る多重化データベースシステムの動作について図面を参 照して説明する。まず、サーバ 2100a, 2100b, 2100cが正常に動作している場合 の動作を図 42から図 44を参照して説明する。
[0211] 初期状態では、データベース 2101aと 2101bと 2101cは完全に同一であり、サー
バ管理表 2201は図 43のようになっているものとする。また、トランザクション管理表 2 202と差分†青報蓄積咅 2203は空であるとする。各サーノ 2100a, 2100b, 2100c には、テーブル test— tableが存在して!/、るとする。
[0212] クライアント 2500aが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を含んだ パケットを送信すると、仲介装置 2200はそのパケットを受信する (ステップ S21)。サ ーバ制御部 2210は、トランザクションが開始されたことを検知し、トランザクション管 理表 2202にクライアント 2500aの IPアドレスとトランザクション番号を登録する(ステツ プ S22)。図 44にこのときのトランザクション管理表 2202を示す。そして、このパケット に係るクエリを送信状態「未送信」で送信キュー 2204に入れる。
[0213] サーバ制御部 2210は、送信キュー 2204から当該「未送信」のクエリを取り出し、サ ーバ管理表 2201を見て正常稼働している全てのサーバ 2100に該パケットを送信す る。この場合、サーノ 2100aと 2100bと 2100c力正常稼働しているので、サーバ制 御部 2210はサーバ 2100aとサーバ 2100bと 2100cへ該パケットを転送する(ステツ プ S23〜S25)。そして、各サーバ 2100への送信が完了したので送信キュー 2204 の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 2200は、全ての サーバ 2100から応答パケットを受信 (ステップ S26〜S28)するまで待ち、全ての応 答パケットが揃ったら、各応答パケットを互いに比較することでサーバ 2100に障害が 発生している力否かをチェックする (ステップ S29)。この場合、 3つの応答パケットは 全てトランザクションが正常に開始されたことを示すパケットであるため、障害は無い と判断し応答パケットの 1つをクライアント 2500aへ転送する(ステップ S 210)。
[0214] 次に、クライアント 2500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S211)。サーバ制御部 2210は、受 信したクエリを送信キュー 2204に入れる。そして、送信キュー 2204から当該クエリを 取り出し、サーバ管理表 2201を見て正常稼働しているサーノ 、この場合、サーバ 21 00aと 2100bと 2100cへ該パケットを転送する(ステップ S212〜S214)。次いで、送 信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 2 200は、全てのサーバ 2100力も応答パケットを受信 (ステップ S215〜S217)するま で待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサー
ノ 2100に障害が発生している力否かをチェックする (ステップ S218)。この場合、 3 つの応答パケットは全て UPDATE成功したことを示すパケットであるため、障害は無 いと判断し応答パケットの 1つをクライアント 2500aへ転送する(ステップ S219)。
[0215] 次に、クライアント 2500aは、テーブル test— tableへの更新を確定する(実際にデ ータベースを更新する) SQL (COMMIT)を含んだパケットを 172.17.1.1へ送信する (ステップ S220)。サーバ制御部 2210は、受信したクエリを送信キュー 2204に入れ る。そして、送信キュー 2204から当該クエリを取り出し、サーバ管理表 2201を見て 正常稼働しているサーノ 、この場合、サーノ 2100aとサーノ 2100bと 100cへ該ノ ケットを転送する (ステップ S221〜S223)。次いで、送信キュー 2204の送信状態を 「送信完了」にして当該エントリを削除する。仲介装置 2200は、全てのサーバ 2100 力も応答パケットを受信 (ステップ S224〜S226)するまで待ち、全ての応答パケット が揃ったら、各応答パケットを互いに比較することでサーバ 2100に障害が発生して いるか否かをチェックする(ステップ S227)。この場合、 3つの応答パケットは全て CO MMIT成功したことを示すパケットであるため、障害は無いと判断する。 COMMIT が正常に完了したことから、トランザクションが終了したことが分力るので、サーバ制御 部 2210はトランザクション管理表 2202からこのトランザクションの登録を削除する(ス テツプ S228)。このときのトランザクション管理表 2202は再び初期状態 (すなわち空) になる。サーバ制御部 2210は応答パケットの 1つをクライアント 2500aへ転送する( ステップ S229)。
[0216] 次に、サーバ 2100bが故障などで障害になった場合の動作を図 45から図 47を参 照して説明する。初期状態では、データベース 2101a, 2101b, 2101cは完全に同 一であり、サーバ管理表 2201は前述した図 43のようになっているとする。また、トラン ザクシヨン管理表 2202と差分情報蓄積部 2203は空であるとする。
[0217] クライアント 2500aが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を含んだ パケットを送信すると、仲介装置 2200はそのパケットを受信する (ステップ S230)。サ ーバ制御部 2210は、トランザクションが開始されたことを検知し、トランザクション管 理表 2202にクライアント 2500aの IPアドレスとトランザクション番号を登録する(ステツ プ S231)。図 46にこのときのトランザクション管理表 2202を示す。そして、このバケツ
トに係るクエリを送信状態「未送信」で送信キュー 2204に入れる。
[0218] サーバ制御部 2210は、送信キュー 2204から当該「未送信」のクエリを取り出し、サ ーバ管理表 2201を見て正常稼働している全てのサーバ 2100、この場合、サーバ 2 100aと 2100bと 2100cへ該パケットを転送する(ステップ S232〜S234)。次いで、 送信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 2200は、全てのサーバ 2100から応答パケットを受信(ステップ S235〜S237)する まで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサ ーバ 2100に障害が発生して 、る力否かをチェックする (ステップ S238)。この場合、 3つの応答パケットはともにトランザクションが正常に開始されたことを示すパケットで あるため、障害は無いと判断し応答パケットの 1つをクライアント 2500aへ転送する( ステップ S239)。
[0219] ここで、サーバ 2100cは、ステップ S237で応答パケットを返した後、故障などの障 害が発生してダウンしたものとする(ステップ S240)。
[0220] 次に、クライアント 2500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S241)。サーバ制御部 2210は、受 信したクエリを送信キュー 2204に入れる。そして、送信キュー 2204から当該クエリを 取り出し、サーバ管理表 2201を見て正常稼働しているサーノ 、この場合、サーバ 21 00aと 2100bと 2100cへ該パケットを転送する(ステップ S242〜S244)。この時点で は、サーバ制御部 2210はサーバ 2100cのダウンを知らないので、サーバ 2100cが 正常稼働して 、ると 、う情報がサーバ管理表 2201に格納されたままである。、 、で 、送信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 2100a及び 2100bは応答パケットを仲介装置 2200に送信し、仲介装置 2200がこ の応答パケットを受信する (ステップ S245, S246)。この時点では応答パケットが全 て揃っているわけではないので、サーバ制御部 2210は残りのサーバ 2100cからの 応答パケットを待つ。し力し、サーバ 2100cはダウンしているのでサーバ 2100cから の応答パケットは 、つまで経っても仲介装置 2200には届かな!/、。これによりサーバ 制御部 2210はタイムアウトし、サーバ 2100cのダウンを検知する。そして、サーバ制 御部 2210はサーバ管理表 2201のサーバ 2100cを activeから down (サーバ停止
状態)に書き換える (ステップ S247)。そのときのサーバ管理表 2201を図 47に示す 。また、ここでサーバ 2100a及び 2100bからの応答パケットを互いに比較することで サーバ 2100に障害が発生しているか否かをチェックする。この場合、 2つの応答パ ケットはともに UPDATE成功を示すパケットであるため、障害は無いと判断し、サー バ制御部 2210は応答パケットの 1つをクライアント 2500aへ転送する(ステップ S248 ) oここでは、クライアント 2500aにとつて、サーバ 2100cが障害になったかどうかは認 識せず、今までと同様に仮想サーバ 2800からサービスを受けることができることに注 目すべさである。
[0221] 次に、クライアント 2500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.17.1.1へ送信する(ステップ S249)。サーバ制御部 2 210は、受信したクエリを送信キュー 2204に入れる。そして、送信キュー 2204から 当該クエリを取り出し、サーバ管理表 2201を見て正常稼働しているサーバ、この場 合、サーバ 2100a及び 2100bへ該パケットを転送する(ステップ S250, S251)。次 いで、送信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。仲 介装置 2200は、正常稼働中の各サーバ 2100a及び 2100bから応答パケットを受信 (ステップ S252, S253)するまで待ち、全ての応答パケットが揃ったら、各応答パケ ットを互いに比較することでサーバ 2100に障害が発生している力否かをチェックする (ステップ S254)。この場合、 2つの応答パケットはトランザクションが正常に開始され たことを示すパケットであるため、障害は無いと判断する。 COMMITが正常に完了 したことから、トランザクションが終了したことが分力るので、サーバ制御部 2210はトラ ンザクシヨン管理表 2202からこのトランザクションの登録を削除する (ステップ S255) 。このときのトランザクション管理表 2202は再び初期状態 (すなわち空)になる。サー バ制御部 2210は応答パケットの 1つをクライアント 2500aへ転送する(ステップ S256
) o
[0222] ここで、ステップ S250及び S51によって、サーノ 2100aと 2100bのデータベース 2 101a及び 2101bは、クライアント 2500aからの UPDATE (ステップ S249)が反映さ れているのに対して、サーバ 2100cのデータベース 2101cにはクライアント 2500aか らの UPDATE (ステップ S249)が反映されていない、つまり、データベース 2101a
及び 2101bとデータベース 2101cとは非同期状態になったことに注目すべきである
[0223] 次に、サーバ 2100cが障害力も復旧しシステムに組み込む(追加する)場合の動作 を図 48から図 56を参照して説明する。このとき注目すべきポイントは、クライアント 25 00a及び 2500bに対するサービスを続けたままサーバ 2100cを追加する、つまり、シ ステムダウンさせずに各データベース 2101a, 2101b, 2101cを同期させることであ る。
[0224] データベース 2101cはデータベース 2101a及び 2101bと同期がとれていない状 態、つまり、同一ではない状態である。例えば、データベース 2101cは、図 45のステ ップ S 240の障害が起きる直前のデータを保持して 、る力もしれな 、し、全く新 ヽサ ーバの場合には、データを全く持っていない状態力もしれない。本発明では、前者の 場合でも古いデータは削除し、データベース 2101cはデータを全く保持していない ものとしてシステムに組み込む。つまり、ステップ S 240以前の古いデータを保持して いる必要はない。
[0225] ここでは、サーバ管理表 2201は図 51のようになっているとする。また、トランザクシ ヨン管理表 2202と差分情報蓄積部 2203は空であるとする。
[0226] 図 48に示すように、クライアント 2500aが 172.17.1.1宛のトランザクション開始 SQL ( BEGIN)を含んだパケットを送信すると、仲介装置 2200はそのパケットを受信する( ステップ S260)。サーバ制御部 2210は、トランザクションが開始されたことを検知し、 トランザクション管理表 2202にクライアント 2500aの IPアドレスとトランザクション番号 を登録する(ステップ S261)。図 52にこのときのトランザクション管理表 2202を示す。 サーバ制御部 2210は、受信したクエリを送信キュー 2204に入れる。そして、送信キ ユー 2204から当該クエリを取り出し、サーバ管理表 2201を見て正常稼働して 、るサ ーノ 、この場合、サーバ 2100a及び 2101bへ該パケットを転送する(ステップ S262, S263)。次いで、送信キュー 2204の送信状態を「送信完了」にして当該エントリを削 除する。仲介装置 2200は、応答パケットを各サーバ 2100から受信すると (ステップ S 264, S265)、各応答パケットを比較して障害有無をチェックし (ステップ S266)、正 当な応答パケットの 1つをクライアント 2500aへ転送する(ステップ S267)。
[0227] ここで、新規サーバ 2100cは電源を投入し起動されたものとする。これにより、サー ノ 2100cのデータベース制御部 2102cは、データベース同期化要求(糸且込要求)を 仲介装置 2200へ送信する (ステップ S 268)。
[0228] データベース同期化要求を受信したサーバ制御部 2210は、トランザクション管理 表 2202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとと もに、実行中トランザクションの情報を記録しておく(ステップ S269)。図 52より、クラ イアント 2500a,トランザクション番号 3のトランザクションが実行中なので、データべ ース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション 開始要求を受け取った場合は、その要求をサーバ 2100へ転送することを遅らせる( ステップ S270)。つまり、同期化動作は実行中のトランザクションが全くない状態で始 める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュー 2204での保留と 、う手段で実現する。
[0229] 次に、クライアント 2500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S271)。サーバ制御部 2210は、受 信したクエリを送信キュー 2204に入れる。このクエリは前記ステップ S269で記憶した トランザクション情報を参照することで同期化要求時に実行していたトランザクション に属するものと判定できるので、サーバ制御部 2210は、送信キュー 2204から当該ク エリを取り出し、サーバ管理表 2201を見て正常稼働しているサ一ノ^この場合、サ ーバ 2100a及び 100bへ該パケットを転送する(ステップ S272, S273)。次いで、送 信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 2 200は、正常稼働中の各サーバ 2100a及び 100bから応答パケットを受信 (ステップ S274, S275)するまで待ち、各応答パケットが揃うと該パケットから障害の有無を判 定する(ステップ S276)。そして、サーバ制御部 2210は、正当な応答パケットの 1つ をクライアント 2500aへ転送する(ステップ S277)。
[0230] 次に、クライアント 2500bが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を 含んだパケットを送信すると、仲介装置 2200はそのパケットを受信する (ステップ S2 78)。サーバ制御部 2210は、このパケットによりトランザクションが開始されたことを検 知し、トランザクション管理表 2202にクライアント 2500bの IPアドレスとトランザクショ
ン番号を登録する(ステップ S279)。図 53にこのときのトランザクション管理表 2202 を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー 2204に 入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始タエ リは送信キュー 2204に保持したまま、正常稼働中のサーバ 2100a, 2100bへは転 送しな 、(ステップ S 280)。
[0231] 次に、クライアント 2500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.11.1.1へ送信する(ステップ3281)。サーバ制御部 2 210は、受信したクエリを送信キュー 2204に入れる。このクエリは前記ステップ S269 で記憶したトランザクション情報を参照することで同期化要求時に実行していたトラン ザクシヨンに属するものと判定できるので、サーバ制御部 2210は、送信キュー 2204 力も当該クエリを取り出し、サーバ管理表 2201を見て正常稼働しているサーバ、この 場合、サーバ 2100a及び 2100bへ該パケットを転送する(ステップ S282, S283)。 次いで、送信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。 仲介装置 2200は、正常稼働中の全てのサーバ 2100a及び 2100b力も応答パケット を受信 (ステップ S284, S285)するまで待ち、全ての応答パケットが揃ったら該パケ ットから障害の有無をチェックする(ステップ S286)。また、 COMMITが正常に完了 したことから、トランザクションが終了したことが分力るので、サーバ制御部 2210はトラ ンザクシヨン管理表 2202からこのトランザクションの登録を削除する(ステップ S287) 。この時のトランザクション管理表 2202を図 54に示す。サーバ制御部 2210は正当 な応答パケットの 1つをクライアント 2500aへ転送する(ステップ S288)。
[0232] ここで、新規サーバ 2100cからの同期化要求時に実行していたトランザクションが 全て無くなつたので、サーバ制御部 2210は同期化動作を開始する (ステップ S289) 。具体的には、まず、サーバ制御部 2210は、正常稼働中のサーバ 2100a及び 210 Obの中から同期化用サーバ 2100を 1つ選定する(ステップ S290)。本実施の形態 ではサーバ 2100bを選択したものとする。そして、同期化用サーバ 2100bに対して 同期化指示 (スナップショット作成指示)を送出する (ステップ S291)。また、サーバ管 理表 2201のサーバ 2100bについて状態を「sync」に変更する(ステップ S292)。こ の時のサーバ管理表 2201を図 55に示す。なお、前記ステップ S289において、トラ
ンザクシヨン管理表 2202に記録されているトランザクションが同期化要求時に実行中 であったもの力、又は、その後にクライアント 2500から受信したものかを判定するに は、前記ステップ S269で記録してぉ 、た同期要求時のトランザクション情報を参照 すればよい。
[0233] 同期化指示を受け取った同期化用サーバ 2100bのデータベース制御部 2102bは
、データベース 2101bのスナップショットを作り出す (ステップ S293)。ここで、このス ナップショットは、同期化指示を受け取った時点でのデータベース全体のバックアツ プデータやデータベースを復元するための情報であり、同期化指示後の更新は反映 されて 、な 、ことに注目すべきである。
[0234] 同期化用サーバ 2100bのデータベース制御部 2102bは、スナップショット作成が 完了すると (ステップ S294)、作成したスナップショットを新規サーバ 2100cへ転送す る。このスナップショットの作成'転送とデータベースの復元は、データベース 2101b のサイズが大きければ大きいほど時間が力かる力 クライアントからのデータベースァ クセスは正常稼働中のサーバ 2100aで実行されるのでクライアントに対するサービス を止めることはない。
[0235] 新規サーバ 2100cのデータベース制御部 2102cは、同期化用サーバ 2100bから 受信したスナップショットからデータベースを復元する(ステップ S295)。
[0236] 仲介装置 2200のサーバ制御部 2210は、サーバ 2100bに対して同期化指示を送 信し(前記ステップ S291)、サーバ 2100bについてサーバ管理表 2201の状態を「sy nc」に変更すると(前記ステップ S292)、直ちに、クライアント 2500からの処理要求に 対する処理を再開する。ここで、クライアント 2500から処理要求を処理するサーバは 、状態が「active」のサーバ 2100aである。つまり、同期化用サーバ 2100bは、一時 的にシステム力 切り離され専ら同期化処理のみを行うことになる。また、ここでは、処 理せずに送信キュー 2204に保持して!/、た、クライアント 2500bからの BEGINを含ん だパケットの処理を再開する。すなわち、サーバ制御部 2210は、転送せずに保持し て 、たクライアント 2500bからの BEGIN SQLを含んだパケットを送信キュー 2204 力も取り出して差分情報蓄積部 2203に保存するとともに (ステップ S295)、正常稼 働中のサーバ 2100aへ転送する(ステップ S296)。次いで、送信キュー 2204の送
信状態を「送信完了」にして当該エントリを削除する。
[0237] 正常稼働中のサーバ 2100aは、応答パケットを仲介装置 2200に送信し、仲介装 置 2200がこの応答パケットを受信する(ステップ S297)。仲介装置 2200は、この応 答パケットをクライアント 2500bへ転送する(ステップ S298)。
[0238] 次!、で、クライアント 2500bがテーブル test_tableの更新 SQL (UPDATE)のパ ケットを仲介装置 2200に送信すると (ステップ S299)、サーバ制御部 2210は、受信 したクエリを送信キュー 2204に入れる。そして、送信キュー 2204から当該クエリを取 り出し、当該クエリを差分情報蓄積部 2203に保存するとともに (ステップ S2100)、正 常稼働中のサーバ 2100aに当該パケットを送信する (ステップ S2101)。次いで、送 信キュー 2204の送信状態を「送信完了」にして当該エントリを削除する。ここで、サ ーバ 2100aは UPDATEに失敗し、その旨を通知する応答パケットを仲介装置 220 0に送信したものとする (ステップ S2102)。仲介装置 2200は、この応答パケットをク ライアン卜 2500bに送信する(ステップ S2103)。
[0239] UPDATE失敗の応答パケットを受信したクライアント 2500bは、トランザクションを 取り消す SQL (ROLLBACK)のパケットを仲介装置に送信する(ステップ S2104)。 サーバ制御部 2210は、受信したクエリを送信キュー 2204に入れる。そして、送信キ ユー 2204から当該クエリを取り出し、当該 SQLを差分情報蓄積部 2203に保存する とともに (ステップ S2105)、正常稼働中のサーバ 2100aに当該パケットを送信する( ステップ S2106)。次いで、送信キュー 2204の送信状態を「送信完了」にして当該ェ ントリを削除する。そして、サーバ 2100aから正常にトランザクションが ROLLBACK されたことを通知する応答パケットを受信すると (ステップ S2107)、トランザクション管 理表 2202から当該トランザクションの登録を削除するとともに (ステップ S2108)、こ の応答パケットをクライアント 2500bに送信する(ステップ S2109)。この時点での差 分情報蓄積部 2203を図 56に示す。また、トランザクション管理表 2202は空になる。
[0240] ここで、新規サーバ 2100cにおいてスナップショットからのデータベース 2101cの 復元が完了したものとする(ステップ S2110)。新規サーバ 2100cはデータベース 21 01cの復元が完了すると差分情報転送要求を仲介装置 2200に送信する (ステップ S 2111)。仲介装置 2200のサーバ制御部 2210は、差分情報転送要求を受信すると
、差分情報蓄積部 2203に蓄積されているデータを古いものから順に新規サーバ 21 OOc及び同期化用サーバ 2100bに転送する処理を開始する(ステップ S 2112)。
[0241] 前記ステップ S2112で差分情報蓄積部 2203に蓄積されている全てのクエリが転 送 ·処理されることでデータベース 2101aとデータベース 2101b及び 2101cとは完 全に一致した状態(同期状態)になるが、この転送処理中にクライアント 2500から新 たなクエリを受信する場合がある。例えば、図 50に示すように、仲介装置 2200は、ク ライアント 2500bから新規トランザクションを開始するクエリ(BEGIN)を受信する (ス テツプ S2113)。仲介装置 2200は、当該新規トランザクションをトランザクション管理 表 2202に登録する (ステップ S2114)。そして、当該クエリを送信キュー 2204に入 れる。次いで、送信キュー 2204から当該クエリを取り出し、差分情報蓄積部 2203の 最後に当該クエリを追加するとともに (ステップ S 2115)、正常稼働中のサーバ 2100 aに送信する (ステップ S2116)。そして、送信キュー 2204の送信状態を「送信完了」 にして当該エントリを削除する。次いで、サーバ 2100aから応答パケットを受信すると (ステップ S2117)、当該応答パケットをクライアント 2500bに転送する (ステップ S21 18)。
[0242] このように差分情報転送中にクライアント 2500から受信したクエリは、正常稼働中 のサーバ 2100で処理するとともに、差分情報蓄積部 2203に蓄積していく。この処理 を継続していくと、やがて差分情報蓄積部 2203に蓄積されているクエリは全て新規 サーバ 2100c及び同期化用サーバ 2100bに転送され、差分情報蓄積部 2203は空 になり、これを契機に差分情報転送処理が終了する (ステップ S2119)。これによりデ ータベース 2101aとデータベース 2101b及び 2101cは完全に一致した状態(同期 状態)となるので、サーバ制御部 2210は、サーバ管理表 2201に新規サーバ 2100c を追加し稼働状態を activeとするとともに、同期化用サーバ 2100bの稼働状態を act iveに変更することでシステムにサーバ 2100b及び 2100cを追加する(ステップ S 21 20)。この時のサーバ管理表 2201を図 57に示す。これにより、サーバ 2100cがシス テムに組み込まれた状態となるので、以降の動作は図 42を参照して前述したものと 同様となる。
[0243] この手順を繰り返せば、もともとシステムに組み込まれていたが障害等のためにシス
テム力も切り離されたサーバであっても、新規のサーバであっても、理論的にはいくら でも追加できる。つまり、追加できるサーバ数に制限はない。
[0244] 以上のように本実施の形態に係る多重化データベースシステムによれば、サーバ 2 100のデータベース 2101の記憶状況に拘わらず、サーバ 2100をシステムに組み込 むことができる。すなわち、元々システムに組み込まれていたが障害により切り離され たサーバ(ディスク障害によりデータを失ってしまったものなども含む)であっても、全 く新規のサーバであっても同様の手順でシステムに組み込むことができる。
[0245] また、仲介装置 2200においてデータ同期化用に差分情報蓄積部 2203に記憶す る同期化用データは、これから組み込むサーバ 2100からの組み込み要求を受信し て力も蓄積を開始するので、仲介装置 2200において同期化用データが増大するこ とがない。これにより、仲介装置 2200の記憶容量を節約でき、該記憶容量が溢れる ことによる障害発生を未然に防止できる。また、サーバ 2100の切り離しも任意に行う ことができる。
[0246] したがって、本実施の形態に係る多重化データベースシステムでは、サーバの組み 込み及び切り離しを任意に実施できるので、用途や予算などの要求に応じて柔軟な システム設計を行うことができる。
[0247] さらに、サーバ 2100の組込処理の際には、正常稼働中の複数のサーバ 2100の中 力も同期化処理用のサーバ 2100を選定し、この同期化処理用サーバ 2100を用い てスナップショットの作成 ·転送を行っているので、これと並行してクライアント 2500か らの処理要求を正常稼働中の他のサーバ 2100を用いて処理できる。したがって、組 込処理とクライアントからの処理要求に係る処理が異なるサーバで処理されるので負 荷が分散されるとともに、スナップショットの作成中にもクライアント 2500からの処理 要求に応じることができるので、クライアント 2500に対して円滑なサービスの提供を 継続できる。
[0248] 本実施の形態の変形例について説明する。上記実施形態では、差分情報転送中 にクライアント 2500から新たなクエリを受信すると、当該クエリを差分情報蓄積部 220 3に追記していた。このような処理では、差分情報の処理に時間が力かる場合や、ク ライアントからの受信するクエリの受信間隔が短い場合には、差分情報蓄積部 2203
のデータが何時までたっても空にならな力つたり空になるまで長時間要することになり
、結果として新規サーバ 2100cの組み込み処理完了まで長時間要することが考えら れる。そこで、差分情報転送中に差分情報蓄積部 2203のエントリ数が所定数以下と なったら、新規クエリの処理を一時保留して専ら差分情報の転送のみを行って差分 情報蓄積部 2203を空にしてしまうと良い。以下、このような処理について図 58を参 照して説明する。
[0249] ここでは、新規のサーバ 2100cがスナップショットからデータベース 2101cの復元 処理中であるとする(ステップ S2200)。そして、サーバ 2100cにおいてデータべ一 ス 2101cの復元処理が完了し (ステップ S2201)、サーバ 2100cが仲介装置 2200 に差分情報転送要求を送信した時点で (ステップ S2202)、差分情報蓄積部 2203 には所定件数以上の差分情報が蓄積されているものとする。図 58の例では、ステツ プ S2203〜ステップ S2207による UPDATEのクエリが最新の差分情報として差分 情報蓄積部 2203に記憶されているものとする。
[0250] 図 58に示すように、仲介装置 2200のサーバ制御部 2210は、サーバ 2100cから 差分情報転送要求を受信すると、前述したように、差分情報蓄積部 2203に記憶され ている各クエリを古いものから順に新規サーバ 2100c及び同期化用サーバ 2100b に転送する処理を開始する (ステップ S2208)。
[0251] サーバ制御部 2210は、クライアント 2500bから新たなクエリを受信したとする。図 5 8の例では、サーバ制御部 2210は、クライアント 2500b力もデータを追加する SQL ( INSERT)を含むパケットを受信する (ステップ S 2209)。差分情報転送中に新規ク エリを受信したサーバ制御部 2210は、受信したクエリを送信キュー 2204に入れる。 そして、送信キュー 2204から当該クエリを取り出し、差分情報蓄積部 2203に蓄積さ れている未転送のクエリの件数が所定件数より多い場合には、このクエリを差分情報 蓄積部 2203の最後に追記するとともに (ステップ S2210)、正常稼働中のサーバ 21 00aに該パケットを転送する (ステップ S2211)。次いで、送信キュー 2204の送信状 態を「送信完了」にして当該エントリを削除する。サーバ制御部 2210は、 INSERTが 成功したことを示す応答パケットをサーバ 2100aから受信すると (ステップ S2212)、 この応答パケットをクライアント 2500bに転送する (ステップ S 2213)。
[0252] ここで、仲介装置 2200から新規サーバ 2100c及び同期化用 2100bへの差分情報 の転送は並行して行われており、これにより差分情報蓄積部 2203に記憶されている 未転送のクエリが所定数以下となったとする。
[0253] サーバ制御部 2210は、クライアント 2500b力もデータを更新する SQL (UPDATE )を含むパケットを受信すると (ステップ S2214)、受信したクエリを送信キュー 2204 に入れる。ここでは、差分情報蓄積部 2203に蓄積されている未転送のクエリの件数 が所定件数以下となっているので、この新規クエリの処理は保留する (ステップ S221 5)。すなわち、この新規クエリの差分情報蓄積部 2203への記憶及び正常稼働中の サーバ 2100aへの転送は行わない。この保留処理は、差分情報蓄積部 2203に記 憶されているクエリを全て新規サーバ 2100c及び同期化用サーバ 2100bに転送し、 両サーバ 2100b及び 2100cがシステムへ組み込まれるまで継続する。
[0254] 差分情報の転送が終了すると (ステップ S2216)、差分情報蓄積部 2203に蓄積さ れている全てのクエリが転送.処理されることでデータベース 2101aとデータベース 2 101b及び 2101cは完全に一致した状態(同期状態)になる。そこで、サーバ制御部 2210は、サーバ管理表 2201にサーバ 2100cを追加し稼働状態を activeとするとと もに、同期化用サーバ 2100bの稼働状態も activeにすることでシステムにサーバ 21 00b及び 2100cを追カロする(ステップ S2217)。
[0255] ここで、サーバ制御部 2210は、前記ステップ S2215で保留していた新規クエリの 処理を再開する。この時点では既に同期化が終了しているので、以降の処理は図 42 を参照して前述したものと同様となる。すなわち、サーバ制御部 2210は、当該クエリ を送信キュー 2204から取り出して正常稼働中のサーノ 、この場合サーバ 2100a, 2 100b, 2100c【こ転送する(ステップ S2218, S2219, S2220)。次!/ヽで、送信キュ 一 2204の送信状態を「送信完了」にして当該エントリを削除する。そして、各サーバ 2100a, 2100b, 2100cから受信した応答パケットを比較して障害発生の有無をチ エックし (ステップ S2221〜S2224)、正常な応答パケットの 1つをクライアント 2500b へ転送する(ステップ S 2225)。
[0256] このような処理により、差分情報の転送中にクライアントから受信したクエリは、未転 送の差分情報が所定数より多い場合には差分情報蓄積部 2203への記憶並びに正
常稼働中のサーバ 2100aへの転送が行われる。一方、未転送の差分情報が所定数 以下の場合には新規クエリは保留される。これにより、差分情報の処理に時間がかか る場合やクライアントからの受信するクエリの受信間隔が短い場合であっても、データ ベースの同期を短時間に行うことができる。なお、閾値となる「所定件数」は、大きく設 定すると新規クエリの保留時間が長くなる一方、小さく設定すると同期化処理完了ま での時間が長引くことになるというトレードオフの関係にある。したがって、この「所定 件数」は各装置の処理負荷やネットワーク速度などシステムの要件に応じて個々に 最適な値を設定すればよい。また、本変形例において閾値を 0以下に設定すれば、 図 48〜図 57を参照して前述した実施例と同様の処理となる。
[0257] (第 7の実施の形態)
本発明の第 7の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 6の実施の形態と異なる点 は、仲介装置力 新規のサーバ及び同期化用サーバに転送する差分情報の内容に ある。他の構成'動作等については第 6の実施の形態と同様なので、ここでは相違点 のみを説明する。
[0258] 第 6の実施の形態では差分情報蓄積部 2203にはクライアント 2500から受信した 全てのクエリを保存.転送していた。これにより、同期化処理を実施している間に正常 稼働中のサーバ 2100で処理されたクエリを、新規のサーバ 2100及び同期化用サ ーバ 2100においても忠実に再現することができるので、完全な同期化を図ることが できる。
[0259] ところで、仲介装置力 新規のサーバ及び同期化用サーバに転送する差分情報は 専ら同期処理用にのみ用いられるので、該同期化において不要なクエリは転送する 必要がない。具体的には、参照系クエリの SQL (SELECT)は不要である。なお、こ こでは、 SELECT FOR UPDATE文は、 SELECT文の一種であるが更新処理 に影響を与えるので、ここでは参照系クエリではなく更新系クエリとして取り扱うものと する。
[0260] そこで、本実施の形態では、第 6の実施の形態と異なり、クライアント 2500から受信 したクエリのうち、参照系クエリを除いたものを差分情報として新規のサーバ 2100及
び同期化用サーバ 2100に転送する。例えば、クライアント 2500から図 59 (a)に示す ような SQL文を受信したとすると、新規のサーバ 2100及び同期化用サーバ 2100に は図 59 (b)に示すような SQL文を転送してやればょ 、。
[0261] このような処理を行うため、本実施の形態に係るサーバ制御部 2210は、第 6の実 施の形態と同様にクライアント 2500からクエリを受信した全てのクエリを差分情報蓄 積部 2203に記憶する。そして、差分情報を新規サーバ 2100及び同期化用サーバ に転送するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ 以外を新規サーバ 2100及び同期化用サーバ 2100に転送する。他の処理につ ヽて は第 6の実施の形態と同様である。
[0262] 本実施の形態によれば、第 6の実施の形態と比較すると、新規サーバ 2100及び同 期化用サーバ 2100は同期化処理時において参照系クエリを処理する必要がないの で同期化処理の短縮ィ匕を図ることができる。これは、複雑な参照系 SQLや集合関数 を含む参照系 SQLなど処理負荷が大きい参照系 SQLをクライアント 2500が発行し ている場合には特に有効である。他の効果については第 6の実施の形態と同様であ る。
[0263] 本実施の形態の変形例としては、サーバ制御部 2210が、同期化処理中にクライァ ント 2500からクエリを受信し、このクエリを差分情報として差分情報蓄積部 2203に蓄 積するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外 を差分情報蓄積部 2203に記憶する。そして、差分情報の転送は差分情報蓄積部 2 203に記憶されている全てのクエリを対象に行う方法が挙げられる。この変形例は、 差分情報蓄積部 2203の記憶容量をさらに節約できるという効果を有する。
[0264] (第 8の実施の形態)
本発明の第 8の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 6の実施の形態と異なる点 は、データベース同期化動作中における差分情報の蓄積処理にある。他の構成'動 作等については第 6の実施の形態と同様なので、ここでは相違点のみを説明する。
[0265] 第 6の実施の形態では、サーバ制御部 2210は、クライアント 2500から受信した全 てのパケットを差分情報蓄積部 2203に保存していた。すなわち、トランザクション制
御 SQL、参照系 SQL及び更新系 SQLの全ての SQLについて差分情報蓄積部 220 3に保存し、サーバ 2100には差分情報蓄積部 2203に記憶されている全てのデータ を古 、もの力 順に送信して 、た。
[0266] 一方、本実施の形態では、サーバ制御部 2210は、データベース同期化動作中に クライアント 2500から受信したパケットのうち、トランザクションの開始 SQL (BEGIN) や確定 SQL (COMMIT)や取消 SQL (ROLLBACK)等のトランザクション制御 SQ L、及び、 SELECTなど参照系の SQLについては保存せず、 UPDATEや INSER Tなどの更新系の SQLのうち正常稼働中のサーバ 2100で COMMITされたものの みを差分情報蓄積部 2203に保存する。
[0267] ここで注意すべき点は、差分情報蓄積部 2203には、クライアント 2500から受信し た順番ではなぐ正常稼働中のサーバ 2100で処理された順番に更新クエリを蓄積 することである。これは、更新対象が重複する更新クエリについては、その処理順序 によってデータベース 2101の内容が異なってしまう可能性があるためである。
[0268] このような処理を実現するために、本実施の形態では、図 60に示すような差分情報 一時蓄積部 2205を新たに設けた。この差分情報一時蓄積部 2205のデータ構造は 、差分情報蓄積部 2203と同様に、クライアントから受信したクエリと該クエリが属する トランザクションの IDとからなる。
[0269] サーバ制御部 2210は、同期化処理中にクライアント 2500からクエリを受信すると、 更新系のもののみを順次、差分情報一時蓄積部 2205に蓄積するとともに、正常稼 働中のサーバ 2100に転送する。一方、更新系以外のものについては、差分情報一 時蓄積部 2205に蓄積することなく正常稼働中のサーバ 2100に転送する。
[0270] ここで、サーバ制御部 2210は、正常稼働中のサーバ 2100から更新クエリの実行 が失敗したことを示す応答パケットを受信すると、当該更新クエリを差分情報一時蓄 積部 2205から削除する。また、正常稼働中のサーバ 2100からトランザクションの RO LLBACKが正常に完了したことを示す応答パケットを受信すると、サーバ制御部 22 10は、当該トランザクションに属する全ての更新クエリを差分情報一時蓄積部 2205 力も削除する。一方、正常稼働中のサーバ 2100からトランザクションの COMMITが 正常に終了した応答パケットを受信すると、サーバ制御部 2210は、当該トランザクシ
ヨンに属する更新クエリについて差分情報一時蓄積部 2205から差分情報蓄積部 22 03に順次移動させる。
[0271] 以上のような処理により差分情報蓄積部 2203には、正常稼働中のサーバ 2100で COMMITされた更新クエリのみ力 その処理された順番で蓄積される。したがって、 後に新規サーバ 2100から差分情報転送要求があったら、差分情報蓄積部 2203に 記憶されている差分情報を蓄積されている順番で新規のサーバ 2100及び同期化用 サーバ 2100に転送すればよい。なお、新規のサーバ 2100及び同期化用サーバ 21 00のデータベース 2101は、仲介装置 2200からの更新クエリを順次処理するのみな ので、この更新クエリはオートコミットモードで処理する。
[0272] このように、本実施の形態によれば、同期化処理には不要の参照系クエリ、 BEGI Nや ROLLBACKなどのトランザクション制御 SQLを差分情報蓄積部 2203に蓄積 することがないので、第 6の実施形態と比較すると、差分情報の転送時間及びサーバ での処理時間を短縮ィ匕できる。他の効果については第 6の実施の形態と同様である
[0273] なお、本実施形態では、クライアント 2500から受信したクエリは、当該クエリの属す るトランザクションが正常稼働中のサーバ 2100で COMMITされた時点で、差分情 報一時記憶部 205から差分情報記憶部 203へ移動されて 、たが、その変形例として 、当該クエリが正常稼働中のサーバ 2100で正常処理された時点で移動するようにし てもよい。この場合には、トランザクションが ROLLBACKしたらら該トランザクション に属する更新クエリを差分情報記憶部 203から削除すればよい。このような処理は、 例えば PostgreSQLのように、更新順序によって行の順番が変わる DBMSのデータ ベースを完全一致させるために有効である。
[0274] (第 9の実施の形態)
本発明の第 9の実施の形態に係る多重化データベースシステムについて説明する 。本実施の形態に係る多重化データベースシステムが第 6の実施の形態と異なる点 は、差分情報蓄積部の構造にある。他の構成 ·動作等については第 6の実施の形態 と同様なので、ここでは相違点のみを説明する。
[0275] 本実施の形態に係る仲介装置 2200は、図 61に示すように、第 6の実施の形態とは
異なり差分情報蓄積部 2203は設けず、送信キュー 2206に第 6の実施形態における 差分情報蓄積部 2203と送信キュー 2204の機能を統合させている。
[0276] 本実施の形態に係る送信キュー 2206のデータ構造について図 62を参照して説明 する。送信キュー 2206は、クライアント 2500から受信したクエリの内容と、そのクエリ の属するトランザクション IDと、各サーバ 2100への送信状態とを記憶する。トランザク シヨン IDは、第 6の実施の形態と同様に、トランザクション管理表 2202から取得され る。各サーバ 2100への送信状態は、システムに属する各サーバ 2100毎に記憶され る。
[0277] 送信キュー 2206の各サーバ 2100への送信状態は、「未送信」, 「送信完了」, 「保 留」の 3つの値を取りうる。「未送信」は、クライアント 2500から受信したクエリが未だ当 該サーバ 2100に送信されていない状態である。「送信完了」は、当該サーバ 2100 への送信が完了した状態である。「保留」は、新規サーバ 2100のシステムへの組み 込み処理中に、当該サーバ 2100への転送されることなく保留されている状態である 。全てのサーバ 2100についての送信状態が「送信完了」になると、当該エントリは送 信キュー 2206から削除される。
[0278] 次に、サーバ制御部 2210の動作について説明する。サーバ制御部 2210は、クラ イアント 2500からクエリを受信すると、当該クエリがトランザクション開始 SQL (BEGI N)の場合は当該トランザクションに対して新たなトランザクション IDを振り出してトラン ザクシヨン管理表 2202に登録する。そして、当該クエリ内容,新規トランザクション ID ,各サーバ 2100の送信状態を「未送信」で送信キュー 2206に登録する。また、クラ イアント 2500から受信したクエリがトランザクション開始 SQL (BEGIN)以外の場合 は、当該クエリの属するトランザクション IDをトランザクション管理表 2202から取得し、 当該クエリ内容,トランザクション ID,各サーバ 2100の送信状態を「未送信」で送信 キュー 2206に登録する。
[0279] サーバ制御部 2210は、送信キュー 2206に記録されているクエリを、その送信状態 が「未送信」となっているサーバ 2100に対して送信し、当該サーバ 2100についての 送信状態を「送信完了」に変更する。全てのサーバ 2100について送信状態が「送信 完了」になったクエリにつ 、ては送信キュー 2206から削除する。
[0280] 仲介装置 2200からクエリを受信した各サーバ 2100は、当該クエリの処理を行い、 応答パケットを仲介装置 2200に返す。仲介装置 2200のサーバ制御部 2210は、各 サーバ 2100から受信した応答パケットを対比して障害発生の有無を確認し、正常な 応答パケットの 1つをクライアント 2500に返す。
[0281] 一方、サーバ 2100から正当でない応答が仲介装置 2200に返ってきたり、応答そ のものが返ってこない場合には、当該サーバ 2100に障害が発生したものとしてシス テム力も切り離す。具体的には、サーバ管理表 2201における当該サーバの稼働情 報を「down」に変更するとともに、送信キュー 2206の送信状態の欄について当該サ ーバに関する項目を削除する。図 63は、送信キュー 2206が図 62に示すような状態 でサーバ 2100cがシステム力も切り離された場合の送信キュー 2206の一例である。
[0282] 次に、新規サーバ 2100からシステムへの組み込み要求を受信した場合の動作に ついて説明する。サーバ制御部 2210は、第 6の実施の形態と同様に、組み込み要 求受信時に実行中のトランザクションが終了するまで、新規トランザクションの開始は 保留する。具体的には、クライアント 2500から受信したクエリが新規トランザクション に係るものの場合には、送信状態を「保留」として送信キュー 2206に保存する。一方 、クライアント 2500から受信したクエリが組み込み要求時に実行中のトランザクション に係るものの場合には、送信状態を「未送信」として送信キュー 2206に保存する。図 64は、送信キュー 2206が図 63に示すような状態で、仲介装置 2200が同期化要求 を受信し、その後クライアント 2500から新たにクエリを受信した場合の送信キュー 22 06の一例である。図 64の例では、三行目のトランザクション ID = 3の BEGINを除い て上のクエリから順に(古いクエリから順に)、トランザクション ID = 2の SELECT,トラ ンザクシヨン ID= 1の COMMIT,トランザクション ID = 2の COMMITの順に正常稼 働中のサーバ 2100a及び 2100bへ転送され、その送信状態が「未送信」から「送信 完了」に変更される。トランザクション ID = 3の BEGINは、同期化用サーバ 2100bに 同期化指示 (スナップショット作成指示)を送信した後に転送されることになる。
[0283] そして、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼 働中のサーバ 2100に送信し終えると、サーバ制御部 2210は、送信キュー 2206に 組み込み対象である新規のサーバ 2100の項目を追加する。ここで、送信キュー 220
6には送信状態が「保留」となって 、るクエリが記憶されて 、る場合がある。この場合、 サーバ制御部 2210は、送信キュー 2206に記憶されているクエリーに対して、新規 サーバ 2100についての送信状態を「保留」とする。図 65は、図 64の送信キュー 220 6に対して新規サーバ 2100cの登録をした場合を示している。また、サーバ制御部 2 210は、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼 働中のサーバ 2100に送信し終えると、第 6の実施の形態と同様に、正常稼働中のサ ーバ 2100から同期化用サーバ 2100を選定し、この同期化用サーバ 2100に対して 同期化指示 (スナップショット作成指示)を送出する。
[0284] サーバ制御部 2210は、同期化用サーバ 2100に同期化指示を送信すると、この同 期化用サーバ 2100についてサーバ管理表 2201の稼働状態を「sync」に変更する 。そして、正常稼働中のサーバ 2100へのクエリの送信を再開する。具体的には、ま ず送信キュー 2206に記憶されている全てのクエリ(この時点では全てのクエリの送信 状態は全てのサーバ 2100について「保留」になっている)について、正常稼働中の サーバ 2100の送信状態を「未送信」に変更する。そして、サーバ制御部 2210は、送 信状態が「未送信」のクエリを当該サーバ 2100に順次送信し、送信が完了したら送 信状態を「送信完了」に修正する。また、新たにクライアント 2500から受信したクエリ は、正常稼働中のサーバ 2100についての送信状態は「未送信」、新規のサーバ 21 00及び同期化用サーバ 2100についての送信状態は「保留」にして送信キュー 220 6に記憶する。図 66は、図 65の送信キュー 2206に対して同期化指示送信後に新た なクエリを受信した場合を示している。また、図 67のように、正常稼働中のサーバ 21 00aに対しては「送信完了」となっても新規のサーバ 2100c及び同期化用サーバ 21 00bに対しては「送信完了」になって!/ヽな ヽ(「保留」になって!/、る)ので、送信キュー 2206から当該クエリは削除しない。
[0285] 新規のサーバ 2100が正常稼働中のサーバ 2100から受信したスナップショットを用 いてデータベース 2101の復元が完了すると、サーバ制御部 2210は新規のサーバ 2 100から差分情報転送要求を受信する。サーバ制御部 2210は、送信キュー 2206 に記憶されて 、るクエリであって、送信状態が「保留」となって!/、るものを当該「保留」 となっていたサーバ 2100、すなわち新規のサーバ 2100及び同期化用サーバ 2100
に古いものから順次送信する。送信したクエリについては、送信キュー 2206におけ る当該サーバ 2100の送信状態を「送信完了」にし、全てのサーバ 2100についての 送信状態が「送信完了」になったら当該エントリは削除する。
[0286] サーバ制御部 2210は、送信状態が「保留」となっているクエリが送信キュー 2206 に存在しなくなると、サーバ管理表 2201に新規のサーバ 2100を「active」として追 加するとともに、同期化用サーバ 2100の稼働状態を「active」に変更することで、当 該サーバ 2100をシステムに組み込む。以降の動作は各サーバ 2100が正常動作し ている場合のものと同様になる。
[0287] 以上のように本実施の形態に係る仲介装置 2200では、第 6の実施の形態における 差分情報蓄積部 2203と送信キュー 2204の機能を、 1つの送信キュー 2206に統合 しているので、メモリの利用効率や処理効率が向上する。また、送信キュー 2206の 各クエリに対して、各サーバ 2100への送信状態を記憶するようにしているので、新規 サーバ 2100を組み込む際には当該サーバ 2100の送信状態を追加すればよい。こ れにより、一度に複数台のサーバ 2100をシステムに組み込むことができる。他の作 用効果については第 6の実施の形態と同様である。
[0288] なお、本実施の形態は、第 6の実施の形態の変形例として説明したが、上記第 2〜 第 8の実施の形態において同様の変形を適用できることは言うまでもない。
[0289] (第 10の実施の形態)
本発明の第 10の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 9の実施の形態と異なる 点は、差分情報の蓄積方法にある。他の構成 ·動作等については第 9の実施の形態 と同様なので、ここでは相違点のみを説明する。
[0290] 上述の第 1の〜第 9の実施の形態では、仲介装置 2200が正常稼働中のサーバ 21 00にスナップショットの作成指示を送信するタイミングは、正常稼働中のサーバ 210 0において実行中のトランザクションが無くなったときである。具体的には、新規サー ノ 2100からの組込要求を受信した時点で実行中のトランザクションについて正常稼 働中のサーバ 2100で処理を行うのと並行して、組込要求受信時以降にクライアント 2500から受信した新規トランザクションの開始要求を保留していた。そして、組込要
求を受信した時に実行中のトランザクションが無くなった時点で、同期化用サーバ 21 00にスナップショットの作成指示を送信している。これは、 DBMSによっては、スナツ プショット作成時にトランザクションが実行中だと、そのトランザクションに属する更新ク エリによるデータ更新力 Sスナップショットに反映される力否かが不確定となる場合を考 慮したためである。
[0291] 一方、本実施の形態では、サーバ 2100として、スナップショット作成時に実行中の トランザクションに属する更新クエリ及びスナップショット作成処理中に受信した更新 クエリについては、当該スナップショットには反映しないという動作を行うものを用いる 。これにより、本実施の形態に係る仲介装置 2200のサーバ制御部 2210は、組込要 求受信時に実行中のトランザクションの終了を待つことなぐスナップショット作成指示 の送信及び新規トランザクションの開始を行うことができる。
[0292] このような処理を行うため、本実施の形態に係る仲介装置 2200のサーバ制御部 22 10は、送信キュー 2206に記憶されている各クエリについて、全てのサーバ 2100に ついて送信状態が「送信完了」となり、且つ、当該クエリに属するトランザクションが終 了した場合に、当該クエリの登録を削除する。
[0293] 以下、新規サーバ 2100をシステムに組み込む際の動作について図 68〜図 72を 参照して説明する。いま、システムにはサーバ 2100a及び 2100bが組み込まれてお り、これ力 新たにサーバ 2100cを組み込むものとする。
[0294] サーバ制御部 2210は、新規サーバ 2100cから組込要求を受信すると、正常稼働 中のサーバ 2100の中から同期化用サーバ 2100を選定する。本実施の形態ではサ ーバ 2100bを選定したとする。サーバ制御部 2210は、同期化用サーバ 2100bに対 してスナップショットの作成指示を送信する。新規サーバ 2100cが仲介装置 2200に 対して組込要求を送信した際の送信キュー 2206の一例を図 68に示す。前述したよ うに、送信キュー 2206に記憶されたクエリは、当該クエリが送信完了しても該クエリの 属するトランザクションが完了していないものは削除されずに残っている。スナップシ ヨット作成指示を受信した同期化用サーバ 2100bは、スナップショットの作成を開始 する。ここで作成されるスナップショットは、送信キュー 2206に記憶されているクエリ は反映されていないものである。また、サーバ制御部 2210は、新規サーバ 2100cか
ら組込要求を受信すると、送信キュー 2206に記憶されて 、る全てのクエリにつ 、て、 当該新規サーバ 2100cの送信状態を「保留」にして追加する。この時の、送信キュー 2206の一例を図 69に示す。
[0295] サーバ制御部 2210は、組込要求受信時以降にクライアント 2500からクエリを受信 すると、正常稼働中のサーバ 2100aについては送信状態を「未送信」、同期化用サ ーバ 2100b及び新規サーバ 2100cについては送信状態を「保留」にして送信キュー 2206に順次追加する。そして、送信状態が「未送信」となっているクエリについては 当該「未送信」のサーバ 2100aに対して順次転送し、送信状態を「送信完了」に変更 していく。このとき、図 70に示すように、送信キュー 2206に記憶されているクエリは、 正常稼働中のサーバ 2100aについてはトランザクション単位で送信状態が「送信完 了」となっているが、同期化用サーバ 2100b及び新規サーバ 2100cについては「保 留」となっているので、ここではクエリの削除は行わない。
[0296] 一方、仲介装置 2200からスナップショットの作成指示を受信した同期化用サーバ 2 100bは、作成したスナップショットを新規のサーバ 2100cに送信する。新規のサー バ 2100cのデータベース制御部 2102cは、受信したスナップショットからデータべ一 ス 2101cを復元し、仲介装置 2200に差分情報転送要求を送信する。
[0297] 差分情報転送要求を受信したサーバ制御部 2210は、送信キュー 2206に記憶さ れている送信状態が「保留」となっているクエリを差分情報として順次同期化用サー バ 2100b及び新規サーバ 2100cに送信し、図 71に示すように、送信状態を「送信完 了」に変更する。そして、前述したように、全てのサーバについて送信状態が「送信完 了」となり、且つ、当該クエリのトランザクションが完了したら、そのクエリを削除する。 以降、送信状態が「保留」のクエリの送信中にクライアント 2500からクエリを受信する と、図 72に示すように、正常稼働中のサーバ 2100a,同期化用サーバ 2100b,新規 サーバ 2100cの全ての送信状態を「未送信」で送信キュー 2206へ記憶する。そして 、送信状態が「保留」のクエリが無くなった時点で各データベース 2101a, 1010b, 2 101cの同期が完了したことになる。
[0298] 本実施形態によれば、システムで用いるサーバ 2100の機能的要件が限定される ためサーバ選択の幅が狭くなるものの、仲介装置 2200での処理が簡略ィ匕されるの
で処理効率の高 、ものとなる。
[0299] (第 11の実施の形態)
本発明の第 11の実施の形態に係る多重化データベースシステムについて図面を 参照して説明する。本実施の形態に係る多重化データベースシステムが前述の各実 施の形態と異なる点は、同期化用サーバ及び新規サーバへの差分情報の送出タイミ ングにある。
[0300] すなわち、上記各実施の形態では、仲介装置は新規サーバから差分情報転送要 求を受信すると、新規サーバ及び同期化用サーバの双方に同時に差分情報の送出 を行っていた。一方、本実施の形態では、同期化用サーバに対する差分情報の送出 処理と新規サーバに対する差分情報の送出処理とを非同期でそれぞれ並行して実 施する。このため、本実施の形態に係る仲介装置は、複数のサーバに対する差分情 報を互いに独立して蓄積する必要があるので、前述の第 9の実施の形態に係る仲介 装置と同じ構成とした。すなわち、送信キュー 2206において、各サーバ毎に差分情 報を記憶する。
[0301] 仲介装置 2200は、前記各実施の形態とは異なり、新規サーバ 2100からだけでな く同期化用サーバ 2100からも差分情報転送要求を受信する。そして、差分情報転 送要求を受信すると、送信キュー 2206における要求元のサーバについての送信状 態が「保留」となっているクエリを、当該要求元のサーバに順次送出する。そして、差 分情報転送要求元のサーバにっ 、て「保留」となって 、るクエリの送出が完了すると 、当該サーバについてサーバ管理表 2201を更新してシステムに組み込む。組込処 理時におけるクライアント 2500からのクエリの処理などは前述した第 9の実施の形態 と同様である。
[0302] 同期化用サーバ 2100は、仲介装置 2200から同期化指示 (スナップショット作成指 示)を受信すると、スナップショットの作成を開始する。次に、スナップショットの作成が 完了すると、仲介装置 2200に対して差分情報転送要求を送信するとともに、新規サ ーバ 2100に対するスナップショットの転送を開始する。この差分情報転送要求に応 じて仲介装置 2200から差分情報を順次受信するので、同期化用サーバ 2100はこ の差分情報の処理を行う。
[0303] 次に、新規サーバ 2100をシステムに組み込む際の動作について図 73及び図 74 のシーケンスチャートを参照して具体的に説明する。
[0304] 今、新規サーバ 2100cが仲介装置 2200にシステムへの組込要求を送信し、仲介 装置 2200がサーバ 2100bを同期化用サーバとして選定して、該同期化用サーバ 2 100bに同期化指示を送信するとともに (ステップ S2301)、該サーバ 2100bをシステ ムカも切り離したとする(ステップ S2302)。なお、システムへの組込要求の受信から 同期指示の送信までの動作については、前述した第 9の実施の形態と同様である。
[0305] 同期化用サーバ 2100bは、仲介装置 2200から同期化指示を受信すると (ステップ S2301)、スナップショットの作成を開始する(ステップ S2303)。そして、スナップショ ットの作成が完了すると (ステップ S2304)、仲介装置 2200に対して差分情報転送 要求を送信するとともに (ステップ S2305)、当該スナップショットを新規サーバ 2100 cへ転送する処理を開始する(ステップ S 2306)。
[0306] 仲介装置 2200は、同期化用サーバ 2100bから差分情報転送要求を受信すると、 当該サーバ 2100bに対する差分情報の送出を開始する (ステップ S2307)。具体的 には、送信キュー 2206に蓄積されているクエリのうち同期化用サーバ 2100bについ ての送信状態が「保留」となっているものを、古いものから順に同期化用サーバ 2100 bに送信する。そして、当該クエリについて送信キュー 2206における同期化用サー バ 2100bの送信状態を「送信完了」に更新する。
[0307] 同期化用サーバ 2100bへの差分情報転送中に、クライアント 2500からクエリ(図 7 3では UPDATE)を受信すると (ステップ S2308)、仲介装置 2200は当該クエリを差 分情報として記憶する (ステップ S2309)。具体的には、当該クエリを、正常稼働中の サーバ 2100aについては送信状態を「未送信」で、同期化用サーバ 2100b及び新 規サーバ 2100cについては送信状態を「保留」にして、送信キュー 2206に蓄積する 。次に、仲介装置 2200は、正常稼働中のサーバ 2100aに転送し (ステップ S2310) 、送信キュー 2206のサーバ 2100aについての送信状態を「送信完了」に更新する。 そして、正常稼働中のサーバ 2100aからの応答パケット(ステップ S2311)を、要求 元のクライアン卜 2500に返す (ステップ S2312)。
[0308] 新規サーバ 2100cは、スナップショットに基づきデータベース 2101cの復元を完了
すると (ステップ S 2313)、仲介装置 2200に対して差分情報転送要求を送信する (ス テツプ S2314)。
[0309] 仲介装置 2200は、新規サーバ 2100cから差分情報転送要求を受信すると (ステツ プ S2314)、当該サーバ 2100cに対する差分情報の送出を開始する (ステップ S23 15)。具体的には、送信キュー 2206に蓄積されているクエリのうち新規サーバ 2100 cにつ 、ての送信状態が「保留」となって 、るものを、古 、もの力 順に新規サーバ 2 100cに送信し、当該クエリについて同期化用サーバ 2100bの送信状態を「送信完 了」に更新する。本実施の形態は、同期化用サーバ 2100bへの差分情報転送と、新 規サーバ 2100cへの差分情報転送は、互いに並行して非同期で行うことが特徴的 な点である。
[0310] 同期化用サーバ 2100b及び新規サーバ 2100cへの差分情報転送中に、クライア ント 2500からクエリ(図 73では INSERT)を受信すると (ステップ S 2316)、仲介装置 2200は当該クエリを差分情報として記憶する (ステップ S2317)。具体的には、当該 クエリを、正常稼働中のサーバ 2100aについては送信状態を「未送信」で、同期化用 サーバ 2100b及び新規サーバ 2100cについては送信状態を「保留」にして、送信キ ユー 2206に蓄積する。次に、仲介装置 2200は、正常稼働中のサーバ 2100aに転 送し (ステップ S2318)、送信キュー 2206のサーバ 2100aについての送信状態を「 送信完了」に更新する。そして、正常稼働中のサーバ 2100aからの応答パケット (ス テツプ S2319)を、要求元のクライアン卜 2500に返す (ステップ S2320)。
[0311] 仲介装置 2200は、同期化用サーバ 2100b又は新規サーバ 2100cについて送信 状態が「保留」となっているクエリが送信キュー 2206からなくなると、差分情報の送出 が完了したことになるので、当該サーバ 2100b, 2100cについてそれぞれサーバ管 理表 2201を更新してシステムに組み込む。
[0312] 通常は、図 74に示すように、同期化用サーバ 2100bへの差分情報送出は新規サ ーバ 2100cより先に終了し (ステップ S2321)、仲介装置 2200は、同期化用サーバ 2100bにつ!/、てサーバ管理表 2201の稼働状態を activeに変更してシステムに組 み込む(ステップ S2322)。
[0313] 以降、新規サーバ 2100cへの差分情報転送中にクライアント 2500からのクエリ(図
74では UPDATE)は、正常稼働中のサーバ 2100a及び前記ステップ S2322で組 み込まれたサーバ 2100bで処理される。具体的には、当該クライアント 2500からタエ リを受信すると (ステップ S2323)、当該クエリを正常稼働中のサーバ 2100a及び 21 00bについては送信状態を「未送信」で、新規サーバ 2100cについては送信状態を 「保留」で、送信キュー 2206に蓄積する (ステップ S2324)。次に、仲介装置 2200は 、正常稼働中のサーノ 2100a及び 2100b【こ転送し (ステップ S2325, S2326)、送 信キュー 2206のサーバ 2100a及び 2100bについての送信状態を「送信完了」に更 新する。そして、正常稼働中のサーバ 2100a及び 2100bからの応答パケット (ステツ プ S2327, S2328)の正当性をチェックし (ステップ S2329)、正しい応答の 1つを要 求元のクライアン卜 2500に返す (ステップ S2330)。
[0314] 次に、仲介装置 2200は、新規サーバ 2100cについて送信状態が「保留」となって いるクエリが送信キュー 2206からなくなると、差分情報の送出が完了したことになる ので (ステップ S2331)、当該新規サーバ 2100cについてサーバ管理表 2201の稼 働情報を「active」で追加してシステムに組み込む (ステップ S2332)。
[0315] 本実施の形態によれば、上記各実施の形態と比較して、同期化用サーバ 2100の システムの組込復帰の時期が早くなるので、システムに組み込まれて 、るサーバの 数が通常時よりも少なくなつている期間を短縮することができる。したがって、システム の耐故障性が向上する。
[0316] なお、本実施形態では、同期化用サーバ 2100bが新規サーバ 2100cよりも先にシ ステムに組み込まれた例について説明したが、例えば新規サーバ 2100cが同期化 用サーバ 2100bよりも高性能である場合など、状況によっては新規サーバ 2100cの 方が先にシステムに組み込まれる場合も考えられる。
[0317] 以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なもので あり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に 示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれる ものである。
[0318] 例えば、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はな い。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラォプ
シヨン、ハードウェア力ソフトウェア力 などが異なっていてもよい。サーバには、 Post greSQLなどのフリーソフトウェアや Oracleなどの市販のソフトウェア、独自開発のソ フトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サー ノ 2100aは PostgreSQLでサーバ 2100b及び 2100cは Oracleでも良い。
[0319] DBMSとしては、巿中品(例えば、 Oracleや PostgreSQL)を使う場合は、データ ベース制御部 2102は、データベース管理部とデータベースサーバ管理部に機能を 分けることによって、巿中品を無改造で使うことができる。データベース管理部は、デ ータベース 2101を直接操作するもので、例えば PostgreSQLの場合は postmaste rや postgresに相当する。データベースサーバ管理部は、仲介装置 2200とデータ ベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを 同期化する際のデータベース 2101のスナップショットを作成したり、そのスナップショ ットを他のサーバへ転送したりする処理を行う。
[0320] スナップショットの作成方法は、例えば DBMSが PostgreSQLならば pg— dumpな どのダンプツールやバックアップツールを使って実現する。なお、 pg— dumpは Post greSQLサーバ同士を同期化する場合には有用だ力 異種の DBMS同士 (例えば PostgreSQLと Oracle)を同期化する場合には、 DBMS固有のツールは使わずに、 正常稼働中の DBMSサーバから SELECTクエリで全てのデータを取りだし INSER Tクエリでデータを入れる汎用のツールを使えばよい。
[0321] また、上記実施の形態では、システムへの組み込み要求 (新規サーバのデータべ ース同期化要求)は当該新規サーバ 2100のデータベース制御部 2102が仲介装置 2200へ送信している力 保守端末などの他の装置力も送信してもよいし、オペレー タが仲介装置 2200に直接指示しても良い。
[0322] さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが 、ハードウェアで実装しても良い。
[0323] また、上記実施の形態では、仮想サーバ 2800を構成する仲介装置 2200は 1台の みであつたが、複数台設けて冗長性を持たせることにより、より可用性の高い構成と することも可能である。仲介装置を多重化させる技術については、例えば本願出願 人による特開 2003— 345679号公報に記載されたものなどを用いればよい。
[0324] (第 12の実施の形態)
本発明の第 12の実施の形態に係る多重化データベースシステムについて図面を 参照して説明する。図 75は本実施の形態に係る多重化データベースシステムの全 体構成を説明するブロック図である。
[0325] この多重化データベースシステムは、図 75に示すように、複数のデータベースサー バ(以下「サーバ」と言う) 100と仲介装置 3200とをネットワーク 3300で接続したもの であり、ネットワーク 3400を介して 1以上のクライアントコンピュータ(以下「クライアント 」と言う) 500及びデータベース一致検査装置 3600からアクセスされるものである。本 実施の形態では、図 75に示すように、 2台のサーバ 3100a及び 3100bを有しており 、 2台のクライアント 3500a及び 3500b力もアクセスされる。以降の説明において各サ ーバ 3100を他のサーバ 3100と区別する場合には添え字「a」「b」を付加するものと する。クライアント 3500についても同様である。なお、図 75の例では、サーノ 3100と クライアント 3500はそれぞれ別々のネットワーク 3300, 400に接続されている力 同 じネットワークに接続されて 、てもよ 、。
[0326] 図 75に示すように、仲介装置 3200は、ネットワーク 3400側に IPアドレス 172.17.1.1 を持っており、これをデータベースサーバの IPアドレスとして公開している。クライアン ト 3500やデータベース一致検査装置 3600はデータベースにアクセスしたいときは I Pアドレス 172.17.1.1へクエリを送信し、 IPアドレス 172.17.1.1の仲介装置 3200からそ のクエリに対する応答パケットを受信する。これは、クライアント 3500等にとっては、 I Pアドレス 172.17.1.1を持ったデータベースサーバとパケットを送受信していることと同 じである。この IPアドレス 172.17.1.1を持った仮想的なデータベースサーバを仮想サ ーノ 3800と呼ぶ。この仮想サーバ 3800の目的は、サーバ 3100が冗長化されてい ることを隠蔽するためである。つまり、サーバ 3100aとサーバ 3100b両方が稼働して いようとサーバ 3100bがダウンしてサーバ 3100aのみが稼働していようとサーバ 310 Oaとサーバ 3100bの他に新たなサーバが追加されようとクライアントには影響は無く 、動作を変更する必要がない。
[0327] サーバ 3100は、データを保存'管理するデータベース 3101と、データベース 310 1の動作を制御するデータベース制御部 3102とを備えている。
[0328] データベース 3101は、 SQL (Structured Query Language)を解して処理を行う RD BMS (Relational Database Management System)である。このようなデータベース 31 01としては種々のものがあり、例えば The PostgreSQL Global Development Groupによる PostgreSQL (http://www.postgres.org/)や、 Oracle社による Oracl e (登録商標) (http://www.oracle.com)などが挙げられる。
[0329] データベース制御部 3102は、ネットワーク 3300を介して仲介装置 3200から送ら れてくるパケットに基づき動作する。このパケットは、 SQLなどデータベース 3101で の処理に係るもの、同期化処理に係るものに大別される。 SQLなどデータベース 31 01での処理に係るものについては、データベース制御部 3102は、当該パケットをデ ータベース 3101に渡し、データベース 3101からの処理結果を仲介装置 3200に返 す。
[0330] 一方、同期化処理に係るものは、さらに、 自身が本システムに組み込まれている場 合のものと、起動時や障害復旧時などこれからシステムに組み込む場合のものとに別 れる。前者については、スナップショットの作成指示(同期化指示)がある。データべ ース制御部 3102は、スナップショット作成指示を仲介装置 3200から受信すると、デ ータベース 3101のスナップショットを作成する。そして、スナップショットの作成が完 了すると、スナップショット作成完了を仲介装置 3200に通知する。そして、作成した スナップショットを、スナップショット作成指示で指示されて 、る転送先の他のサーバ 3 100に転送する。
[0331] 他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部 31 02は、他のデータベースからスナップショットを受信すると、このスナップショットを用 いて自身のデータベース 3101を復元する。データベース 3101の復元が完了すると 仲介装置 3200に対して差分情報転送要求を送出する。後述するように、差分情報 転送要求に応じて仲介装置 3200から差分情報が転送されるので、この差分情報を 用いてデータベース 3101を復元する。
[0332] また、データベース制御部 3102は、仲介装置 3200から再起動指示を受信すると 、データベース 3101及びデータベース制御部 3102の再起動を行う。この再起動処 理は、データベース 3101及びデータベース制御部 3102のプロセスの再起動のみ
を行ってもよく、データベース 3101及びデータベース制御部 3102がサーバ 3100の 起動時に自動起動するように設定されて!ヽればサーバ 3100全体の再起動でもよ 、 。さらに、データベース制御部 3102は、自身が起動(再起動を含む)されると、仲介 装置 3200に対してデータベース同期化要求 (システムへの糸且込要求)を送信する。
[0333] 仲介装置 3200は、本システム内のサーバ 3100を管理するサーバ管理表 3201と 、トランザクションを管理するトランザクション管理表 3202と、同期化用に差分情報を 蓄積する差分情報蓄積部 3203と、サーバ 3100に送信するクエリを一時保存する送 信キュー 3204と、クライアント 3500及びデータベース一致検査装置 3600とサーバ 3100と間での処理の仲介やサーバ 3100の同期化制御などを行うサーバ制御部 32 10とを備えている。
[0334] サーバ管理表 3201は、サーバが正常稼働中(active)か、障害などで停止してい る(down)力 という状態を保存している。図 76にサーバ管理表の一例を示す。サー バ管理表 3201は、図 76に示すように、サーバ 3100を識別するためのサーバ IDと、 サーバの稼働状態から構成されている。図 76の例では、サーバ 3100aとサーバ 310 Obとが登録されており、稼働状態は共に正常稼働を示す activeである。また、本実 施形態では、サーバ IDとしてサーバ 3100に付された IPアドレスを用いた。
[0335] トランザクション管理表 3202は、現在実行中の又は実行開始を保留されているトラ ンザクシヨンの有無を記憶する。図 77にトランザクション管理表 3202の一例を示す。 図 77に示すように、トランザクション管理表 3202は、クライアントを一意に識別するク ライアント IDとトランザクションを一意に識別するトランザクション ID力も構成される。こ れらのペアは、トランザクション開始時にトランザクション管理表 3202に登録され、トラ ンザクシヨン終了時にトランザクション管理表 3202から削除される。クライアント IDは 、例えばクライアント 3500等の IPアドレスやポート番号である。トランザクション IDは 新しいトランザクションが発生する毎にサーバ制御部 3210が新たに割り振る。
[0336] 差分情報蓄積部 3203は、サーバ同期化時にクライアント 3500及びデータベース 一致検査装置 3600から受信する全てのクエリを蓄積する。図 78に差分情報蓄積部 3203が蓄積して 、る差分情報の一例を示す。差分情報蓄積部 3203の各データは 、図 78に示すように、クライアント 3500又はデータベース一致検査装置 3600が送
信したクエリと、このクエリが所属するトランザクション IDとから構成される。トランザク シヨン IDはトランザクション管理表 3202から取得する。同期化処理時における新たな クエリは、この差分情報蓄積部 3203の最後に追加される。つまり、上から古いクエリ が蓄積されている。図 78の例では、トランザクション ID= 1の BEGINが一番古ぐ C OMMITが一番新し!/、。
[0337] 送信キュー 3204は、各クライアント 3500及びデータベース一致検査装置 3600か ら受信したクエリを各サーバ 3100に送信するまで一時的に保存するバッファメモリで ある。図 79に送信キュー 3204の一例を示す。送信キュー 3204の各データは、図 79 に示すように、クライアント 3500等が送信したクエリと、このクエリが所属するトランザ クシヨン IDと、サーバ 3100に送信したか否かを表す送信状態とから構成される。トラ ンザクシヨン IDはトランザクション管理表 3202から取得する。クライアント 3500等から の新たなクエリは、この送信キュー 3204の最後に追加される。つまり、上から古いク エリが蓄積されている。図 79の例では、トランザクション ID= 1の BEGINが一番古く 、トランザクション ID = 2の BEGINが一番新しい。この送信キュー 3204の送信状態 は、クライアント 3500等カもクエリを受信した際には「未送信」が設定され、正常稼働 中の全てのサーバ 3100に送信されると「送信完了」が設定される。送信完了となった エントリは、直ちに又は所定期間経過後に送信キュー 3204から削除される。
[0338] サーバ制御部 3210は、通常の処理(同期化処理時以外の処理)として、クライアン ト 3500及びデータベース一致検査装置 3600からのパケットをネットワーク 3400経 由で受信し、サーバ管理表 3201を見て正常稼働している全てのサーバ 3100へ該 パケットを転送する。ここで、サーバ 3100へ転送するパケットは、送信キュー 3204に 「未送信」として記憶されているクエリが対象であり、送信キュー 3204に記憶されてい る古いクエリから順に転送される。そして、サーバ 3100からのパケットをネットワーク 3 300経由で受信し後述するパケットの正当性判断方法により 1つ以上の該パケットの うち 1つを選出し 1つの正しいパケットをネットワーク 3400を経由して要求元のクライ アント 3500等へ転送する。なお、同期化処理時には、「未送信」のクエリであっても 新規トランザクションに属するクエリは送信せず、実行中のトランザクションに属するク エリのみを古い順に正常稼働中のサーバ 3100に送信する。
[0339] ここで、サーバ制御部 3210は、クライアント 3500等力もの処理要求を解析してトラ ンザクシヨンの開始と終了を検出してトランザクション管理表 3202を更新する。トラン ザクシヨン開始と終了をサーバ制御部 3210が検出する方法は、 DBMSの種類によ つて異なる。例えば前述の PostgreSQLの場合は、トランザクションの開始はクライア ント 3500等が「BEGIN」という SQLを送信した時であり、トランザクションの終了はク ライアント 3500等力 S ΓΟΟΜΜΙΤ]「ROLLBACK」と!、う SQLを送信した時である。 また、 Oracleの場合は、トランザクションの開始はクライアント 3500等が有効な SQL を送信したときであり(明示的なトランザクションの開始を宣言する SQLは無い)、トラ ンザクシヨンの終了はクライアント 3500等が「COMMIT」「ROLLBACK」と!、う SQ Lを送信した時である。また、 AUTO COMMITモードで動作する場合には、クライ アント 3500等力も受信した SQL文はそれぞれ 1つの独立したトランザクションに属し ていると解釈できるので、クライアント 3500等から SQLを受信する毎に、該 SQL実行 前にトランザクションが開始されるとともに SQL実行後に当該トランザクションが終了 したこととして扱うことができる。
[0340] また、パケットの正当性判断方法は、例えば、サーバ 3100が 3台以上ある場合には 多数決で決める方法や、受信したパケットを所定のルールに基づ 、て判断する方法 がある。例えば、クライアント 3500からの「参照」要求に対して「更新成功」という応答 が返ってきた場合、正常であればそのような応答はあり得な 、ので (参照成功など参 照に関する応答のはず)、この応答パケットは正しくないと判断する。また、パケット中 にデータ長フィールドがある場合、このデータ長フィールドの値と実際に受信したパ ケット長を比較し、異なる場合は正しくないと判断する。また、複数のサーバ 3100の 中力 Masterサーバを予め 1台決めておき、このサーバ 3100からのパケットを常に 正しいと判断する。また、上記複数の方法を併用する方法もある。例えば、 3台で多 数決を行った結果、パケットの中身が全てバラバラであり、多数派のパケットを決めら れな 、場合は Masterサーバのパケットを正し!/、と判断する。正常稼働して 、るサ一 ノ が 1つだけの場合は、そのサーバからの応答パケットを正常と判断する。
[0341] サーバ制御部 3210は、正当ではない応答を送信したサーバ 3100、及び、所定時 間内に応答を返さないサーバ 3100は障害と判断し、そのサーバ 3100についてサ
ーバ管理表 3201から登録を削除することによりシステム力も切り離すとともに、当該 サーバ 3100に対して再起動指示を送信する。
[0342] さらに、サーバ制御部 3210は、ネットワーク 3300を介してサーバ 3100からデータ ベース同期化要求(システムの組み込み要求)を受信すると、このサーバ 3100と、正 常稼働中のサーバ 3100とを同期化させる処理を行う。以下にその処理について説 明する。ここで、以降の説明において、これからシステムに組み込まれるサーバを便 宜上「新規サーバ」と呼ぶ。この新規サーバの組み込みは、システムにおけるサーバ を増設する場合のほか、前述したようにシステム力も切り離されたサーバを再組み込 みする場合などに実施される。
[0343] サーバ制御部 3210は、サーバ 3100からデータベース同期化要求を受信すると、 正常稼働中のサーバ 3100に対してスナップショットの作成指示を送出する。ここで、 スナップショットの作成指示を送出するタイミングは、サーバ 3100においてトランザク シヨンが実行中でないことが求められる。これはスナップショット作成中にトランザクシ ヨンが ROLLBACKするとデータの同期化が図れない場合があることを防止するた めや、 COMMITされて!/、な!/、ために更新データがスナップショットに反映されな!、こ とを防止するためである。このためサーバ制御部 3210は、処理中のトランザクション が終了するまでスナップショットの作成指示の送出を待つとともに、スナップショット作 成完了通知をサーバ 3100から受信するまでは新規トランザクションを開始しないよう にしている。そして、新規トランザクションに係る SQLについては、スナップショット作 成完了通知の受信後に、正常稼働中のサーバ 3100で処理するとともに、差分情報 蓄積部 3203に蓄積する。差分情報蓄積部 3203に蓄積するクエリは、トランザクショ ン制御 SQL、参照系 SQL及び更新系 SQLを含む全ての SQLが対象となる。
[0344] サーバ制御部 3210がスナップショットの作成指示を送出すると、当該スナップショ ットは新規のサーバ 3100に転送され、このサーバ 3100からサーバ制御部 3210に 対して差分情報転送要求が送出される。サーバ制御部 3210は、差分情報転送要求 を受信すると、新規のサーバ 3100に対して差分情報蓄積部 3203に蓄積されている クエリを古いもの力も順次送信する。差分情報蓄積部 3203に蓄積されている SQLを 全て送出すると、サーバ制御部 3210は、新規サーバ 3100をシステムに組み込むベ
くサーバ管理表 3201を更新する。
[0345] ここで、サーバ制御部 3210は、差分情報の送出中にクライアント 3500又はデータ ベース一致検査装置 3600から新たなクエリを受信する場合がある力 この場合は当 該クエリを差分情報蓄積部 3203の最後に追加するとともに正常稼働中のサーバ 31 00へ送信すれば良い。ただし、クライアント 3500等のクエリ送出頻度が高い場合な どには、差分情報の送出終了まで、すなわち同期化終了まで長時間要する場合が 考えられる。そこで、差分情報蓄積部 3203における未送信の差分情報が所定件数 以下となったら、クライアント 3500等からのクエリを一時保留して差分情報の送出の みを行い、まず差分情報の送出を完了させる。そして、前述のように新規サーバ 310 0をシステムに組み込むべくサーバ管理表 3201を更新した後に、保留していたクエリ 処理を再開すると好適である。
[0346] クライアント 3500は、多重化データベースシステムに対して更新クエリ(データべ一 スを更新するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)など を発行するものである。
[0347] データベース一致検査装置 3600は、クライアント 3500と同様に多重化データべ一 スシステムのクライアントとして動作するものであり、各サーバ 3100のデータベース 3 101が互 ヽに一致して 、るか否かを確認するためのクエリを発行する。このクエリは、 参照系のものであり、例えば所定のテーブル test— tableに対する「SELECT * FROM test— table」などである。データベース一致検査装置 3600は、定期的に 又はオペレータ等の指示に応じて当該検査用クエリの発行を行う。
[0348] 次に、本実施の形態に係る多重化データベースシステムの動作について図面を参 照して説明する。まず、サーバ 3100aと 3100bが正常に動作している場合の動作を 図 80から図 82を参照して説明する。
[0349] 初期状態では、データベース 3101aと 101bは完全に同一であり、サーバ管理表 3 201は図 81のようになっているものとする。また、トランザクション管理表 3202と差分 情報蓄積部 3203は空であるとする。各サーバ 3100a, 3100bには、テーブル test —tableが存在して!/、るとする。
[0350] クライアント 3500aが 172.17.1.1宛にトランザクション開始 SQLを含んだパケットを送
信すると、仲介装置 3200はそのパケットを受信する (ステップ S31)。サーバ制御部 3 210は、トランザクションが開始されたことを検知し、トランザクション管理表 3202にク ライアント 3500aの IPアドレスとトランザクション番号を登録する(ステップ S32)。図 8 2にこのときのトランザクション管理表 3202を示す。そして、このパケットに係るクエリ を送信状態「未送信」で送信キュー 3204に入れる。
[0351] サーバ制御部 3210は、送信キュー 3204から当該「未送信」のクエリを取り出し、サ ーバ管理表 3201を見て正常稼働している全てのサーバ 3100に該パケットを送信す る。この場合、サーバ 3100aと 3100bが正常稼働しているので、サーバ制御部 3210 はサーバ 3100aとサーバ 3100bへ該パケットを転送する(それぞれステップ S33と S 34)。そして、各サーバ 3100への送信が完了したので送信キュー 3204の送信状態 を「送信完了」にして当該エントリを削除する。仲介装置 3200は、トランザクションが 正常に開始されたことを通知する応答パケットをサーバ 3100aから受信するが (ステ ップ S35)、この時点では、未だ全ての応答パケットが揃っているわけではないので( この場合、サーバ 3100bからの応答パケットが来ていない)、サーバ制御部 3210は 何もせずにサーバ 3100bからの応答パケットを待つ。そして、トランザクションが正常 に開始されたことを通知する応答パケットをサーバ 3100bから受信すると (ステップ S 36)、これで全ての応答パケットが揃ったので、サーバ制御部 3210はそれらの応答 パケットを互いに比較することでサーバ 3100に障害が発生している力否かをチェック する (ステップ S37)。この場合、 2つの応答パケットは共にトランザクションが正常に 開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの 1つを クライアント 3500aへ転送する(ステップ S38)。
[0352] 次に、クライアント 3500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S39)。サーバ制御部 3210は、受 信したクエリを送信キュー 3204に入れる。そして、送信キュー 3204から当該クエリを 取り出し、サーバ管理表 3201を見て正常稼働しているサーノ 、この場合、サーバ 31 00aと 3100bへ該パケットを転送する(それぞれステップ S310と S311)。次いで、送 信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 310 Oaは正常に UPDATE完了したことを通知する応答パケットを仲介装置 3200に送信
し、仲介装置 3200がこの応答パケットを受信する (ステップ S312)。この時点では全 ての応答パケットが全て揃っているわけではないので、サーバ制御部 3210は何もせ ず待機する。そして、正常に UPDATE完了したことを通知する応答パケットをサー ノ 3100bから受信すると (ステップ S313)、これで応答パケットが全て揃ったので、サ ーバ制御部 3210はそれら応答パケットを互いに比較することでサーバ 3100に障害 が発生している力否かをチェックする(ステップ S314)。この場合、 2つの応答パケット は共に UPDATE成功したことを示すパケットであるため、障害は無!、と判断し応答 パケットの 1つをクライアント 3500aへ転送する(ステップ S315)。
次に、クライアント 3500aは、テーブル test— tableへの更新を確定する(実際にデ ータベースを更新する) SQL (COMMIT)を含んだパケットを 172.17.1.1へ送信する (ステップ S316)。サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れ る。そして、送信キュー 3204から当該クエリを取り出し、サーバ管理表 3201を見て 正常稼働しているサーノ 、この場合、サーバ 3100aとサーバ 3100bへ該パケットを 転送する(それぞれステップ S317と S318)。次いで、送信キュー 3204の送信状態 を「送信完了」にして当該エントリを削除する。サーバ 3100aは正常に COMMIT完 了したことを通知するパケットを仲介装置 3200に送信し、仲介装置 3200がこの応答 パケットを受信する (ステップ S319)。この時点では全ての応答パケットが全て揃って いるわけではないので、サーバ制御部 3210は何もせず待機する。そして、正常に C OMMIT完了したことを通知する応答パケットをサーバ 3100bから受信すると (ステツ プ S320)、これで応答パケットが全て揃ったので、サーバ制御部 3210はそれら応答 パケットを互いに比較することでサーバ 3100に障害が発生している力否かをチェック する(ステップ S321)。この場合、 2つの応答パケットは共に COMMIT成功したこと を示すパケットであるため、障害は無いと判断する。 COMMITが正常に完了したこ と力 、トランザクションが終了したことが分力るので、サーバ制御部 3210はトランザ クシヨン管理表 3202からこのトランザクションの登録を削除する (ステップ S322)。こ のときのトランザクション管理表 3202は再び初期状態 (すなわち空)になる。サーバ 制御部 3210は応答パケットの 1つをクライアント 3500aへ転送する(ステップ S323)
[0354] 次に、サーバ 3100bが故障などで障害になった場合の動作を図 83から図 85を参 照して説明する。初期状態では、データベース 3101aと 101bは完全に同一であり、 サーバ管理表 3201は前述した図 7のようになっているとする。また、トランザクション 管理表 3202と差分情報蓄積部 3203は空であるとする。
[0355] クライアント 3500aが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を含んだ パケットを送信すると、仲介装置 3200はそのパケットを受信する (ステップ S330)。サ ーバ制御部 3210は、トランザクションが開始されたことを検知し、トランザクション管 理表 3202にクライアント 3500aの IPアドレスとトランザクション番号を登録する(ステツ プ S331)。図 84にこのときのトランザクション管理表 3202を示す。そして、このバケツ トに係るクエリを送信状態「未送信」で送信キュー 3204に入れる。
[0356] サーバ制御部 3210は、送信キュー 3204から当該「未送信」のクエリを取り出し、サ ーバ管理表 3201を見て正常稼働している全てのサーバ 3100、この場合、サーバ 3 100aと 3100bへ該パケットを転送する(それぞれステップ S332と S333)。次いで、 送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置 3200は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 3 100aから受信するが (ステップ S334)、この時点では、未だ全ての応答パケットが揃 つて 、るわけではな 、ので(この場合、サーバ 3100bからの応答パケットが来て!/、な い)、サーバ制御部 3210は何もせずにサーバ 3100bからの応答パケットを待つ。そ して、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 3100 b力も受信すると (ステップ S335)、これで全ての応答パケットが揃ったので、サーバ 制御部 3210はそれら応答パケットを互いに比較することでサーバ 3100に障害が発 生している力否かをチェックする (ステップ S336)。この場合、 2つの応答パケットは共 にトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと 判断し応答パケットの 1つをクライアント 3500aへ転送する(ステップ S337)。
[0357] ここで、サーバ 3100bは、ステップ S335で応答パケットを返した後、故障などの障 害が発生してダウンしたものとする(ステップ S338)。
[0358] 次に、クライアント 3500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S339)。サーバ制御部 3210は、受
信したクエリを送信キュー 3204に入れる。そして、送信キュー 3204から当該クエリを 取り出し、サーバ管理表 3201を見て正常稼働しているサーノ 、この場合、サーバ 31 00aと 3100bへ該パケットを転送する(それぞれステップ S340と S341)。この時点で は、サーバ制御部 3210はサーバ 3100bのダウンを知らないので、サーノ 3100b力 S 正常稼働して 、ると 、う情報がサーバ管理表 3201に格納されたままである。、 、で 、送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 3100aは正常に UPDATE完了したことを通知する応答パケットを仲介装置 3200に 送信し、仲介装置 3200がこの応答パケットを受信する (ステップ S342)。この時点で は応答パケットが全て揃っているわけではないので、サーバ制御部 3210は何もせず 待機する。し力し、サーバ 3100bはダウンしているのでサーバ 3100bからの応答パ ケットはいつまで経っても仲介装置 3200には届かない。これによりサーバ制御部 32 10はタイムアウトし、サーバ 3100bのダウンを検知する。そして、サーバ制御部 3210 はサーバ管理表 3201のサーバ 3100bを activeから down (サーバ停止状態)に書き 換えることにより当該サーバ 3100bをシステム力も切り離す (ステップ S343)。そのと きのサーバ管理表 3201を図 85に示す。次に、サーバ制御部 3210は、システムから 切り離したサーバ 3100bに対して再起動指示を送出する (ステップ S344)。もっとも、 ここではサーバ 3100bはダウンしているので、当該再起動指示に対する処理が行わ れることはない。次に、サーバ制御部 3210は応答パケットをクライアント 3500aへ転 送する(ステップ S345)。ここでは、クライアント 3500aにとつて、サーバ 3100bが障 害になったかどうかは認識せず、今までと同様に仮想サーバ 3800からサービスを受 けることができること〖こ注目すべきである。
次に、クライアント 3500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.17.1.1へ送信する(ステップ S346)。サーバ制御部 3 210は、受信したクエリを送信キュー 3204に入れる。そして、送信キュー 3204から 当該クエリを取り出し、サーバ管理表 3201を見て正常稼働しているサーバ、この場 合、サーバ 3100aのみへ該パケットを転送する(ステップ S347)。次いで、送信キュ 一 3204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 3100aは 正常に COMMIT完了したことを通知する応答パケットを送信し、仲介装置 3200が
この応答パケットを受信する (ステップ S348)。 COMMITが正常に完了したことから 、トランザクションが終了したことが分力るので、サーバ制御部 3210はトランザクション 管理表 3202からこのトランザクションの登録を削除する(ステップ S349)。このときの トランザクション管理表 3202は再び初期状態 (すなわち空)になる。サーバ制御部 3 210は応答パケットをクライアント 3500aへ転送する(ステップ S350)。
[0360] ここで、ステップ S347によって、サーバ 3100aのデータベース 3101aは、クライア ント 3500aからの UPDATE (ステップ S339)が反映されているのに対して、サーバ 3 100bのデータベース 3101bにはクライアント 3500aからの UPDATE (ステップ S33 9)が反映されていない、つまり、データベース 3101aとデータベース 3101bは非同 期状態になったことに注目すべきである。
[0361] 次に、並行処理される複数のトランザクションについて、各サーバ 3100における処 理順序が異なった場合について図 86及び図 87のシーケンスチャートを参照して説 明する。ここでは、図 128のテーブル table— testに対して、図 129のトランザクション T1をクライアント 3500aが発行し、同図のトランザクション T2をクライアント 3500bが 発行したものとする。前述したように、この 2つのトランザクション Tl, T2の処理後に おけるデータベース 3101のデータは、各トランザクションの処理順序によって異なつ た内容になることに注意されたい。
[0362] 図 86に示すように、クライアント 3500aがトランザクション T1を開始するクエリ(BEG IN)を仲介装置 3200に送信し (ステップ S3101)、一方、クライアント 3500bがトラン ザクシヨン T2を開始するクエリ(BEGIN)を仲介装置 3200に送信する(ステップ S31 02)。仲介装置 3200のサーバ制御部 3210は、各クエリをそれぞれ正常稼働中のサ ーノ 3100a及び 3100b【こ転送する(ステップ S3103〜S3106)。そして、各サーノ 3100a及び 3100b力らのそれぞれ応答(ステップ S3107〜S3110)につ!/、て正当 性をチェックし(図示省略)、正当な応答の 1つをそれぞれの要求元のクライアント 35 00a又は 3500bに転送する(ステップ S3111〜S3112)。
[0363] 仲介装置 3200から BEGINに対する応答を受信したクライアント 3500a及び 3500 bは、それぞれのトランザクションに属する次のクエリを仲介装置 3200に送信する。 本実施例では、クライアント 3500aはトランザクション T1の UPDATEクエリを仲介装
置 3200に送信し (ステップ S3113)、クライアン卜 3500bはトランザクション T2の UP DATEクエリを仲介装置 3200に送信する(ステップ S3114)。クライアント 3500a及 び 3500bからクエリを受信した仲介装置 3200のサーバ制御部 3210は、当該クエリ をそれぞれ正常稼働中のサーノ 3100a及び 3100bに転送する(ステップ S3115〜
53118)。
[0364] サーバ 3100aではトランザクション Tlの UPDATEクエリがトランザクション T2の U PDATEクエリより先に処理されたとする。トランザクション T1の UPDATEクエリを処 理したサーバ 3100aは、処理結果を仲介装置 3200に送信する(ステップ S3119)。 このとき、トランザクション T1の UPDATEクエリによる test— tableの当該更新対象 行は、トランザクション T1が COMMITされるまでロックされる。一方、トランザクション T2の UPDATEクエリはロックされている行が更新対象となっているので、当該クエリ の処理はロックが解除されるまで保留される(ステップ S3120)。
[0365] 他方、サーバ 3100bではトランザクション T2の UPDATEクエリがトランザクション T 1の UPDATEクエリより先に処理されたとする。トランザクション T2の UPDATEタエ リを処理したサーバ 3100bは、処理結果を仲介装置 3200に送信する (ステップ S31 21)。このとき、トランザクション T2の UPDATEクエリによる test— tableの当該更新 対象行は、トランザクション T2が COMMITされるまでロックされる。一方、トランザク シヨン T1の UPDATEクエリはロックされている行が更新対象となっているので、当該 クエリの処理はロックが解除されるまで保留される (ステップ S 3122)。
[0366] ここで、サーバ 3100aからはトランザクション T1の UPDATEクエリの応答(ステップ
53119)力 サーバ 3100bからはトランザクション T2の UPDATEクエリの応答(ステ ップ S 3121 )よりも先に仲介装置 3200に到達したとする。
[0367] 仲介装置 3200のサーバ制御部 3210は、トランザクション T1の UPDATEクエリに つ!、ての応答を一方のサーバ 3100aから受信したが(ステップ S 3119)、他方のサ ーバ 3100bからの応答は受信していないので当該応答を待つ(ステップ S3123)。こ れは、前述したように、サーバ制御部 3210において、各サーバ 3100a及び 3100b 力もの応答を互いに比較して正当性を判断するためである。同様に、サーバ制御部 3210は、トランザクション T2の UPDATEクエリについての応答を一方のサーバ 310
Obから受信したが(ステップ S3121)、他方のサーバ 3100aからの応答は受信してい ないので当該応答を待つ (ステップ S3124)。
[0368] 前述のようにサーバ 3100bにおいてトランザクション T1の UPDATEクエリの処理 はロック解除待ちされているので (ステップ S3122)、サーバ制御部 3210における当 該クエリに対する応答待ち(ステップ S3123)はタイムアウトする (ステップ S3125)。 これにより、サーバ制御部 3210は、サーバ 3100bが障害になったと判断し、前記ス テツプ S3124の応答待ちをキャンセルし、さらにサーバ管理表 3201におけるサーバ 3100bの稼働状態を downに変更することで当該サーバ 3100bをシステムから切り 離す (ステップ S3126)。そして、サーバ制御部 3210は、図 87に示すように、システ ムカも切り離したサーバ 3100bに対して再起動指示を送信するとともに (ステップ S3 127)、サーバ 3100bからの応答待ちはキャンセルしてサーバ 3100aからの応答をク ライアン卜 3500aに返す (ステップ S3128)。
[0369] サーバ 3100bは、仲介装置 3200からの再起動指示を受信すると、 自身の再起動 を開始する(ステップ S3129)。
[0370] トランザクション T1の UPDATEクエリにつ!/、て応答を受信したクライアント 3500a は、更新を確定するクエリ(COMMIT)を仲介装置 3200に送信する (ステップ S313 0)。仲介装置 3200のサーバ制御部 3210は、クライアント 3500aからクエリを受信す ると、サーバ管理表 3201を参照して正常稼働中のサーバ 3100aに当該クエリを転 送する(ステップ S3131)。
[0371] サーバ 3100aでは、トランザクション T1の COMMITクエリを処理することによりロッ クが解除されてトランザクション T2の処理が再開可能となる(ステップ S3132)。これ により、サーバ 3100aはトランザクション T1の COMMITクエリに対する応答を仲介 装置 3200に返し (ステップ S3133)、仲介装置 3200のサーバ制御部 3210は当該 応答をクライアント 3500aに転送する(ステップ S3134)。次いで、サーバ 3100aはト ランザクシヨン T2の UPDATEクエリに対する応答を仲介装置 3200に返し (ステップ S3135)、仲介装置 3200のサーバ制御部 3210は当該応答をクライアント 3500bに 転送する(ステップ S 3136)。
[0372] トランザクション T2の UPDATEクエリにつ!/、て応答を受信したクライアント 3500b
は、更新を確定するクエリ(COMMIT)を仲介装置 3200に送信する (ステップ S313 7)。仲介装置 3200のサーバ制御部 3210は、クライアント 3500bからクエリを受信す ると、サーバ管理表 3201を参照して正常稼働中のサーバ 3100aに当該クエリを転 送する (ステップ S3138)。サーバ 3100aは当該クエリを処理して応答を仲介装置 32 00に返し (ステップ S3139)、仲介装置 3200のサーバ制御部 3210は当該応答をク ライアン卜 3500bに転送する(ステップ S3140)。
[0373] ここで、システム力も切り離されたサーバ 3100bの再起動が完了したものとする(ス テツプ S3141)。サーバ 3100bは、再起動が完了すると仲介装置 3200に対してデ ータベース同期化要求を送信する(ステップ S3142)。仲介装置 3200のサーバ制御 部 3210は、正常稼働中のサーバ 3100aと協働して、サーバ 3100aのデータベース 3101aと、サーバ 3100bのデータベース 3101bとを同期化させる処理を行う(ステツ プ S3143)。この同期化処理の詳細については後述する。サーバ制御部 3210は、 同期化処理が完了したら、サーバ管理表 3201についてサーバ 3100bの稼働状態 を activeに変更することで当該サーバ 3100bを再びシステムに組み込む (ステップ S 3144)。
[0374] 以上の処理により、並行処理される複数のトランザクションについて、各サーバ 310 0における処理順序が異なった場合であっても、各サーバ 3100間でデータベース 3 101の同期が保たれる。
[0375] 次に、図 128のテーブル test— tableに対して、図 130のトランザクション T3をクラ イアント 3500aが発行し、同図のトランザクション T4をクライアント 3500bが発行した 場合について図 88及び図 89のシーケンスチャートを参照して説明する。この 2つのト ランザクシヨン T3, T4の処理後におけるデータベース 3101のデータは、各トランザ クシヨンの処理順序には影響されない。し力しながら、前述したように、トランザクショ ン T4における SELECTの結果は各トランザクション T3, T4の処理順序によって異 なった内容になることに注意されたい。
[0376] クライアント 3500aがトランザクション T3を開始するクエリ(BEGIN)を仲介装置 32 00に送信すると (ステップ S3201)、仲介装置 3200のサーバ制御部 3210は、サー バ管理表 3201を参照して正常稼働中のサーバ 3100a及び 3100bに転送する(ステ
ップ S3202, S3203)。サーノ 帘 lj御咅 3210ίま、各サーノ 3100a及び 3100b力らの 応答を受信すると (ステップ S3204, S3205)、正当な応答の 1つをクライアント 3500 aに転送する(ステップ S3206)。
[0377] 次!、で、クライアント 3500aはトランザクション T3の更新クエリ(UPDATE)を仲介 装置 3200に送信する(ステップ S3207)。一方、クライアント 3500bはトランザクショ ン T4を開始するクエリ(BEGIN)を仲介装置 3200に送信する (ステップ S3208)。
[0378] 仲介装置 3200のサーバ制御部 3210は、トランザクション T3の UPDATEクエリを 正常稼働中のサーノ 3100a及び 3100bに転送するとともに(ステップ S3209, S32 10)、トランザクション T4の BEGINクエリを正常稼働中のサーバ 3100a及び 3100b に転送する(ステップ S3211, S3212)。そして、仲介装置 3200のサーバ制御部 32 10は、トランザクション T3の UPDATEクエリに対する応答を各サーバ 3100a及び 3 100b力ら受信すると(ステップ S3213, S3214)、正当な応答の 1つをクライアント 35 00a〖こ転送する(ステップ S3215)。また、トランザクション T4の BEGINクエリに対す る応答を各サーノ 3100a及び 3100b力ら受信すると(ステップ S3216, S3217)、正 当な応答の 1つをクライアント 3500bに転送する(ステップ S 3218)。
[0379] 次!、で、クライアント 3500aはトランザクション T3を確定するクエリ(COMMIT)を仲 介装置 3200に送信する(ステップ S3219)。一方、クライアント 3500bはトランザクシ ヨン T4の参照クエリ(SELECT)を仲介装置 3200に送信する(ステップ S3220)。
[0380] 仲介装置 3200のサーバ制御部 3210は、トランザクション T3の COMMITクエリを 正常稼働中のサーノ 3100a及び 3100bに転送するとともに(ステップ S3221, S32 22)、トランザクション T4の SELECTクエリを正常稼働中のサーバ 3100a及び 3100 bに転送する(ステップ S3223, S3224)。
[0381] ここで、一方のサーバ 3100aでは、トランザクション T3の COMMITクエリがトランザ クシヨン T4の SELECTクエリより先に処理され (ステップ S3225, S3226)、他方の サーバ 3100bでは、トランザクション T4の SELECTクエリがトランザクション T3の CO MMITクエリより先に処理されたものとする(ステップ S3227, S3228)。これにより、 トランザクション T4の SELECTクエリの応答は、サーバ 3100aからの応答(ステップ S 3226)と、サーバ 3100bからの応答 (ステップ S3227)とは異なったものとなったとす
る。
[0382] 仲介装置 3200のサーバ制御部 3210は、トランザクション T4の SELECTクエリに 対する応答が、各サーバ 3100a及び 3100b間で不一致となっているので、何れかの サーバ 3100a又は 3100bを選定し、このサーバ 3100aからの応答を正当なものとす る(ステップ S3229)。ここで、サーバ 3100の選定方法としては、例えば予め Master サーバを定めておいて、この Masterサーバを選定する方法、最初に応答を返したサ ーバを選定する方法、ラウンドロビンにより選定サーバを順次選定する方法、ランダム に選定する方法、各サーバの処理能力'処理負荷などにより選定する方法などが挙 げられる。本実施の形態では、サーバ 3100aを Masterサーバとして該サーバ 3100 aを正当な応答を返したサーバとして選定する。サーバ制御部 3210は、正当でない 応答を返したサーバ 3100bについて、サーバ管理表 3201の稼働状態を downに変 更することにより当該サーバ 3100bをシステム力も切り離す (ステップ S3230)。そし て、図 89に示すように、当該サーバ 3100bに対して再起動指示を送信する (ステップ S3231)。
[0383] サーバ 3100bは、仲介装置 3200からの再起動指示を受信すると、 自身の再起動 を開始する(ステップ S3232)。
[0384] 仲介装置 3200のサーバ制御部 3210は、選定したサーバ 3100aから受信した、ト ランザクシヨン T4の SELECTクエリに対する応答及びトランザクション T3の COMMI Tクエリに対する応答を、それぞれ要求元のクライアント 3500a, 3500bに転送する( ステップ S3233, S3234)。以降、各クライアント 3500a, 3500b力ものクエリは、正 常稼働中のサーバ 3100aで処理する。図 89の例では、クライアント 3500bがトランザ クシヨン T4の COMMITクエリを仲介装置 3200に送信すると(ステップ S3235)、仲 介装置 3200は当該クエリを正常稼働中のサーバ 3100aに転送する (ステップ S323 6)。そして、仲介装置 3200は、当該クエリに対する応答をサーバ 3100aから受信す ると(ステップ S3237)、この応答を要求元のクライアント 3500bに返す (ステップ S32 38)。
[0385] ここで、システム力も切り離されたサーバ 3100bの再起動が完了したものとする(ス テツプ S3239)。サーバ 3100bは、再起動が完了すると仲介装置 3200に対してデ
ータベース同期化要求を送信する(ステップ S3240)。仲介装置 3200のサーバ制御 部 3210は、正常稼働中のサーバ 3100aと協働して、サーバ 3100aのデータベース 3101aと、サーバ 3100bのデータベース 3101bとを同期化させる処理を行う(ステツ プ S3241)。この同期化処理の詳細については後述する。サーバ制御部 3210は、 同期化処理が完了したら、サーバ管理表 3201についてサーバ 3100bの稼働状態 を activeに変更することで当該サーバ 3100bを再びシステムに組み込む (ステップ S 3242)。
[0386] 以上の処理により、並行処理される複数のトランザクションについて、各サーバ 310 0における処理順序が異なった場合であっても、クライアント 3500には 1つの正しい 応答のみが処理結果として返される。
[0387] なお、この例では、 2つのトランザクション T3及び T4に属するクエリの処理順序が 異なっても当該トランザクション T3及び T4に属する各クエリの中で同一行を更新する クエリは存在しないので、クエリの処理順序が異なることによる各データベース 3101 間の不整合は生じない。したがって、この例に限定して考えると、データベース 3101 の同期ィ匕のための各処理 (ステップ S3230〜S3232, S3239~S3242)は不要で あるとも考えられる。しかし、本実施の形態では、何らかの原因でデータベース 3101 の不整合が発生し、当該不整合について前記ステップ S3229を契機に検出した場 合にも対処できるように、データベース 3101の同期化のための各処理を実施するよ うにした。
[0388] 次に、前記ステップ S3143及び S3241における同期化処理の詳細について説明 する。本発明における同期化処理では、同期化処理開始時において正常稼働して いるサーバ 3100でデータベース 3101のスナップショットを作成し、このスナップショ ットを同期化対象の新規サーバ 3100に転送する。そして新規サーバ 3100において スナップショットからデータベース 3101の復元を行う。さらに、この処理中に受信した クライアント 3500からのクエリを仲介装置 3200において差分情報として蓄積する。 そして、新規サーバ 3100がスナップショットからのデータベース 3101の復元が完了 したら仲介装置 3200から差分情報を取得して、この差分情報を処理する。
[0389] なお、前述したように、サーバ 3100は自身が起動されるとデータベース同期化要
求を仲介装置 3200に送信するので、同期化処理の実施は、仲介装置 3200からの 再起動指示に応じた再起動時に限られない。すなわち、サーバ 3100が障害となつ てシステムカゝら切り離され、その後にシステムに再び組み込む際にも実施される。ま た、システムを構成するサーバを増設する場合にも実施される。
[0390] 以下に、サーバ 3100bをシステムに組み込む場合の同期化動作を図 90から図 98 を参照して説明する。このとき注目すべきポイントは、クライアント 3500a及び 3500b に対するサービスを続けたままサーバ 3100bを追加する、つまり、システムダウンさせ ずにデータベース 3101aと 101bを同期させることである。
[0391] データベース 3101bはデータベース 3101aと同期がとれていない状態、つまり、同 一ではない状態である。例えば、データベース 3101bは、再起動直前のデータ又は 障害発生直前のデータを保持して 、る力もしれな 、し、全く新 U、サーバの場合には 、データを全く持っていない状態力もしれない。本発明では、前者の場合でも古いデ ータは削除し、データベース 3101bはデータを全く保持していないものとしてシステ ムに糸且み込む。つまり、古いデータを保持している必要はない。
[0392] ここでは、サーバ管理表 3201は図 93のようになっているとする。また、トランザクシ ヨン管理表 3202と差分情報蓄積部 3203は空であるとする。
[0393] 図 90に示すように、クライアント 3500aが 172.17.1.1宛のトランザクション開始 SQL ( BEGIN)を含んだパケットを送信すると、仲介装置 3200はそのパケットを受信する( ステップ S3301)。サーバ制御部 3210は、トランザクションが開始されたことを検知し 、トランザクション管理表 3202にクライアント 3500aの IPアドレスとトランザクション番 号を登録する(ステップ S3302)。図 94にこのときのトランザクション管理表 3202を示 す。サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。そして、送 信キュー 3204から当該クエリを取り出し、サーバ管理表 3201を見て正常稼働してい るサーバ、この場合、サーバ 3100aへ該パケットを転送する(ステップ S3303)。次い で、送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。仲介 装置 3200は、トランザクションが正常に開始されたことを通知する応答パケットをサ ーバ 3100aから受信すると(ステップ S3304)、応答パケットをクライアント 3500aへ 転送する(ステップ S3305)。
[0394] ここで、サーバ 3100bが再起動したものとする(ステップ S306)。これにより、サーバ 3100bのデータベース制御部 3102bは、データベース同期化要求を仲介装置 320 0へ送信する(ステップ S3307)。
[0395] データベース同期化要求を受信したサーバ制御部 3210は、トランザクション管理 表 3202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとと もに、実行中トランザクションの情報を記録しておく(ステップ S3308)。図 94より、クラ イアント 3500a,トランザクション番号 3のトランザクションが実行中なので、データべ ース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション 開始要求を受け取った場合は、その要求をサーバ 3100aへ転送することを遅らせる (ステップ S3309)。つまり、同期化動作は実行中のトランザクションが全くない状態で 始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュ 一 3204での保留という手段で実現する。
[0396] 次に、クライアント 3500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S3310)。サーバ制御部 3210は、 受信したクエリを送信キュー 3204に入れる。このクエリは前記ステップ S3308で記憶 したトランザクション情報力 データベース同期化要求時に実行していたトランザクシ ヨンに属するものと判定できるので、サーバ制御部 3210は、送信キュー 3204から当 該クエリを取り出し、サーバ管理表 3201を見て正常稼働しているサーノ 、この場合、 サーバ 3100aへ該パケットを転送する(ステップ S3311)。次いで、送信キュー 3204 の送信状態を「送信完了」にして当該エントリを削除する。サーバ 3100aは正常に U PDATE完了したことを通知する応答パケットを仲介装置 3200に送信し、仲介装置 3200がこの応答パケットを受信する(ステップ S3312)。サーバ制御部 3210は、応 答パケットをクライアント 3500aへ転送する(ステップ S3313)。
[0397] 次に、クライアント 3500bが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を 含んだパケットを送信すると、仲介装置 3200はそのパケットを受信する (ステップ S3 314)。サーバ制御部 3210は、このパケットによりトランザクションが開始されたことを 検知し、トランザクション管理表 3202にクライアント 3500bの IPアドレスとトランザクシ ヨン番号を登録する(ステップ S3315)。図 95にこのときのトランザクション管理表 320
2を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー 3204 に入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始ク エリは送信キュー 3204に保持したままサーバ 3100aへは転送しない(ステップ S331 6)。
[0398] 次に、クライアント 3500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.11.1.1へ送信する(ステップ S 3317)。サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。このクエリは前記ステップ S33 08で記憶したトランザクション情報力 データベース同期化要求時に実行していたト ランザクシヨンに属するものと判定できるので、サーバ制御部 3210は、送信キュー 32 04から当該クエリを取り出し、サーバ管理表 3201を見て正常稼働しているサーバ、 この場合、サーバ 3100aのみへ該パケットを転送する(ステップ S3318)。次いで、送 信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。サーバ 310 0aは正常に COMMIT完了したことを通知する応答パケットを仲介装置 3200に送 信し、仲介装置 3200がこの応答パケットを受信する(ステップ S3319)。 COMMIT が正常に完了したことから、トランザクションが終了したことが分力るので、サーバ制御 部 3210はトランザクション管理表 3202からこのトランザクションの登録を削除する(ス テツプ S3320)。この時のトランザクション管理表 3202を図 96に示す。サーバ制御 部 3210は応答パケットをクライアント 3500aへ転送する(ステップ S 3321)。
[0399] ここで、新規サーバ 3100bからのデータベース同期化要求時に実行していたトラン ザクシヨンが全て無くなつたので、サーバ制御部 3210は同期化動作を開始する (ス テツプ S3322)。具体的には、図 91に示すように、まず、サーバ制御部 3210は、正 常稼働しているサーバ 3100aに対して同期化指示 (スナップショット作成指示)のパ ケットを送信する(ステップ S3323)。なお、前記ステップ S3322において、トランザク シヨン管理表 3202に記録されているトランザクションがデータベース同期化要求時 に実行中であったもの力、又は、その後にクライアント 3500から受信したものかを判 定するには、前記ステップ S 3308で記録してぉ 、たデータベース同期要求時のトラ ンザクシヨン情報を参照すればよ 、。
[0400] 同期化指示を受け取ったサーバ 3100aのデータベース制御部 3102aは、データ
ベース 3101aのスナップショットを作り出す (ステップ S3324)。ここで、このスナップ ショットは、同期化指示を受け取った時点でのデータベース全体のバックアップデー タゃデータベースを復元するための情報であり、同期化指示後の更新は反映されて
Vヽな 、ことに注目すべきである。
[0401] サーバ 3100aのデータベース制御部 3102aは、スナップショット作成が完了すると
(ステップ S3325)、その旨を仲介装置 3200へ通知する(ステップ S3326)。
[0402] データベース制御部 3102aは作成したスナップショットをサーバ 3100bへ転送し、 サーバ 3100bのデータベース制御部 3102bは、サーバ 3100aから受信したスナツ プショットからデータベースを復元する(ステップ S3327)。このスナップショットの転送 とデータベースの復元は、データベース 3101aのサイズが大きければ大きいほど時 間が力かる力 クライアントからのデータベースアクセスと並行して実行されるのでクラ イアントに対するサービスを止めることはない。
[0403] スナップショット作成完了通知を受け取った仲介装置 3200のサーバ制御部 3210 は、クライアント 3500へのサービスを再開する。この場合、処理せずに送信キュー 32 04に保持していた、クライアント 3500bからの BEGINを含んだパケットの処理を再開 する。すなわち、サーバ制御部 3210は、転送せずに保持していたクライアント 3500 bからの BEGIN SQLを含んだパケットを送信キュー 3204から取り出して差分情報 蓄積部 3203に保存するとともに (ステップ S3328)、サーバ 3100aへ転送する (ステ ップ S3329)。次いで、送信キュー 3204の送信状態を「送信完了」にして当該ェント リを削除する。
[0404] なお、ここではステップ S3329の処理をステップ S3327の後に説明した力 ステツ プ S3327の動作 (スナップショットの転送)はクライアントへのサービスを妨げるもので はないので、スナップショットの転送中にステップ S3329や後述のステップ S3330が 行われてもよい。
[0405] サーバ 3100aは、トランザクションが正常に開始されたことを通知する応答パケット を仲介装置 3200に送信し、仲介装置 3200がこの応答パケットを受信する (ステップ S3330)。仲介装置 3200は、この応答パケットをクライアント 3500bへ転送する(ステ ップ S3331)。
[0406] 次!、で、クライアント 3500bがテーブル test— tableの更新 SQL (UPDATE)のパ ケットを仲介装置 3200に送信すると (ステップ S3332)、サーバ制御部 3210は、受 信したクエリを送信キュー 3204に入れる。そして、送信キュー 3204から当該クエリを 取り出し、当該クエリを差分情報蓄積部 3203に保存するとともに (ステップ S3333)、 正常稼働中のサーバ 3100aに当該パケットを送信する (ステップ S3334)。次いで、 送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。ここで、 サーバ 3100aは UPDATEに失敗し、その旨を通知する応答パケットを仲介装置 32 00に送信したものとする (ステップ S3335)。仲介装置 3200は、この応答パケットをク ライアント 3500bに送信する(ステップ S3336)。
[0407] UPDATE失敗の応答パケットを受信したクライアント 3500bは、トランザクションを 取り消す SQL (ROLLBACK)のパケットを仲介装置に送信する(ステップ S 3337)。 サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。そして、送信キ ユー 3204から当該クエリを取り出し、当該 SQLを差分情報蓄積部 3203に保存する とともに (ステップ S3338)、正常稼働中のサーバ 3100aに当該パケットを送信する( ステップ S3339)。次いで、送信キュー 3204の送信状態を「送信完了」にして当該ェ ントリを削除する。そして、サーバ 3100aから正常にトランザクションが ROLLBACK されたことを通知する応答パケットを受信すると (ステップ S3340)、トランザクション管 理表 3202から当該トランザクションの登録を削除するとともに (ステップ S3341)、こ の応答パケットをクライアント 3500bに送信する(ステップ S3342)。この時点での差 分情報蓄積部 3203を図 97に示す。また、トランザクション管理表 3202は空になる。
[0408] ここで、サーバ 3100bにおいてスナップショットからのデータベース 3101bの復元 が完了したものとする(ステップ S3343)。サーバ 3100bはデータベース 3101bの復 元が完了すると差分情報転送要求を仲介装置 3200に送信する (ステップ S3344)。 仲介装置 3200のサーバ制御部 3210は、差分情報転送要求を受信すると、図 92に 示すように、差分情報蓄積部 3203に蓄積されて 、るデータを古 、ものから順にサー バ 3100bに転送する処理を開始する(ステップ S3345)。
[0409] 前記ステップ S3345で差分情報蓄積部 3203に蓄積されている全てのクエリが転 送 ·処理されることでデータベース 3101aと 101bは完全に一致した状態(同期状態)
になる力 この転送処理中にクライアント 3500から新たなクエリを受信する場合があ る。例えば、図 92に例示するように、仲介装置 3200は、クライアント 3500bから新規 トランザクションを開始するクエリ(BEGIN)を受信する (ステップ S3346)。仲介装置 3200は、当該新規トランザクションをトランザクション管理表 3202に登録する (ステツ プ S3347)。そして、当該クエリを送信キュー 3204に入れる。次いで、送信キュー 32 04力 当該クエリを取り出し、差分情報蓄積部 3203の最後に当該クエリを追加する とともに (ステップ S3348)、正常稼働中のサーバ 3100aに送信する(ステップ S334 9)。そして、送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除す る。次いで、サーバ 3100aから応答パケットを受信すると (ステップ S3350)、当該応 答パケットをクライアント 3500bに転送する(ステップ S3351)。
[0410] このように差分情報転送中にクライアント 3500から受信したクエリは、正常稼働中 のサーバ 3100で処理するとともに、差分情報蓄積部 3203に蓄積していく。この処理 を継続していくと、やがて差分情報蓄積部 3203に蓄積されているクエリは全て新規 サーバ 3100bに転送され、差分情報蓄積部 3203は空になり、これを契機に差分情 報転送処理が終了する(ステップ S3352)。これによりデータベース 3101aと 101bは 完全に一致した状態(同期状態)となるので同期化処理を終了する。以上で同期化 処理は完了するので、図 87及び図 89を参照して前述したように、新規サーバ 3100 bについてのサーバ管理表 3201の稼働状態を activeに変更することでシステムに 当該サーバ 3100bを追加することができる(図 87のステップ S3144,図 89のステツ プ S3242)。
[0411] このような同期化処理により、もともとシステムに組み込まれていたが再起動や障害 等のためにシステム力も切り離されたサーバであっても、新規のサーバであっても、 理論的には幾らでも追加できる。つまり、追加できるサーバ数に制限はない。
[0412] なお、上記実施形態では、クライアント 3500a及び 3500bからの処理要求のみ多 重化データベースシステムで処理する場合にっ 、て説明した力 データベース一致 検査装置 3600からの処理要求も同様に処理すればよい。これは、多重化データべ ースシステムから見るとデータベース一致検査装置 3600もクライアントコンピュータ の 1つだからである。ところで、データベース一致検査装置 3600は、前述したように、
定期的に又は必要に応じてデータベース一致検査用の参照クエリを仲介装置 3200 に送信する。これにより、何らかの理由でデータベース 3101間でデータの矛盾が生 じた場合であっても、当該クエリによりデータベース 3101間の矛盾が検出され上記 同期化処理が実行される。これにより、データベース 3101間の同期をより確実に図 ることがでさる。
[0413] 以上のように本実施の多重化データベースシステムによれば、複数のトランザクショ ンを並行処理しても各データベース間で矛盾の生じることがなく同期状態を保つこと ができる。
[0414] 本実施の形態の変形例について説明する。上記実施形態におけるデータベース 同期化処理では、差分情報転送中にクライアント 3500から新たなクエリを受信すると 、当該クエリを差分情報蓄積部 3203に追記していた。このような処理では、差分情 報の処理に時間が力かる場合や、クライアントからの受信するクエリの受信間隔が短 い場合には、差分情報蓄積部 3203のデータが何時までたっても空にならな力つたり 空になるまで長時間要することになり、結果として新規サーバ 3100bの組み込み処 理完了まで長時間要することが考えられる。そこで、差分情報転送中に差分情報蓄 積部 3203のエントリ数が所定数以下となったら、新規クエリの処理を一時保留して専 ら差分情報の転送のみを行って差分情報蓄積部 3203を空にしてしまうと良い。以下 、このような処理について図 98を参照して説明する。
[0415] ここでは、新規のサーバ 3100bがスナップショットからデータベース 3101bの復元 処理中であるとする(ステップ S3400)。そして、サーバ 3100bにおいてデータべ一 ス 3101bの復元処理が完了し (ステップ S3401)、サーバ 3100bが仲介装置 3200 に差分情報転送要求を送信した時点で (ステップ S3402)、差分情報蓄積部 3203 には所定件数以上の差分情報が蓄積されているものとする。図 98の例では、ステツ プ S3403〜ステップ S3407による UPDATEのクエリが最新の差分情報として差分 情報蓄積部 3203に記憶されているものとする。
[0416] 図 98に示すように、仲介装置 3200のサーバ制御部 3210は、サーバ 3100bから 差分情報転送要求を受信すると、前述したように、差分情報蓄積部 3203に記憶され ている各クエリを古いものから順にサーバ 3100bに転送する処理を開始する (ステツ
プ S3408)。
[0417] サーバ制御部 3210は、クライアント 3500bから新たなクエリを受信したとする。図 9 8の例では、サーバ制御部 3210は、クライアント 3500b力もデータを追加する SQL ( INSERT)を含むパケットを受信する (ステップ S 3409)。差分情報転送中に新規ク エリを受信したサーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。 そして、送信キュー 3204から当該クエリを取り出し、差分情報蓄積部 3203に蓄積さ れている未転送のクエリの件数が所定件数より多い場合には、このクエリを差分情報 蓄積部 3203の最後に追記するとともに (ステップ S3410)、正常稼働中のサーバ 31 00aに該パケットを転送する (ステップ S3411)。次いで、送信キュー 3204の送信状 態を「送信完了」にして当該エントリを削除する。サーバ制御部 3210は、 INSERTが 成功したことを示す応答パケットをサーバ 3100aから受信すると (ステップ S3412)、 この応答パケットをクライアント 3500bに転送する(ステップ S3413)。
[0418] ここで、仲介装置 3200力もサーバ 3100bへの差分情報の転送は並行して行われ ており、これにより差分情報蓄積部 3203に記憶されている未転送のクエリが所定数 以下となったとする。
[0419] サーバ制御部 3210は、クライアント 3500b力もデータを更新する SQL (UPDATE )を含むパケットを受信すると (ステップ S3414)、受信したクエリを送信キュー 3204 に入れる。ここでは、差分情報蓄積部 3203に蓄積されている未転送のクエリの件数 が所定件数以下となっているので、この新規クエリの処理は保留する (ステップ S341 5)。すなわち、この新規クエリの差分情報蓄積部 3203への記憶及びサーバ 3100a への転送は行わない。この保留処理は、差分情報蓄積部 3203に記憶されているク エリを全てサーバ 3100bに転送し、サーバ 3100bがシステムへ組み込まれるまで継 続する。
[0420] 差分情報の転送が終了すると (ステップ S3416)、差分情報蓄積部 3203に蓄積さ れている全てのクエリが転送.処理されることでデータベース 3101aと 101bは完全に 一致した状態(同期状態)になる。以上で同期化処理は完了するので、サーバ制御 部 3210は、サーバ管理表 3201のサーバ 3100bの稼働状態を activeに変更するこ とでシステムにサーバ 3100bを追加する(ステップ S3417)。なお、このステップ S34
17の処理 ίま、図 87のステップ S3144及び図 89のステップ S3242にネ目当する。
[0421] 以降、サーバ制御部 3210は、前記ステップ S 3415で保留していた新規クエリの処 理を再開する。この時点では既に同期化が終了しているので、以降の処理は図 80を 参照して前述したものと同様となる。すなわち、サーバ制御部 3210は、当該クエリを 送信キュー 3204から取り出して正常稼働中のサーノ 、この場合サーバ 3100a及び 3100b【こ転送する(ステップ S3418, S3419)。次!ヽで、送信キュー 3204の送信状 態を「送信完了」にして当該エントリを削除する。そして、各サーバ 3100a及び 3100 bから受信した応答パケットを比較して障害発生の有無をチェックし (ステップ S3420 〜S3422)、正常な応答パケットの 1つをクライアント 3500bへ転送する(ステップ S3 423)。
[0422] このような処理により、差分情報の転送中にクライアントから受信したクエリは、未転 送の差分情報が所定数より多い場合には差分情報蓄積部 3203への記憶及びサー ノ 3100bへの転送が行われる。一方、未転送の差分情報が所定数以下の場合には 新規クエリは保留される。これにより、差分情報の処理に時間が力かる場合ゃクライア ントからの受信するクエリの受信間隔が短い場合であっても、データベースの同期を 短時間に行うことができる。なお、閾値となる「所定件数」は、大きく設定すると新規ク エリの保留時間が長くなる一方、小さく設定すると同期化処理完了までの時間が長 引くことになるというトレードオフの関係にある。したがって、この「所定件数」は各装置 の処理負荷やネットワーク速度などシステムの要件に応じて個々に最適な値を設定 すればよい。また、本変形例において閾値を 0以下に設定すれば、図 90〜図 97を 参照して前述した実施例と同様の処理となる。
[0423] (第 13の実施の形態)
本発明の第 13の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 12の実施の形態と異なる 点は、同期化処理における仲介装置力 新規のサーバに転送する差分情報の内容 にある。他の構成'動作等については第 12の実施の形態と同様なので、ここでは相 違点のみを説明する。
[0424] 第 12の実施の形態では差分情報蓄積部 3203にはクライアント 3500から受信した
全てのクエリを保存.転送していた。これにより、同期化処理を実施している間に正常 稼働中のサーバ 3100で処理されたクエリを、新規のサーバ 3100においても忠実に 再現することができるので、完全な同期化を図ることができる。
[0425] ところで、仲介装置力 新規のサーバに転送する差分情報は専ら同期処理用にの み用いられるので、該同期化において不要なクエリは転送する必要がない。具体的 には、参照系クエリの SQL (SELECT)は不要である。なお、ここでは、 SELECT F OR UPDATE文は、 SELECT文の一種であるが更新処理に影響を与えるので、 ここでは参照系クエリではなく更新系クエリとして取り扱うものとする。
[0426] そこで、本実施の形態では、第 12の実施の形態と異なり、クライアント 3500から受 信したクエリのうち、参照系クエリを除いたものを差分情報として新規のサーバ 3100 に転送する。例えば、クライアント 3500から図 99 (a)に示すような SQL文を受信した とすると、新規のサーバ 3100には図 99 (b)に示すような SQL文を転送してやればよ い。
[0427] このような処理を行うため、本実施の形態に係るサーバ制御部 3210は、第 12の実 施の形態と同様にクライアント 3500からクエリを受信した全てのクエリを差分情報蓄 積部 3203に記憶する。そして、差分情報を新規サーバ 3100に転送するにあたって 、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を新規サーバ 310 0に転送する。他の処理については第 12の実施の形態と同様である。
[0428] 本実施の形態によれば、第 12の実施の形態と比較すると、新規サーバ 3100は同 期化処理時において参照系クエリを処理する必要がないので同期化処理の短縮ィ匕 を図ることができる。これは、複雑な参照系 SQLや集合関数を含む参照系 SQLなど 処理負荷が大き 、参照系 SQLをクライアント 3500が発行して 、る場合には特に有 効である。他の効果については第 12の実施の形態と同様である。
[0429] 本実施の形態の変形例としては、サーバ制御部 3210が、同期化処理中にクライァ ント 3500からクエリを受信し、このクエリを差分情報として差分情報蓄積部 3203に蓄 積するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外 を差分情報蓄積部 3203に記憶する。そして、差分情報の転送は差分情報蓄積部 3 203に記憶されている全てのクエリを対象に行う方法が挙げられる。この変形例は、
差分情報蓄積部 3203の記憶容量をさらに節約できるという効果を有する。
[0430] (第 14の実施の形態)
本発明の第 14の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 12の実施の形態と異なる 点は、データベース同期化動作中における差分情報の蓄積処理にある。他の構成- 動作等については第 12の実施の形態と同様なので、ここでは相違点のみを説明す る。
[0431] 第 12の実施の形態では、サーバ制御部 3210は、クライアント 3500から受信した全 てのパケットを差分情報蓄積部 3203に保存していた。すなわち、トランザクション制 御 SQL、参照系 SQL及び更新系 SQLの全ての SQLについて差分情報蓄積部 320 3に保存し、サーバ 3100には差分情報蓄積部 3203に記憶されている全てのデータ を古 、もの力 順に送信して 、た。
[0432] 一方、本実施の形態では、サーバ制御部 3210は、データベース同期化動作中に クライアント 3500から受信したパケットのうち、トランザクションの開始 SQL (BEGIN) や確定 SQL (COMMIT)や取消 SQL (ROLLBACK)等のトランザクション制御 SQ L、及び、 SELECTなど参照系の SQLについては保存せず、 UPDATEや INSER Tなどの更新系の SQLのうち正常稼働中のサーバ 3100で COMMITされたものの みを差分情報蓄積部 3203に保存する。
[0433] ここで注意すべき点は、差分情報蓄積部 3203には、クライアント 3500から受信し た順番ではなぐ正常稼働中のサーバ 3100で処理された順番に更新クエリを蓄積 することである。これは、更新対象が重複する更新クエリについては、その処理順序 によってデータベース 3101の内容が異なってしまう可能性があるためである。
[0434] このような処理を実現するために、本実施の形態では、図 100に示すような差分情 報一時蓄積部 3205を新たに設けた。この差分情報一時蓄積部 3205のデータ構造 は、差分情報蓄積部 3203と同様に、クライアントから受信したクエリと該クエリが属す るトランザクションの IDと力 なる。
[0435] サーバ制御部 3210は、同期化処理中にクライアント 3500からクエリを受信すると、 更新系のもののみを順次、差分情報一時蓄積部 3205に蓄積するとともに、正常稼
働中のサーバ 3100に転送する。一方、更新係以外のものについては、差分情報一 時蓄積部 3205に蓄積することなく正常稼働中のサーバ 3100に転送する。
[0436] ここで、サーバ制御部 3210は、正常稼働中のサーバ 3100から更新クエリの実行 が失敗したことを示す応答パケットを受信すると、当該更新クエリを差分情報一時蓄 積部 3205から削除する。また、正常稼働中のサーバ 3100からトランザクションの RO LLBACKが正常に完了したことを示す応答パケットを受信すると、サーバ制御部 32 10は、当該トランザクションに属する全ての更新クエリを差分情報一時蓄積部 3205 力も削除する。一方、正常稼働中のサーバ 3100からトランザクションの COMMITが 正常に終了した応答パケットを受信すると、サーバ制御部 3210は、当該トランザクシ ヨンに属する更新クエリについて差分情報一時蓄積部 3205から差分情報蓄積部 32 03に順次移動させる。
[0437] 以上のような処理により差分情報蓄積部 3203には、正常稼働中のサーバ 3100で COMMITされた更新クエリのみ力 その処理された順番で蓄積される。したがって、 後に新規サーバ 3100から差分情報転送要求があったら、差分情報蓄積部 3203に 記憶されて ヽる差分情報を蓄積されて ヽる順番で新規のサーバ 3100に転送すれば よい。なお、新規のサーバ 3100のデータベース 3101は、仲介装置 3200からの更 新クエリを順次処理するのみなので、この更新クエリはオートコミットモードで処理する
[0438] このように、本実施の形態によれば、同期化処理には不要の参照系クエリ、 BEGI Nや ROLLBACKなどのトランザクション制御 SQLを差分情報蓄積部 3203に蓄積 することがないので、第 1の実施形態と比較すると、差分情報の転送時間及びサーバ での処理時間を短縮ィ匕できる。他の効果については第 12の実施の形態と同様であ る。
[0439] なお、本実施形態では、クライアント 3500から受信したクエリは、当該クエリの属す るトランザクションが正常稼働中のサーバ 3100で COMMITされた時点で、差分情 報一時記憶部 205から差分情報記憶部 203へ移動されて 、たが、その変形例として 、当該クエリが正常稼働中のサーバ 3100で正常処理された時点で移動するようにし てもよい。この場合には、トランザクションが ROLLBACKしたら該トランザクションに
属する更新クエリを差分情報記憶部 203から削除すればよい。このような処理は、例 えば PostgreSQLのように、更新順序によって行の順番が変わる DBMSのデータべ ースを完全一致させるために有効である。
[0440] (第 15の実施の形態)
本発明の第 15の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 12の実施の形態と異なる 点は、差分情報蓄積部の構造にある。他の構成'動作等については第 12の実施の 形態と同様なので、ここでは相違点のみを説明する。
本実施の形態に係る仲介装置 3200は、図 101に示すように、第 12の実施の形態 とは異なり差分情報蓄積部 3203は設けず、送信キュー 3206に第 1の実施形態にお ける差分情報蓄積部 3203と送信キュー 3204の機能を統合させている。
[0441] 本実施の形態に係る送信キュー 3206のデータ構造について図 102を参照して説 明する。送信キュー 3206は、クライアント 3500から受信したクエリの内容と、そのタエ リの属するトランザクション IDと、各サーバ 3100への送信状態とを記憶する。トランザ クシヨン IDは、第 12の実施の形態と同様に、トランザクション管理表 3202から取得さ れる。各サーバ 3100への送信状態は、システムに属する各サーバ 3100毎に記憶さ れる。
[0442] 送信キュー 3206の各サーバ 3100への送信状態は、「未送信」, 「送信完了」, 「保 留」の 3つの値を取りうる。「未送信」は、クライアント 3500から受信したクエリが未だ当 該サーバ 3100に送信されていない状態である。「送信完了」は、当該サーバ 3100 への送信が完了した状態である。「保留」は、新規サーバ 3100のシステムへの組み 込み処理中に、当該サーバ 3100へ転送されることなく保留されている状態である。 全てのサーバ 3100についての送信状態が「送信完了」になると、当該エントリは送信 キュー 3206から削除される。
[0443] 次に、サーバ制御部 3210の動作について説明する。サーバ制御部 3210は、クラ イアント 3500からクエリを受信すると、当該クエリがトランザクション開始 SQL (BEGI N)の場合は当該トランザクションに対して新たなトランザクション IDを振り出してトラン ザクシヨン管理表 3202に登録する。そして、当該クエリ内容,新規トランザクション ID
,各サーバ 3100の送信状態を「未送信」で送信キュー 3206に登録する。また、クラ イアント 3500から受信したクエリがトランザクション開始 SQL (BEGIN)以外の場合 は、当該クエリの属するトランザクション IDをトランザクション管理表 3202から取得し、 当該クエリ内容,トランザクション ID,各サーバ 3100の送信状態を「未送信」で送信 キュー 3206に登録する。
[0444] サーバ制御部 3210は、送信キュー 3206に記録されているクエリを、その送信状態 が「未送信」となっているサーバ 3100に対して送信し、当該サーバ 3100についての 送信状態を「送信完了」に変更する。全てのサーバ 3100について送信状態が「送信 完了」になったクエリにつ 、ては送信キュー 3206から削除する。
[0445] 仲介装置 3200からクエリを受信した各サーバ 3100は、当該クエリの処理を行い、 応答パケットを仲介装置 3200に返す。仲介装置 3200のサーバ制御部 3210は、各 サーバ 3100から受信した応答パケットを対比して障害発生の有無を確認し、正常な 応答パケットの 1つをクライアント 3500に返す。
[0446] 一方、サーバ 3100から正当でない応答が仲介装置 3200に返ってきたり、応答そ のものが返ってこない場合には、当該サーバ 3100に障害が発生したものとしてシス テム力も切り離す。具体的には、サーバ管理表 3201における当該サーバの稼働状 態を「down」に変更するとともに、送信キュー 3206の送信状態の欄について当該サ ーバに関する項目を削除する。図 103は、送信キュー 3206が図 102に示すような状 態でサーバ 3100bがシステム力も切り離された場合の送信キュー 3206の一例であ る。
[0447] 次に、新規サーバ 3100からデータベース同期化要求(システムへの組み込み要求 )を受信した場合の動作について説明する。サーバ制御部 3210は、第 12の実施の 形態と同様に、データベース同期化要求受信時に実行中のトランザクションが終了 するまで、新規トランザクションの開始は保留する。具体的には、クライアント 3500か ら受信したクエリが新規トランザクションに係るものの場合には、送信状態を「保留」と して送信キュー 3206に保存する。一方、クライアント 3500から受信したクエリがデー タベース同期化要求時に実行中のトランザクションに係るものの場合には、送信状態 を「未送信」として送信キュー 3206に保存する。図 104は、送信キュー 3206が図 10
3に示すような状態でクライアント 3500から新たにクエリを受信した場合の送信キュー 3206の一例である。図 104の例では、三行目のトランザクション ID = 3の BEGINを 除 、て上のクエリから順に(古!/、クエリから順に)、トランザクション ID = 2の SELECT ,トランザクション ID= 1の COMMIT,トランザクション ID = 2の COMMITの順に正 常稼働中のサーバ 3100aへ転送され、その送信状態が「未送信」から「送信完了」に 変更される。トランザクション ID= 3の BEGINは、新規のサーバ 3100bからスナップ ショット作成完了通知を受けた後に転送されることになる。
[0448] そして、データベース同期化要求受信時に実行中のトランザクションに係るクエリを 全て正常稼働中のサーバ 3100に送信し終えると、サーバ制御部 3210は、送信キュ 一 3206に組み込み対象である新規のサーバ 3100の項目を追加する。ここで、送信 キュー 3206には送信状態が「保留」となっているクエリが記憶されている場合がある 。この場合、サーバ制御部 3210は、送信キュー 3206に記憶されているクエリーに対 して、新規サーバ 3100についての送信状態を「保留」とする。図 105は、図 104の送 信キュー 3206に対して新規サーバ 3100bの登録をした場合を示している。また、サ ーバ制御部 3210は、データベース同期化要求受信時に実行中のトランザクションに 係るクエリを全て正常稼働中のサーバ 3100に送信し終えると、第 12の実施の形態と 同様に、正常稼働中のサーバ 3100に対して同期化指示 (スナップショットの作成指 示)を送出する。
[0449] サーバ制御部 3210は、正常稼働中のサーバ 3100からスナップショット作成完了 通知を受信すると、正常稼働中のサーバ 3100へのクエリの送信を再開する。具体的 には、まず送信キュー 3206に記憶されている全てのクエリ(この時点では全てのタエ リの送信状態は全てのサーバ 3100について「保留」になっている)について、正常稼 働中のサーバ 3100の送信状態を「未送信」に変更する。そして、サーバ制御部 321 0は、送信状態が「未送信」のクエリを当該サーバ 3100に順次送信し、送信が完了し たら送信状態を「送
信完了」に修正する。また、新たにクライアント 3500から受信したクエリは、正常稼働 中のサーバ 3100についての送信状態は「未送信」、新規のサーバ 3100についての 送信状態は「保留」にして送信キュー 3206に記憶する。図 106は、図 105の送信キ
ユー 3206に対してスナップショット完了通知受信後に新たなクエリを受信した場合を 示している。また、図 107のように、正常稼働中のサーバ 3100aに対しては「送信完 了」となっても新規のサーバ 3100bに対しては「送信完了」になって!/、な ヽ(「保留」 になっている)ので、送信キュー 3206から当該クエリは削除しない。
[0450] 新規のサーバ 3100が正常稼働中のサーバ 3100から受信したスナップショットを用 いてデータベース 3101の復元が完了すると、サーバ制御部 3210は新規のサーバ 3 100から差分情報転送要求を受信する。サーバ制御部 3210は、送信キュー 3206 に記憶されて 、るクエリであって、送信状態が「保留」となって!/、るものを当該「保留」 となっていたサーバ 3100、すなわち新規のサーバ 3100に古いもの力も順次送信す る。送信したクエリについては、送信キュー 3206における当該サーバ 3100の送信 状態を「送信完了」にし、全てのサーバ 3100についての送信状態が「送信完了」に なったら当該エントリは削除する。なお、送信状態が「保留」となっているクエリの送信 中にクライアント 3500からクエリを受信した場合、正常稼働中のサーバについては送 信状態を「未送信」、新規のサーバ 3100については送信状態を「保留」にして、当該 クエリを送信キュー 3206に記憶する。
[0451] サーバ制御部 3210は、送信状態が「保留」となっているクエリが送信キュー 3206 に存在しなくなると、サーバ管理表 3201に新規のサーバ 3100を「active」として追 加することで、当該サーバ 3100をシステムに組み込む。以降の動作は各サーバ 310 0が正常動作して 、る場合のものと同様になる。
[0452] 以上のように本実施の形態に係る仲介装置 3200では、第 12の実施の形態におけ る差分情報蓄積部 3203と送信キュー 3204の機能を、 1つの送信キュー 3206に統 合しているので、メモリの利用効率や処理効率が向上する。また、送信キュー 3206 の各クエリに対して、各サーバ 3100への送信状態を記憶するようにしているので、新 規サーバ 3100を組み込む際には当該サーバ 3100の送信状態を追加すればよい。 これにより、一度に複数台のサーバ 3100をシステムに組み込むことができる。他の作 用効果については第 12の実施の形態と同様である。
[0453] なお、本実施の形態は、第 12の実施の形態の変形例として説明したが、上記第 2 〜第 14の実施の形態において同様の変形を適用できることは言うまでもない。
[0454] (第 16の実施の形態)
本発明の第 16の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 15の実施の形態と異なる 点は、差分情報の蓄積方法にある。他の構成'動作等については第 15の実施の形 態と同様なので、ここでは相違点のみを説明する。
[0455] 上述の第 1の〜第 15の実施の形態では、仲介装置 3200が正常稼働中のサーバ 3 100にスナップショットの作成指示を送信するタイミングは、正常稼働中のサーバ 31 00において実行中のトランザクションが無くなったときである。具体的には、新規サー ノ 3100からのデータベース同期化要求を受信した時点で実行中のトランザクション について正常稼働中のサーバ 3100で処理を行うのと並行して、データベース同期 化要求受信時以降にクライアント 3500から受信した新規トランザクションの開始要求 を保留していた。そして、データベース同期化要求を受信した時に実行中のトランザ クシヨンが無くなった時点で、スナップショットの作成指示を送信している。これは、 D BMSによっては、スナップショット作成時にトランザクションが実行中だと、そのトラン ザクシヨンに属する更新クエリによるデータ更新力 Sスナップショットに反映される力否 かが不確定となる場合を考慮したためである。
[0456] 一方、本実施の形態では、サーバ 3100として、スナップショット作成時に実行中の トランザクションに属する更新クエリ及びスナップショット作成処理中に受信した更新 クエリについては、当該スナップショットには反映しないという動作を行うものを用いる 。すなわち、もしスナップショット作成中にトランザクションが終了し COMMITされても 、そのトランザクションによる更新はスナップショットに反映されない。これにより、本実 施の形態に係る仲介装置 3200のサーバ制御部 3210は、データベース同期化要求 受信時に実行中のトランザクションの終了を待つことなぐスナップショット作成指示の 送信及び新規トランザクションの開始を行うことができる。なお、仲介装置 3200がス ナップショット作成完了を待つ必要がないので、サーバ 3100のデータベース制御部 3102は、スナップショット作成が完了しても仲介装置 3200には完了通知を送信する 必要はない。
[0457] このような処理を行うため、本実施の形態に係る仲介装置 3200のサーバ制御部 32
10は、送信キュー 3206に記憶されている各クエリについて、全てのサーバ 3100に ついて送信状態が「送信完了」となり、且つ、当該クエリに属するトランザクションが終 了した場合に、当該クエリの登録を削除する。
[0458] 以下、新規サーバ 3100をシステムに組み込む際の動作について図 108〜図 112 を参照して説明する。いま、システムにはサーバ 3100aのみが組み込まれており、こ れカも新たにサーバ 3100bを組み込むものとする。
[0459] サーバ制御部 3210は、新規サーバ 3100bからデータベース同期化要求を受信す ると、正常稼働中のサーバ 3100aに対して同期化指示 (スナップショット作成指示)を 送信する。新規サーバ 3100bが仲介装置 3200に対してデータベース同期化要求 を送信した際の送信キュー 3206の一例を図 108に示す。前述したように、送信キュ 一 3206に記憶されたクエリは、当該クエリが送信完了しても該クエリの属するトランザ クシヨンが完了していないものは削除されずに残っている。同期化指示を受信したサ ーノ 3100aは、スナップショットの作成を開始する。ここで作成されるスナップショット は、送信キュー 3206に記憶されているクエリは反映されていないものである。また、 サーバ制御部 3210は、新規サーバ 3100bからデータベース同期化要求を受信す ると、送信キュー 3206に記憶されている全てのクエリについて、当該新規サーバ 31 00bの送信状態を「保留」にして追加する。この時の、送信キュー 3206の一例を図 1 09に示す。
[0460] サーバ制御部 3210は、データベース同期化要求受信時以降にクライアント 3500 からクエリを受信すると、正常稼働中のサーバ 3100aについては送信状態を「未送 信」、新規サーバ 3100bについては送信状態を「保留」にして送信キュー 3206に順 次追加する。そして、送信状態が「未送信」となっているクエリについては当該「未送 信」のサーバ 3100aに対して順次転送し、送信状態を「送信完了」に変更していく。こ のとき、図 110に示すように、送信キュー 3206に記憶されているクエリは、正常稼働 中のサーバ 3100aについてはトランザクション単位で送信状態が「送信完了」となつ ているが、新規サーバ 3100bについては「保留」となっているので、ここではクエリの 削除は行わない。
[0461] 一方、仲介装置 3200からスナップショットの作成指示を受信したサーバ 3100aは、
作成したスナップショットを新規のサーバ 3100bに送信する。新規のサーバ 3100b のデータベース制御部 3102bは、受信したスナップショットからデータベース 3101b を復元し、仲介装置 3200に差分情報転送要求を送信する。
[0462] 差分情報転送要求を受信したサーバ制御部 3210は、送信キュー 3206に記憶さ れて 、る送信状態が「保留」となって!/、るクエリを差分情報として順次新規サーバ 31 00bに送信し、図 111に示すように、送信状態を「送信完了」に変更する。そして、前 述したように、全てのサーバについて送信状態が「送信完了」となり、且つ、当該タエ リのトランザクションが完了したら、そのクエリを削除する。以降、送信状態が「保留」の クエリの送信中にクライアント 3500からクエリを受信すると、図 112に示すように、正 常稼働中のサーバ 3100aの送信状態を「未送信」,新規サーバ 3100bの送信状態 を「保留」で送信キュー 3206へ記憶する。そして、送信状態力 ^保留」のクエリが無く なった時点でデータベース 3101aとデータベース 3101bの同期が完了したことにな る。
[0463] 本実施形態によれば、システムで用いるサーバ 3100の機能的要件が限定される ためサーバ選択の幅が狭くなるものの、仲介装置 3200での処理が簡略ィ匕されるの で処理効率の高 、ものとなる。
[0464] なお、本実施の形態では、サーバ 3100として、 (1)トランザクション実行中でもスナ ップショットの作成開始ができ、(2)スナップショット作成中にクエリを処理可能であり 且つ当該クエリがスナップショットに反映されないものを用いた力 (1 ')トランザクショ ン実行中でもスナップショットの作成開始ができる力 (2')スナップショット作成中に はクエリを処理できな!/ヽ又はスナップショット作成中にクエリを処理すると当該処理が スナップショットに反映される場合があるようなサーバ 3100を用いることもできる。
[0465] ただし、この場合には、新規サーバ 3100からデータベース同期化要求を受信する と直ちに正常稼働中のサーバ 3100に対してスナップショット作成指示を送信してよ いが、スナップショット作成開始力も作成完了までは正常稼働中のサーバ 3100に対 するクエリの送信を保留する必要がある。つまり、スナップショット作成中にクライアン ト 3500から受信するクエリは送信キューに保持しておく。また、仲介装置 3200がス ナップショットの作成完了を認識するために、スナップショットの作成が完了したサー
ノ 3100は、スナップショット作成完了を仲介装置 3200に通知する必要がある。これ により、本実施の形態よりもサーバ選択の幅が広いものとなる。
[0466] (第 17の実施の形態)
本発明の第 17の実施の形態に係る多重化データベースシステムについて説明す る。本実施の形態に係る多重化データベースシステムが第 12の実施の形態と異なる 点は、第 12の実施の形態では同期化処理中におけるクライアントからのクエリの処理 とスナップショットの作成を同一のサーバで行って 、たが、本実施の形態ではそれぞ れ別のサーバで行うところにある。このため、図 113に示すようにサーノ 3100は 3台 以上必要になる。他の構成'動作等については第 12の実施の形態と同様なので、こ こでは相違点のみを説明する。
[0467] 以下に本実施の形態に係る多重化データベースシステムにおけるデータベース同 期化処理時の動作について図 114〜図 122を参照して説明する。
今、データベース 3101cはデータベース 3101a及び 101bと同期がとれていない 状態、つまり、同一ではない状態とする。例えば、データベース 3101cは、再起動直 前のデータ又は障害発生直前のデータを保持して 、る力もしれな 、し、全く新 ヽサ ーバの場合には、データを全く持っていない状態力もしれない。本発明では、前者の 場合でも古いデータは削除し、データベース 3101cはデータを全く保持していない ものとしてシステムに組み込む。
[0468] ここでは、サーバ管理表 3201は図 117のようになっているとする。また、トランザク シヨン管理表 3202と差分情報蓄積部 3203は空であるとする。
[0469] 図 114に示すように、クライアント 3500aが 172.17.1.1宛のトランザクション開始 SQL
(BEGIN)を含んだパケットを送信すると、仲介装置 3200はそのパケットを受信する (ステップ S3500)。サーバ制御部 3210は、トランザクションが開始されたことを検知 し、トランザクション管理表 3202にクライアント 3500aの IPアドレスとトランザクション 番号を登録する(ステップ S3501)。図 118にこのときのトランザクション管理表 3202 を示す。サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。そして 、送信キュー 3204から当該クエリを取り出し、サーバ管理表 3201を見て正常稼働し ているサーバ、この場合、サーバ 3100a及び 101bへ該パケットを転送する(ステップ
S3502, S3503)。次いで、送信キュー 3204の送信状態を「送信完了」にして当該 エントリを削除する。仲介装置 3200は、応答パケットを各サーバ 3100から受信する と (ステップ S3504, S3505)、各応答パケットを比較して障害有無をチヱックし (ステ ップ S3506)、正当な応答パケットの 1つをクライアント 3500aへ転送する(ステップ S 3507)。
[0470] ここで、新規サーバ 3100cは再起動されたものとする。これにより、サーバ 3100cの データベース制御部 3102cは、データベース同期化要求 (組込要求)を仲介装置 32 00へ送信する(ステップ S3508)。
[0471] データベース同期化要求を受信したサーバ制御部 3210は、トランザクション管理 表 3202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとと もに、実行中トランザクションの情報を記録しておく(ステップ S3509)。図 118より、ク ライアント 3500a,トランザクション番号 3のトランザクションが実行中なので、データべ ース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション 開始要求を受け取った場合は、その要求をサーバ 3100へ転送することを遅らせる( ステップ S3510)。つまり、同期化動作は実行中のトランザクションが全くない状態で 始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュ 一 3204での保留という手段で実現する。
[0472] 次に、クライアント 3500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S3511)。サーバ制御部 3210は、 受信したクエリを送信キュー 3204に入れる。このクエリは前記ステップ S3509で記憶 したトランザクション情報を参照することでデータベース同期化要求時に実行してい たトランザクションに属するものと判定できるので、サーバ制御部 3210は、送信キュ 一 3204から当該クエリを取り出し、サーバ管理表 3201を見て正常稼働しているサ ーノ 、この場合、サーバ 3100a及び 3100bへ該パケットを転送する(ステップ S3512 , S3513) 0次いで、送信キュー 3204の送信状態を「送信完了」にして当該エントリ を削除する。仲介装置 3200は、正常稼働中の各サーバ 3100a及び 3100bから応 答パケットを受信 (ステップ S3514, S3515)するまで待ち、各応答パケットが揃うと 該パケットから障害の有無を判定する (ステップ S3516)。そして、サーバ制御部 321
0は、正当な応答パケットの 1つをクライアント 3500aへ転送する(ステップ S3517)。
[0473] 次に、クライアント 3500bが 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を 含んだパケットを送信すると、仲介装置 3200はそのパケットを受信する (ステップ S3 518)。サーバ制御部 3210は、このパケットによりトランザクションが開始されたことを 検知し、トランザクション管理表 3202にクライアント 3500bの IPアドレスとトランザクシ ヨン番号を登録する(ステップ S3519)。図 119にこのときのトランザクション管理表 32 02を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー 3204 に入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始ク エリは送信キュー 3204に保持したまま、正常稼働中のサーバ 3100a, 3100bへは 転送しな!、(ステップ S3520)。
[0474] 次に、クライアント 3500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.11.1.1へ送信する(ステップ33521)。サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。このクエリは前記ステップ S35 09で記憶したトランザクション情報を参照することでデータベース同期化要求時に実 行していたトランザクションに属するものと判定できるので、サーバ制御部 3210は、 送信キュー 3204から当該クエリを取り出し、サーバ管理表 3201を見て正常稼働して いるサーバ、この場合、サーバ 3100a及び 3100bへ該パケットを転送する(ステップ S3522, S3523)。次いで、送信キュー 3204の送信状態を「送信完了」にして当該 エントリを削除する。仲介装置 3200は、正常稼働中の全てのサーバ 3100a及び 31 00bから応答パケットを受信 (ステップ S3524, S3525)するまで待ち、全ての応答パ ケットが揃ったら該パケットから障害の有無をチェックする (ステップ S3526)。また、 C OMMITが正常に完了したことから、トランザクションが終了したことが分力るので、サ ーバ制御部 3210はトランザクション管理表 3202からこのトランザクションの登録を削 除する(ステップ S3527)。この時のトランザクション管理表 3202を図 120に示す。サ ーバ制御部 3210は正当な応答パケットの 1つをクライアント 3500aへ転送する(ステ ップ S3528)。
[0475] ここで、新規サーバ 3100cからのデータベース同期化要求時に実行していたトラン ザクシヨンが全て無くなつたので、サーバ制御部 3210は同期化動作を開始する (ス
テツプ S3529)。具体的には、まず、サーバ制御部 3210は、正常稼働中のサーバ 3
100a及び 3100bの中から同期化用サーバ 3100を 1つ選定する(ステップ S3530)
。本実施の形態ではサーバ 3100bを選択したものとする。そして、同期化用サーバ 3
100bに対して同期化指示 (スナップショット作成指示)を送出する (ステップ S3531)
。また、サーバ管理表 3201のサーバ 3100bについて状態を「sync」に変更し、サー ノ 3100bをー且システムから切り離す (ステップ S3532)。ここで、サーバ管理表 320
1の状態「sync」とは、当該サーバ 3100が同期処理中であることを意味する。この時 のサーバ管理表 3201を図 121に示す。なお、前記ステップ S3529において、トラン ザクシヨン管理表 3202に記録されているトランザクションがデータベース同期化要求 時に実行中であったもの力、又は、その後にクライアント 3500から受信したものかを 判定するには、前記ステップ S3509で記録しておいたデータベース同期要求時のト ランザクシヨン情報を参照すればよ 、。
[0476] 同期化指示を受け取った同期化用サーバ 3100bのデータベース制御部 3102bは
、データベース 3101bのスナップショットを作り出す (ステップ S3533)。ここで、このス ナップショットは、同期化指示を受け取った時点でのデータベース全体のバックアツ プデータやデータベースを復元するための情報であり、同期化指示後の更新は反映 されて 、な 、ことに注目すべきである。
[0477] 同期化用サーバ 3100bのデータベース制御部 3102bは、スナップショット作成が 完了すると (ステップ S3534)、作成したスナップショットを新規サーバ 3100cへ転送 する。このスナップショットの転送とデータベースの復元は、データベース 3101bのサ ィズが大きければ大きいほど時間が力かる力 クライアントからのデータベースァクセ スと並行して実行されるのでクライアントに対するサービスを止めることはない。
[0478] 新規サーバ 3100cのデータベース制御部 3102cは、同期化用サーバ 3100bから 受信したスナップショットからデータベースを復元する(ステップ S3535)。
[0479] 仲介装置 3200のサーバ制御部 3210は、サーバ 3100bについてサーバ管理表 3 201の状態を「sync」に変更すると(前記ステップ S3532)、クライアント 3500へのサ 一ビスを再開する。ここで、クライアント 3500から処理要求を処理するサーバは、状 態が「&(^^^」のサーバ3100&でぁる。つまり、同期化用サーバ 3100bは、一時的に
システム力も切り離され専ら同期化処理のみを行うことになる。また、ここでは、処理 せずに送信キュー 3204に保持して!/、た、クライアント 3500bからの BEGINを含んだ パケットの処理を再開する。すなわち、サーバ制御部 3210は、転送せずに保持して V、たクライアント 3500bからの BEGIN SQLを含んだパケットを送信キュー 3204か ら取り出して差分情報蓄積部 3203に保存するとともに (ステップ S3535)、正常稼働 中のサーバ 3100aへ転送する(ステップ S3536)。次いで、送信キュー 3204の送信 状態を「送信完了」にして当該エントリを削除する。
[0480] 正常稼働中のサーバ 3100aは、応答パケットを仲介装置 3200に送信し、仲介装 置 3200がこの応答パケットを受信する(ステップ S3537)。仲介装置 3200は、この 応答パケットをクライアント 3500bへ転送する(ステップ S3538)。
[0481] 次!、で、クライアント 3500bがテーブル test_tableの更新 SQL (UPDATE)のパ ケットを仲介装置 3200に送信すると (ステップ S3539)、サーバ制御部 3210は、受 信したクエリを送信キュー 3204に入れる。そして、送信キュー 3204から当該クエリを 取り出し、当該クエリを差分情報蓄積部 3203に保存するとともに (ステップ S3540)、 正常稼働中のサーバ 3100aに当該パケットを送信する (ステップ S3541)。次いで、 送信キュー 3204の送信状態を「送信完了」にして当該エントリを削除する。ここで、 サーバ 3100aは UPDATEに失敗し、その旨を通知する応答パケットを仲介装置 32 00に送信したものとする (ステップ S3542)。仲介装置 3200は、この応答パケットをク ライアン卜 3500bに送信する(ステップ S3543)。
[0482] UPDATE失敗の応答パケットを受信したクライアント 3500bは、トランザクションを 取り消す SQL (ROLLBACK)のパケットを仲介装置に送信する(ステップ S3544)。 サーバ制御部 3210は、受信したクエリを送信キュー 3204に入れる。そして、送信キ ユー 3204から当該クエリを取り出し、当該 SQLを差分情報蓄積部 3203に保存する とともに (ステップ S3545)、正常稼働中のサーバ 3100aに当該パケットを送信する( ステップ S3546)。次いで、送信キュー 3204の送信状態を「送信完了」にして当該ェ ントリを削除する。そして、サーバ 3100aから正常にトランザクションが ROLLBACK されたことを通知する応答パケットを受信すると (ステップ S3547)、トランザクション管 理表 3202から当該トランザクションの登録を削除するとともに (ステップ S3548)、こ
の応答パケットをクライアント 3500bに送信する(ステップ S3549)。この時点での差 分情報蓄積部 3203を図 122に示す。また、トランザクション管理表 3202は空になる
[0483] ここで、新規サーバ 3100cにおいてスナップショットからのデータベース 3101cの 復元が完了したものとする(ステップ S3550)。新規サーバ 3100cはデータベース 31 01 cの復元が完了すると差分情報転送要求を仲介装置 3200に送信する (ステップ S 3551)。仲介装置 3200のサーバ制御部 3210は、差分情報転送要求を受信すると 、差分情報蓄積部 3203に蓄積されているデータを古いものから順に新規サーバ 31 00c及び同期化用サーバ 3100bに転送する処理を開始する(ステップ S3552)。
[0484] 前記ステップ S3552で差分情報蓄積部 3203に蓄積されている全てのクエリが転 送 ·処理されることでデータベース 3101aとデータベース 3101b及び 101cとは完全 に一致した状態(同期状態)になるが、この転送処理中にクライアント 3500から新た なクエリを受信する場合がある。例えば、図 116に示すように、仲介装置 3200は、ク ライアント 3500bから新規トランザクションを開始するクエリ(BEGIN)を受信する (ス テツプ S3553)。仲介装置 3200は、当該新規トランザクションをトランザクション管理 表 3202に登録する (ステップ S3554)。そして、当該クエリを送信キュー 3204に入 れる。次いで、送信キュー 3204から当該クエリを取り出し、差分情報蓄積部 3203の 最後に当該クエリを追加するとともに (ステップ S3555)、正常稼働中のサーバ 3100 aに送信する (ステップ S3556)。そして、送信キュー 3204の送信状態を「送信完了」 にして当該エントリを削除する。次いで、サーバ 3100aから応答パケットを受信すると (ステップ S3557)、当該応答パケットをクライアント 3500bに転送する (ステップ S35 58)。
[0485] このように差分情報転送中にクライアント 3500から受信したクエリは、正常稼働中 のサーバ 3100で処理するとともに、差分情報蓄積部 3203に蓄積していく。この処理 を継続していくと、やがて差分情報蓄積部 3203に蓄積されているクエリは全て新規 サーバ 3100c及び同期化用サーバ 3100bに転送され、差分情報蓄積部 3203は空 になり、これを契機に差分情報転送処理が終了する (ステップ S3559)。これによりデ ータベース 3101aとデータベース 3101b及び 101cは完全に一致した状態(同期状
態)となる。以上で同期化処理は完了するので、図 87及び図 89を参照して前述した 第 12の実施の形態と同様に、同期化用サーバ 3100b及び新規サーバ 3100cにつ いてのサーバ管理表 3201の稼働状態をともに activeに変更することでシステムに当 該サーバ 3100b及び 3100cを追加することができる(図 87のステップ S3144,図 89 のステップ S3242)。なお、この時のサーバ管理表 3201を図 123に示す。
[0486] 以上のように本実施の形態によれば、サーバ 3100のデータベース同期化処理の 際には、正常稼働中の複数のサーバ 3100の中から同期化処理用のサーバ 3100を 選定し、この同期化処理用サーバ 3100を用いてスナップショットの作成 ·転送を行つ ているので、これと並行してクライアント 3500からの処理要求を正常稼働中の他のサ ーバ 3100を用いて処理できる。したがって、組込処理とクライアントからの処理要求 に係る処理が異なるサーバで処理されるので負荷が分散されるとともに、スナップショ ットの作成中にもクライアント 3500からの処理要求に応じることができるので、クライア ント 3500に対して円滑なサービスの提供を継続できる。
[0487] なお、本実施の形態は第 12の実施の形態の変形例として説明したが、本実施の形 態に対して更に上述した第 2〜第 5の実施形態における変形を施しても本発明を実 施できる。
[0488] (第 18の実施の形態)
本発明の第 18の実施の形態に係る多重化データベースシステムについて図面を 参照して説明する。本実施の形態に係る多重化データベースシステムが前述の第 1 7の実施の形態と異なる点は、同期化用サーバ及び新規サーバへの差分情報の送 出タイミングにある。
[0489] すなわち、上記第 17の実施の形態では、仲介装置は新規サーバから差分情報転 送要求を受信すると、新規サーバ及び同期化用サーバの双方に同時に差分情報の 送出を行っていた。一方、本実施の形態では、同期化用サーバに対する差分情報の 送出処理と新規サーバに対する差分情報の送出処理とを非同期でそれぞれ並行し て実施する。このため、本実施の形態に係る仲介装置は、複数のサーバに対する差 分情報を互いに独立して蓄積する必要があるので、前述の第 15の実施の形態に係 る仲介装置と同じ構成とした。すなわち、送信キュー 3206において、各サーバ毎に
差分情報を記憶する。
[0490] 仲介装置 3200は、前記各実施の形態とは異なり、新規サーバ 3100からだけでな く同期化用サーバ 3100からも差分情報転送要求を受信する。そして、差分情報転 送要求を受信すると、送信キュー 3206における要求元のサーバについての送信状 態が「保留」となっているクエリを、当該要求元のサーバに順次送出し、当該サーバ についての送信状態を「送信完了」に更新する。そして、差分情報転送要求元のサ ーバにつ 、て「保留」となって 、るクエリの送出が完了すると、当該サーバにっ 、てサ ーバ管理表 3201を更新してシステムに組み込む。差分情報転送処理時におけるク ライアント 3500からのクエリの処理など他の処理については前述した第 15の実施の 形態と同様である。例えば、全てのサーバ 3100について送信状態が「送信完了」に なったクエリは送信キュー 3206から削除する点などは、第 15の実施の形態と同様で ある。
[0491] 同期化用サーバ 3100は、仲介装置 3200から同期化指示 (スナップショット作成指 示)を受信すると、スナップショットの作成を開始する。次に、スナップショットの作成が 完了すると、仲介装置 3200に対して差分情報転送要求を送信するとともに、新規サ ーバ 3100に対するスナップショットの転送を開始する。この差分情報転送要求に応 じて仲介装置 3200から差分情報を順次受信するので、同期化用サーバ 3100はこ の差分情報の処理を行う。
[0492] 次に、新規サーバ 3100をシステムに組み込む際の動作について図 124及び図 12 5のシーケンスチャートを参照して具体的に説明する。
[0493] 今、新規サーバ 3100cが仲介装置 3200にデータベース同期化要求(システムへ の組込要求)を送信し、仲介装置 3200がサーバ 3100bを同期化用サーバとして選 定して、該同期化用サーバ 3100bに同期化指示を送信するとともに (ステップ S360 1)、該サーバ 3100bをシステムから切り離したとする(ステップ S3602)。
[0494] 同期化用サーバ 3100bは、仲介装置 3200から同期化指示を受信すると (ステップ S3601)、スナップショットの作成を開始する(ステップ S3603)。そして、スナップショ ットの作成が完了すると (ステップ S3604)、仲介装置 3200に対して差分情報転送 要求を送信するとともに (ステップ S3605)、当該スナップショットを新規サーバ 3100
cへ転送する処理を開始する(ステップ S 3606)。
[0495] 仲介装置 3200は、同期化用サーバ 3100bから差分情報転送要求を受信すると、 当該サーバ 3100bに対する差分情報の送出を開始する (ステップ S3607)。具体的 には、送信キュー 3206に蓄積されているクエリのうち同期化用サーバ 3100bについ ての送信状態が「保留」となっているものを、古いものから順に同期化用サーバ 3100 bに送信する。そして、当該クエリについて送信キュー 3206における同期化用サー バ 3100bの送信状態を「送信完了」に更新する。
[0496] 同期化用サーバ 3100bへの差分情報転送中に、クライアント 3500からクエリ(図 1 24では UPDATE)を受信すると (ステップ S3608)、仲介装置 3200は当該クエリを 差分情報として記憶する (ステップ S3609)。具体的には、当該クエリを、正常稼働中 のサーバ 3100aについては送信状態を「未送信」で、同期化用サーバ 3100b及び 新規サーバ 3100cについては送信状態を「保留」にして、送信キュー 3206に蓄積 する。次に、仲介装置 3200は、当該クエリを含んだパケットを正常稼働中のサーバ 3 100a【こ転送し (ステップ S3610)、送信キュー 3206のサーノ 3100a【こつ!/、ての送 信状態を「送信完了」に更新する。そして、正常稼働中のサーバ 3100aからの応答 パケット(ステップ S3611)を、要求元のクライアント 3500に返す (ステップ S3612)。
[0497] 新規サーバ 3100cは、スナップショットに基づきデータベース 3101cの復元を完了 すると (ステップ S3613)、仲介装置 3200に対して差分情報転送要求を送信する (ス テツプ S3614)。
[0498] 仲介装置 3200は、新規サーバ 3100cから差分情報転送要求を受信すると (ステツ プ S3614)、当該サーバ 3100cに対する差分情報の送出を開始する (ステップ S36 15)。具体的には、送信キュー 3206に蓄積されているクエリのうち新規サーバ 3100 cにつ 、ての送信状態が「保留」となって 、るものを、古 、もの力 順に新規サーバ 3 100cに送信し、当該クエリについて新規サーバ 3100cの送信状態を「送信完了」に 更新する。本実施の形態は、同期化用サーバ 3100bへの差分情報転送と、新規サ ーバ 3100cへの差分情報転送は、互いに並行して非同期で行うことが特徴的な点で ある。
[0499] 同期化用サーバ 3100b及び新規サーバ 3100cへの差分情報転送中に、クライア
ント 3500からクエリ(図 124では INSERT)を受信すると(ステップ S 3616)、仲介装 置 3200は当該クエリを差分情報として記憶する (ステップ S3617)。具体的には、当 該クエリを、正常稼働中のサーバ 3100aについての送信状態を「未送信」にして、同 期化用サーバ 3100b及び新規サーバ 3100cについて送信状態を「保留」で送信キ ユー 3206に蓄積する。次に、仲介装置 3200は、正常稼働中のサーバ 3100aに転 送し (ステップ S3618)、送信キュー 3206のサーバ 3100aについての送信状態を「 送信完了」に更新する。そして、正常稼働中のサーバ 3100aからの応答パケット (ス テツプ S3619)を、要求元のクライアン卜 3500に返す (ステップ S3620)。
[0500] 仲介装置 3200は、同期化用サーバ 3100b又は新規サーバ 3100cについて送信 状態が「保留」となっているクエリが送信キュー 3206からなくなると、差分情報の送出 が完了したことになるので、当該サーバ 3100b, 3100cについてそれぞれサーバ管 理表 3201を更新してシステムに組み込む。
[0501] 通常は、図 125に示すように、同期化用サーバ 3100bへの差分情報送出は新規 サーバ 3100cより先に終了し (ステップ S3621)、仲介装置 3200は、同期化用サー ノ 3100bについてサーバ管理表 3201の稼働状態を activeに変更してシステムに 組み込む(ステップ S3622)。
[0502] 以降、新規サーバ 3100cへの差分情報転送中にクライアント 3500からのクエリ(図 125では UPDATE)は、正常稼働中のサーバ 3100a及び前記ステップ S3622で組 み込まれたサーバ 3100bで処理される。すなわち、まず、当該クライアント 3500から クエリを受信すると (ステップ S3623)、仲介装置 3200は当該クエリを差分情報として 記憶する (ステップ S3624)。具体的には、当該クエリを、正常稼働中のサーバ 3100 a及び 3100bについて送信状態を「未送信」にして、新規サーバ 3100cについて送 信状態を「保留」で送信キュー 3206に蓄積する。次に、仲介装置 3200は、正常稼 働中のサーノ 3100a及び 3100b【こ転送し (ステップ S3625, S3626)、送信キュー 3206のサーバ 3100a及び 3100bについての送信状態を「送信完了」に更新する。 そして、正常稼働中のサーバ 3100a及び 3100bからの応答パケット(ステップ S362 7, S3628)の正当性をチェックし (ステップ S3629)、正しい応答の 1つを要求元のク ライアン卜 3500に返す (ステップ S3630)。
[0503] 次に、仲介装置 3200は、新規サーバ 3100cについて送信状態が「保留」となって いるクエリが送信キュー 3206からなくなると、差分情報の送出が完了したことになる ので (ステップ S3631)、当該新規サーバ 3100cについてサーバ管理表 3201の稼 働状態を「active」で追加してシステムに組み込む (ステップ S3632)。
[0504] 本実施の形態によれば、上記第 17の実施の形態と比較して、同期化用サーバ 31 00のシステムの組込復帰の時期が早くなるので、システムに組み込まれて!/、るサ一 バの数が通常時よりも少なくなつている期間を短縮することができる。したがって、シ ステムの耐故障性が向上する。
[0505] なお、本実施形態では、同期化用サーバ 3100bが新規サーバ 3100cよりも先にシ ステムに組み込まれた例について説明した力 状況によっては新規サーバ 3100cの 方が先にシステムに組み込まれる場合も考えられる。
[0506] 以上、本発明の実施形態につ!、て詳述したが、上記実施の形態は例示的なもので あり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に 示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれる ものである。
[0507] 例えば、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はな い。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラォプ シヨン、ハードウェア力ソフトウェア力 などが異なっていてもよい。サーバには、 Post greSQLなどのフリーソフトウェアや Oracleなどの市販のソフトウェア、独自開発のソ フトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サー ノ 3100aは PostgreSQLでサーバ 3100bは Oracleでも良い。
[0508] DBMSとしては、巿中品(例えば、 Oracleや PostgreSQL)を使う場合は、データ ベース制御部 3102は、データベース管理部とデータベースサーバ管理部に機能を 分けることによって、巿中品を無改造で使うことができる。データベース管理部は、デ ータベース 3101を直接操作するもので、例えば PostgreSQLの場合は postmaste rや postgresに相当する。データベースサーバ管理部は、仲介装置 3200とデータ ベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを 同期化する際のデータベース 3101のスナップショットを作成したり、そのスナップショ
ットを他のサーバへ転送したりする処理を行う。
[0509] スナップショットの作成方法は、例えば DBMSが PostgreSQLならば pg— dumpな どのダンプツールやバックアップツールを使って実現する。なお、 pg— dumpは Post greSQLサーバ同士を同期化する場合には有用だ力 異種の DBMS同士 (例えば PostgreSQLと Oracle)を同期化する場合には、 DBMS固有のツールは使わずに、 正常稼働中の DBMSサーバから SELECTクエリで全てのデータを取りだし INSER Tクエリでデータを入れる汎用のツールを使えばよい。
[0510] また、上記実施の形態では、システムへの組み込み要求 (新規サーバのデータべ ース同期化要求)は当該新規サーバ 3100のデータベース制御部 3102が仲介装置 3200へ送信している力 さらに保守端末などの他の装置力も送信可能にしてもよい し、オペレータが仲介装置 3200に直接指示可能としても良い。
[0511] さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが 、ハードウェアで実装しても良い。
[0512] また、上記実施の形態では、仮想サーバ 3800を構成する仲介装置 3200は 1台の みであつたが、複数台設けて冗長性を持たせることにより、より可用性の高い構成と することも可能である。仲介装置を多重化させる技術については、例えば本願出願 人による特開 2003— 345679号公報に記載されたものなどを用いればよい。
[0513] さらに、上記各実施の形態では、データベース一致検査装置 3600を多重化デー タベースシステムの外側、すなわちネットワーク 3400に接続していたが、図 126に示 すように、多重化データベースシステムの内側のネットワーク 3300にデータベース一 致検査装置 3600を接続するようにしてもょ ヽ。
[0514] (第 19の実施の形態)
本発明の第 19の実施の形態に係る多重化データベースシステムについて図面を 参照して説明する。図 131は本実施の形態に係る多重化データベースシステムの全 体構成を説明するブロック図である。
[0515] この多重化データベースシステムは、図 131に示すように、複数のデータベースサ ーバ(以下「サーバ」と言う) 4100と仲介装置 4200とをネットワーク 4300で接続した ものであり、ネットワーク 4400を介して 1以上のクライアントコンピュータ(以下「クライ
アント」と言う) 4500及びデータベース一致検査装置 4600からアクセスされるもので ある。本実施の形態では、図 131に示すように、 2台のサーノ lOOa及び 4100bを 有しており、 2台のクライアント 4500a及び 4500b力もアクセスされる。以降の説明に おいて各サーバ 4100を他のサーバ 4100と区別する場合には添え字「a」「b」を付カロ するものとする。クライアント 4500についても同様である。なお、図 131の例では、サ ーバ 4100とクライアント 4500はそれぞれ別々のネットワーク 4300, 4400に接続さ れて 、るが、同じネットワークに接続されて 、てもよ 、。
[0516] 図 131に示すように、仲介装置 4200は、ネットワーク 4400側に IPアドレス
172.17.1.1を持っており、これをデータベースサーバの IPアドレスとして公開している 。クライアント 4500やデータベース一致検査装置 4600はデータベースにアクセスし たいときは IPアドレス 172.17.1.1へクエリを送信し、 IPアドレス 172.17.1.1の仲介装置 4 200からそのクエリに対する応答パケットを受信する。これは、クライアント 4500等に とっては、 IPアドレス 172.17.1.1を持ったデータベースサーバとパケットを送受信して いることと同じである。この IPアドレス 172.17.1.1を持った仮想的なデータベースサー バを仮想サーバ 4800と呼ぶ。この仮想サーバ 4800の目的は、サーバ 4100が冗長 化されていることを隠蔽するためである。つまり、サーバ 4100aとサーバ 4100b両方 が稼働していようとサーバ 4100bがダウンしてサーバ 4100aのみが稼働していようと サーバ 4100aとサーバ 4100bの他に新たなサーバが追加されようとクライアントには 影響は無ぐ動作を変更する必要がない。
[0517] サーバ 4100は、データを保存'管理するデータベース 4101と、データベース 410 1の動作を制御するデータベース制御部 4102とを備えている。
[0518] データベース 4101は、 SQL (Structured Query Language)を解して処理を行う RD BMS (Relational Database Management System)である。このようなデータベース 41 01としては種々のものがあり、例えば The PostgreSQL Global Development Groupによる PostgreSQL (http://www.postgres.org/)や、 Oracle社による Oracl e (登録商標) (http://www.oracle.com)などが挙げられる。
[0519] データベース制御部 4102は、ネットワーク 4300を介して仲介装置 4200から送ら れてくるパケットに基づき動作する。このパケットは、 SQLなどデータベース 4101で
の処理に係るもの、同期化処理に係るものに大別される。 SQLなどデータベース 41 01での処理に係るものについては、データベース制御部 4102は、当該パケットをデ ータベース 4101に渡し、データベース 4101からの処理結果を仲介装置 4200に返 す。
[0520] 一方、同期化処理に係るものは、さらに、自身が本システムに組み込まれている場 合のものと、起動時や障害復旧時などこれからシステムに組み込む場合のものとに別 れる。前者については、スナップショットの作成指示(同期化指示)がある。データべ ース制御部 4102は、スナップショット作成指示を仲介装置 4200から受信すると、デ ータベース 4101のスナップショットを作成する。そして、スナップショットの作成が完 了すると、スナップショット作成完了を仲介装置 4200に通知する。そして、作成した スナップショットを、スナップショット作成指示で指示されて 、る転送先の他のサーバ 4 100に転送する。ここで、スナップショットとは、その作成開始時点で確定している(C OMMITされて!/、る)データベース全体の複製データやデータベースを復元するた めに必要なデータを意味する。したがって、スナップショットには、作成開始時点で C OMMITされて!/、な!/、データは含まれな!/、ことに留意すべきである。
[0521] 他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部 41 02は、他のデータベースからスナップショットを受信すると、このスナップショットを用 いて自身のデータベース 4101を復元する。データベース 4101の復元が完了すると 仲介装置 4200に対して差分情報転送要求を送出する。後述するように、差分情報 転送要求に応じて仲介装置 4200から差分情報が転送されるので、この差分情報を 用いてデータベース 4101を復元する。この差分情報とは、仲介装置 4200がクライア ント 4500から受信したクエリのうち前記スナップショットに反映されていないものであり 、仲介装置 4200にお 、て記憶蓄積したものである。
[0522] また、データベース制御部 4102は、仲介装置 4200から再起動指示を受信すると 、データベース 4101及びデータベース制御部 4102の再起動を行う。この再起動処 理は、データベース 4101及びデータベース制御部 4102のプロセスの再起動のみ を行ってもよく、データベース 4101及びデータベース制御部 4102がサーバ 4100の 起動時に自動起動するように設定されて!ヽればサーバ 4100全体の再起動でもよ 、
。さらに、データベース制御部 4102は、自身が起動(再起動を含む)されると、仲介 装置 4200に対してデータベース同期化要求(システムへの糸且込要求)を送信する。
[0523] 仲介装置 4200は、図 132に示すように、本システム内のサーバ 4100を管理する サーバ管理表 4201と、トランザクションを管理するトランザクション管理表 4202と、サ ーバ 4100に送信するクエリを一時保存する送信キュー 4203と、クライアント 4500及 びデータベース一致検査装置 4600からの受信したクエリを送信キュー 4203に投入 する受信クエリ処理部 4204と、送信キュー 4203からクエリを取り出してサーバ 4100 に送信するクエリ送信処理部 4205と、クエリ送信処理部 4205で送信したクエリに対 する各サーバ 4100からの応答の正当性を判定する正当性判定部 4206と、正当性 判定部 4206で正当と判定された応答を要求元のクライアント 4500等に送信する応 答送信処理部 4207と、各サーバ 4100間の同期化処理を制御する同期化処理制御 部 4208とを備えている。
[0524] サーバ管理表 4201は、サーバが正常稼働中でクエリの処理が可能である力 (acti ve)、同期化処理中であるか(sync)、サーバが正常稼働中でクエリの処理が可能で あり且つ同期化処理中であるか(active + sync)という状態情報を保存している。ま た、サーバ 4100がシステム力も切り離された場合には、当該サーバ 4100について のエントリはサーバ管理表 4201から削除される。図 133にサーバ管理表の一例を示 す。サーバ管理表 4201は、図 133に示すように、サーバ 4100を識別するためのサ ーノ IDと、サーバの稼働状態力も構成されている。図 133の例では、サーバ 4100a とサーバ 4100bとが登録されており、稼働状態は共に正常稼働を示す activeである 。また、本実施形態では、サーバ IDとしてサーバ 4100に付された IPアドレスを用い た。
[0525] トランザクション管理表 4202は、現在実行中の又は実行開始を保留されているトラ ンザクシヨンの有無を記憶する。図 134にトランザクション管理表 4202の一例を示す 。図 134に示すように、トランザクション管理表 4202は、クライアントを一意に識別す るクライアント IDとトランザクションを一意に識別するトランザクション ID力も構成される 。これらのペアは、受信クエリ処理部 4204がトランザクション開始時にトランザクション 管理表 4202に登録し、応答送信処理部 4207がトランザクション終了時にトランザク
シヨン管理表 4202から削除する。クライアント IDは、例えばクライアント 4500等の IP アドレスやポート番号である。トランザクション IDは新し 、トランザクションが発生する 毎に受信クエリ処理部 4204が新たに割り振る。
[0526] 送信キュー 4203は、クライアント 4500等力も受信したクエリをサーバ 4100に送信 する際の送信バッファとしての機能を有するとともに、同期化処理時にクライアント 45 00から受信したクエリを差分情報として記憶蓄積する機能とを有するものである。
[0527] 送信キュー 4203のデータ構造について図 135を参照して説明する。送信キュー 4 203は、クライアント 4500から受信したクエリの内容と、そのクエリの属するトランザク シヨン IDと、各サーバ 4100への送信状態と、当該クエリが正常稼働中のサーバ 410 0で処理された場合の当該処理結果を記憶する。トランザクション IDは、トランザクシ ヨン管理表 4202から取得される。各サーバ 4100への送信状態は、システムに属す る各サーバ 4100毎に記憶される。
[0528] 送信キュー 4203の各サーバ 4100への送信状態は、「未送信」, 「送信完了」, 「保 留」, 「保留解除」の 4つの値を取りうる。「未送信」は、特に保留することなく当該サー ノ 100に送信予定であるが未だ送信されていない状態である。「送信完了」は、当 該サーバ 4100への送信が完了した状態である。「保留」は、サーバ 4100のシステム への組み込み処理中に、当該サーバ 4100へ転送されることなく保留されている状態 である。「保留解除」は、「保留」状態が解除されたが未送信の状態である。送信キュ 一 4203の各エントリは、全てのサーバ 4100についての送信状態が「送信完了」にな り、且つ、当該クエリの属するトランザクションが終了すると送信キュー 4203から削除 される。
[0529] 受信クエリ処理部 4204は、クライアント 4500及びデータベース一致検査装置 460 0からのクエリをネットワーク 4400経由で受信すると、当該クエリを解析して新規トラン ザクシヨンの開始を検出した場合にはトランザクション管理表 4202に該トランザクショ ンを登録するとともに、サーバ管理表 4201を参照して受信クエリを送信キュー 4203 に投入する。
[0530] 受信クエリ処理部 4204が新規トランザクションの開始を検出する方法は、 DBMS の種類によって異なる。例えば前述の PostgreSQLの場合は、トランザクションの開
始はクライアント 4500等が「BEGIN」という SQLを送信した時であり、トランザクション の終了はクライアント 4500等が「COMMIT」「ROLLBACK」という SQLを送信した 時である。また、 Oracleの場合は、トランザクションの開始はクライアント 4500等が有 効な SQLを送信したときであり(明示的なトランザクションの開始を宣言する SQLは 無い)、トランザクションの終了はクライアント 4500等が「COMMIT」「ROLLBACK 」という SQLを送信した時である。また、サーバ 4100が AUTO COMMITモードで 動作する場合には、クライアント 4500等力も受信した SQL文はそれぞれ 1つの独立 したトランザクションに属して 、ると解釈できるので、クライアント 4500等力も SQLを 受信する毎に、該 SQL実行前にトランザクションが開始されるとともに SQL実行後に 当該トランザクションが終了したこととして扱うことができる。
[0531] 受信クエリ処理部 4204が受信クエリを送信キュー 4203に投入する際には以下の ようにして各サーバ 4100についての送信状態を設定する。サーバ管理表 4201のサ ーバ稼働状態が「active」である場合には、当該サーバ 4100については送信状態 を「未送信」とする。また、サーバ管理表 4201のサーバ稼働状態が「sync」又は「act ive + syncjの場合であって、当該サーバ 4100に対するクエリの転送処理が未だ始 まっていない場合には、当該サーバ 4100については送信状態を「保留」とする。す なわち、本実施の形態では、受信クエリを「保留」として送信キュー 4203に記憶する ことにより、差分情報の蓄積を図っている。また、サーバ管理表 4201のサーバ稼働 状態が「sync」又は「active + sync」の場合であって、当該サーバ 4100に対するク エリの転送処理が始まっている場合には、当該サーバ 4100については送信状態を「 保留解除」とする。
[0532] クエリ送信処理部 4205は、送信キュー 4203を監視して、該送信キュー 4203に送 信状態が「未送信」又は「保留解除」となって 、るクエリを古 、ものから順に取り出し、 対象となるサーバ 4100に対して送信するとともに、送信キュー 4203の送信状態を「 送信完了」に更新する。
[0533] 正当性判定部 4206は、クエリ送信処理部 4205で各サーバ 4100に送信したクエリ に対する応答を受信して当該応答の正当性を判定する。この正当性の判定は、当該 応答の送信元のサーバ 4100の稼働状態が「active」又は「active + sync」であるも
のに係る場合には、後述の第 1の正当性判定方法により 1つ以上の応答から 1つの 応答を選定する。他方、当該応答の送信元のサーバ 4100の稼働状態が「sync」で あるものに係る場合には、後述の第 2の正当性判定方法により当該応答の正当性を 判定する。
[0534] 第 1の正当性判定について説明する。この第 1の正当性判定は、一台以上のサー ノ 100間でのクエリ処理の正当性を判定するものである。具体的には、サーバ 410 0が 3台以上ある場合には多数決で決める方法や、受信した応答を所定のルールに 基づいて判断する方法がある。例えば、クライアント 4500からの「参照」要求に対して 「更新成功」 t 、う応答が返ってきた場合、正常であればそのような応答はあり得な 、 ので (参照成功など参照に関する応答のはず)、この応答は正しくないと判断する。ま た、当該応答に係るパケット中にデータ長フィールドがある場合、このデータ長フィー ルドの値と実際に受信したパケット長を比較し、異なる場合は正しくないと判断する。 また、複数のサーバ 4100の中から Masterサーバを予め 1台決めておき、このサー ノ 100からの応答を常に正しいと判断する。また、上記複数の方法を併用する方法 もある。例えば、 3台で多数決を行った結果、応答の中身が全てバラバラであり、多数 派の応答を決められな 、場合は Masterサーバの応答を正 、と判断する。正常稼 働しているサーバ 4100が 1つだけの場合は、そのサーバ 4100からの応答を正常と 判断する。なお、正常稼働しているサーバ 4100の台数はサーバ管理表 4201を参 照することにより認識できる。正当性判定部 4206は、第 1の正当性判定の結果、正 当でない応答を返したサーバ 4100に対して再起動指示を送信するとともに、サーバ 管理表 4201及び送信キュー 4203から該サーバ 4100についてのエントリを削除す る。これにより、当該サーバ 4100にはクエリが送信されなくなるので、該サーバ 4100 はシステム力 切り離されたことになる。
[0535] 第 2の正当性判定について説明する。第 2の正当性判定は、後述するように、同期 化処理時に差分情報としてサーバ 4100に送信したクエリが、他の正常稼働中のサ ーバ 4100と同じ処理を行ったか否かを判定する。第 2の正当性判定において判定 対象となる応答は、該応答に係るクエリをクライアント 4500から受信した際に、該応 答を返したサーバの稼働状態が「sync」となっていたために送信キュー 4203におい
てー且「保留」又は「保留解除」となっていたクエリに係るものである。そして、同クエリ は、クライアント 4500から受信した際に、稼働状態が「active」又は「acrive + sync」 である他のサーバ 4100において既に処理されている。後述するように、他のサーバ 4100で処理された当該クエリに対する応答 (処理結果)は送信キュー 4203に保存さ れている。正当性判定部 4206は、サーバ 4100から受信した応答と、送信キュー 42 03に保存されている応答とを比較することにより正当性を判定する。正当性判定部 4 206は、第 2の正当性判定の結果、正当でないと判定した場合、同期化処理を再試 行するために当該サーバ 4100に対して再起動指示を送出する。
[0536] 応答送信処理部 4207は、正当性判定部 4206にお ヽて正当と判断された応答で あって、該応答の送信元サーバ 4100の稼働状態が「active」又は「active + sync」 の場合、当該応答の 1つを処理要求元のクライアント 4500等に返すとともに、該応答 を送信キュー 4203に送信結果として保存する。また、応答送信処理部 4207は、サ ーバ 4100から受信した応答がトランザクションの終了に係るものであるかを検出し、ト ランザクシヨンの終了に係るものである場合には、当該トランザクションについてのェ ントリをトランザクション管理表 4202から削除する。また、応答送信処理部 4207は、 終了したトランザクションに属するクエリであり且つ全てのサーバ 4100の送信状態が 「送信完了」となったものを送信キュー 4203から削除する。また、応答送信処理部 42 07は、「保留解除」のクエリが送信キュー 4203からなくなった場合には、「保留解除」 となっていたサーバ 4100について、サーバ管理表 4201の稼働状態を「active」に 更新する。これにより、当該サーバ 4100はシステムに組み込まれる。なお、システム への組み込みのタイミングは、正常稼働中のサーバ 4100においてクエリの実行中で あっても構わず、またトランザクションが継続中であっても構わない点に留意されたい
[0537] 同期化処理制御部 4208は、システム外のサーバ 4100 (ここでは便宜上「新規サ ーバ 4100」と呼ぶ)をシステムに組み込む際に、該新規サーバ 4100とシステム内で 正常稼働中のサーバとの同期化処理を制御する。ここで、新規サーバ 4100としては 、システムに新たに追加するもの、ー且システム力 切り離され再びシステムに組み 込むものの双方が含まれる。
[0538] 同期化処理制御部 4208は、新規サーバ 4100からデータベース同期化要求(シス テムの組み込み要求)を受信すると、 (1)当該新規サーバ 4100について稼働状態を 「sync」にしてサーバ管理表 4201に追加する、(2)送信キュー 4203の送信状態の 欄に当該新規サーバ 4100についての列を追加する、(3)正常稼働中のサーバ 410 0の中から同期化処理用のサーバを 1台を選定して該サーバ 4100についてサーバ 管理表 4201を更新するとともに、当該サーバ 4100について送信キュー 4203の送 信状態が「未送信」となっているものは「保留」に更新する、(4)同期化処理用のサー ノ 100において実行中クエリの処理が完了するまで待機し、同期化処理用のサー ノ 4100にお!/、て実行中クエリの処理が完了したら該サーバ 4100に対してスナップ ショット作成指示を送出する、という処理を行う。同期化処理制御部 4208は、データ の整合性を維持するために、前記(1)〜 (4)の処理は 1つの処理として取り扱い、排 他制御を行う。つまり、同期化処理制御部 4208は、前記(1)〜 (4)の処理を行って V、る間は、各処理でアクセスするサーバ管理表 4201及び送信キュー 4203に対して 、他の機能ブロック(例えば受信クエリ処理部 4204など)力ものアクセスを中断させる
[0539] 前記(2)において同期化処理制御部 4208は、送信キュー 4203にクエリが残って いる場合には、そのクエリについての新規サーバ 4100の送信状態は「保留」とする。 前述したように、送信キュー 4203のエントリは、トランザクションが終了した際に削除 される。したがって、送信キュー 4203に残っているクエリは、トランザクションが終了し ていないクエリであり、前記 (4)のスナップショット作成指示に呼応して同期化用のサ ーバ 4100で作成されるスナップショットには反映されないものである。前記(2)の処 理では、このクエリについての送信状態を「保留」とすることで該クエリを差分情報とし て保持する。
[0540] 前記(3)において同期化処理制御部 4208は、サーバ管理表 4201を参照して稼 働状態が「active」であるサーバ 4100が 1台の場合には、当該サーバ 4100につい ての稼働状態を「active + sync」に変更する。これは、当該サーバ 4100を、クライア ント 4500からの処理要求を通常時と同様に処理するよう動作させるとともに、新規サ ーバ 4100の同期化処理用として動作させることを意味する。一方、稼働状態が「act
ive」であるサーバ 4100が複数ある場合には、所定の選定規則に基づき一台のサー ノ 100を選定して、当該サーバ 4100についての稼働状態を「sync」に変更する。 これは、当該サーバ 4100を、クライアント 4500からの処理要求に対する処理は行わ ず、専ら新規サーバ 4100の同期化処理用として動作させることを意味する。
[0541] 前述したように、仲介装置 4200からスナップショット作成指示を受信した同期化処 理用のサーノ 100はスナップショットの作成を開始し、スナップショットの作成が完 了すると仲介装置 4200に対してスナップショット作成完了通知を送信する。同期化 処理制御部 4208は、同期化処理用のサーバ 4100からスナップショット作成完了通 知を受信すると、送信キュー 4203に記憶されている同期化処理用サーバ 4100の欄 の全てのクエリにつ ヽて送信状態を「保留」から「保留解除」に変更する。これにより、 クエリ送信処理部 4205が同期化処理用のサーバ 4100に対して差分情報としてタエ リの送信を開始する。「保留解除」になっていたクエリの処理が全て終了すると、応答 送信処理部 4207が、当該同期化処理用サーバ 4100について、サーバ管理表 420 1の稼働状態を「active」に更新することにより、同期化処理用のサーバ 4100はシス テムに^ aみ込まれる。
[0542] また、前述したように、スナップショットの作成を完了した同期化用サーバ 4100は、 新規サーバ 4100に当該スナップショットを転送し、新規サーバ 4100は当該スナップ ショットからデータベース 4101の復元を図る。そして、新規サーバ 4100は、データ ベース 4101の復元が完了すると、仲介装置 4200に差分情報転送要求を送出する 。同期化処理制御部 4208は、新規サーバ 4100から差分情報転送要求を受信する と、送信キュー 4203に記憶されて 、る新規サーバ 4100の欄の全てのクエリにつ ヽ て送信状態を「保留」から「保留解除」に変更する。これにより、クエリ送信処理部 420 5が新規サーバ 4100に対して差分情報としてクエリの送信を開始する。「保留解除」 になっていたクエリの処理が全て終了すると、応答送信処理部 4207が、当該新規サ ーバ 4100について、サーバ管理表 4201の稼働状態を「active」に更新することによ り、新規サーバ 4100はシステムに組み込まれる。
[0543] クライアント 4500は、多重化データベースシステムに対して更新クエリ(データべ一 スを更新するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)など
を発行するものである。
[0544] データベース一致検査装置 4600は、クライアント 4500と同様に多重化データべ一 スシステムのクライアントとして動作するものであり、各サーバ 4100のデータベース 4 101が互 ヽに一致して 、るか否かを確認するためのクエリを発行する。このクエリは、 参照系のものであり、例えば所定のテーブル test— tableに対する「SELECT * FROM test— table」などである。データベース一致検査装置 4600は、定期的に 又はオペレータ等の指示に応じて当該検査用クエリの発行を行う。
[0545] 次に、本実施の形態に係る多重化データベースシステムの動作について図面を参 照して説明する。まず、サーバ 4100aと 4100bが正常に動作している場合の動作を 図 136から図 138を参照して説明する。
[0546] 初期状態では、データベース 4101aと 4101bは完全に同一であり、サーバ管理表 4201は図 137のよう〖こなっているものとする。また、トランザクション管理表 4202と送 信キュー 4203は空であるとする。各サーバ 4100a, 4100bには、テーブル test— ta bleが存在しているとする。
[0547] クライアント 4500aが 172.17.1.1宛にトランザクション開始 SQLを含んだパケットを送 信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受信する (ステ ップ S41)。受信クエリ処理部 4204は、トランザクションが開始されたことを検知し、ト ランザクシヨン管理表 4202にクライアント 4500aの IPアドレスとトランザクション番号を 登録する(ステップ S42)。図 138にこのときのトランザクション管理表 4202を示す。そ して、このパケットに係るクエリを、サーバ管理表 4201を参照して正常稼働している サーバ 4100 (ここではサーバ 4100a及び 4100b)について送信状態を「未送信」に して送信キュー 4203に入れる。
[0548] クエリ送信処理部 4205は、送信キュー 4203から送信状態が「未送信」のクエリを 取り出し、対応するサーバ 4100に該パケットを送信する。ここでは、サーバ 4100aと 4100bが正常稼働しているので、サーノ lOOaとサーバ 4100bへ該パケットを転送 する(それぞれステップ S43と S44)。そして、各サーバ 4100への送信が完了したの で各サーバ 4100について送信キュー 4203の送信状態を「送信完了」に更新する。 正当性判定部 4206は、トランザクションが正常に開始されたことを通知する応答パケ
ットをサーバ 4100aから受信するが (ステップ S45)、この時点では、未だ全ての応答 ノ ケットが揃って!/、るわけではな 、ので(この場合、サーバ 4100bからの応答パケット が来ていない)、正当性判定部 4206は何もせずにサーバ 4100bからの応答パケット を待つ。そして、トランザクションが正常に開始されたことを通知する応答パケットをサ ーバ 4100bから受信すると(ステップ S46)、これで全ての応答パケットが揃ったので 、正当性判定部 4206はそれらの応答パケットを互いに比較することでサーバ 4100 に障害が発生している力否かをチェックする (ステップ S47)。この場合、 2つの応答 パケットは共にトランザクションが正常に開始されたことを示すパケットであるため、障 害は無いと判断する。そして、応答送信処理部 4207は正当な応答パケットの 1つを クライアント 4500aに返すとともに、該応答を送信キュー 4203に保存する (ステップ S 48)。
次に、クライアント 4500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S49)。受信クエリ処理部 4204は、 サーバ管理表 4201を参照して正常稼働しているサーバ 4100について送信状態を「 未送信」にして送信キュー 4203に入れる。クエリ送信処理部 4205は、送信キュー 4 203から当該クエリを取り出し、各サーバ 4100へパケットを転送し (それぞれステップ S410と S411)、送信キュー 4203の送信状態を「送信完了」に更新する。サーバ 41 00aは正常に UPDATE成功したことを通知する応答パケットを仲介装置 4200に送 信し、仲介装置 4200の正当性判定部 4206がこの応答パケットを受信する (ステップ S412)。この時点では全ての応答パケットが全て揃っているわけではないので、正当 性判定部 4206は何もせず待機する。そして、正常に UPDATE成功したことを通知 する応答パケットをサーバ 4100bから受信すると (ステップ S413)、これで応答バケツ トが全て揃ったので、正当性判定部 4206はそれら応答パケットを互いに比較するこ とでサーバ 4100に障害が発生しているか否かをチェックする(ステップ S414)。この 場合、 2つの応答パケットは共に UPDATE成功したことを示すパケットであるため、 障害は無いと判断する。そして、応答送信処理部 4207は、正当な応答パケットの 1 つをクライアント 4500aへ転送するとともに、該応答を送信キュー 4203に保存する( ステップ S415)。
[0550] 次に、クライアント 4500aは、テーブル test— tableへの更新を確定する(実際にデ ータベースを更新する) SQL (COMMIT)を含んだパケットを 172.17.1.1へ送信する (ステップ S416)。受信クエリ処理部 4204は、サーバ管理表 4201を参照して正常 稼働しているサーバ 4100について送信状態を「未送信」にして送信キュー 4203に 入れる。クエリ送信処理部 4205は、送信キュー 4203から当該クエリを取り出し各サ ーバ 4100へパケットを転送し(それぞれステップ S417と S418)、送信キュー 4203 の送信状態を「送信完了」に更新する。サーバ 4100aは正常に COMMIT成功した ことを通知するパケットを仲介装置 4200に送信し、仲介装置 4200の正当性判定部 4206がこの応答パケットを受信する(ステップ S419)。この時点では全ての応答パケ ットが全て揃って!/ヽるわけではな 、ので、正当性判定部 4206は何もせず待機する。 そして、正常に COMMIT成功したことを通知する応答パケットをサーバ 4100bから 受信すると (ステップ S420)、これで応答パケットが全て揃ったので、正当性判定部 4 206はそれら応答パケットを互いに比較することでサーバ 4100に障害が発生して ヽ るか否かをチェックする(ステップ S421)。この場合、 2つの応答パケットは共に COM MIT成功したことを示すパケットであるため、障害は無いと判断する。応答送信処理 部 4207は、正当な応答パケットの 1つをクライアント 4500aへ転送するとともに、該応 答を送信キュー 4203に保存する(ステップ S422)。また、 COMMITが正常に完了 したことから、トランザクションが終了したことが分力るので、応答送信処理部 4207は トランザクション管理表 4202からこのトランザクションの登録を削除するとともに (ステ ップ S423)、全てのサーバ 4100について送信状態が「送信完了」となっているクエリ (ここでは、「BEGIN」, 「UPDATE」, 「COMMIT」の 3つのクエリ)を送信キュー 42 03から削除する(ステップ S423)。このときのトランザクション管理表 4202及び送信 キュー 4203は再び初期状態 (すなわち空)になる。
[0551] 次に、サーバ 4100bが故障などで障害になった場合の動作を図 139から図 141を 参照して説明する。初期状態では、データベース 4101aと 4101bは完全に同一であ り、サーバ管理表 4201は前述した図 137のようになっているとする。また、トランザク シヨン管理表 4202と送信キュー 4203は空であるとする。
[0552] クライアント 4500a力 172.17.1.1宛にトランザクション開始 SQL (BEGIN)を含んだ
パケットを送信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受 信する (ステップ S430)。受信クエリ処理部 4204は、トランザクションが開始されたこ とを検知し、トランザクション管理表 4202にクライアント 4500aの IPアドレスとトランザ クシヨン番号を登録する (ステップ S431)。図 140にこのときのトランザクション管理表 4202を示す。そして、このパケットに係るクエリを、サーバ管理表 4201を参照して正 常稼働しているサーバ 4100について送信状態を「未送信」にして送信キュー 4203 に入れる。
[0553] クエリ送信処理部 4205は、送信キュー 4203から送信状態が「未送信」のクエリを 取り出し、対応する各サーバ 4100に該パケットを転送する(それぞれステップ S432 と S433)。次いで、送信キュー 4203の送信状態を「送信完了」に更新する。仲介装 置 4200の正当性判定部 4206は、トランザクションが正常に開始されたことを通知す る応答パケットをサーバ 4100aから受信するが (ステップ S434)、この時点では、未 だ全ての応答パケットが揃って 、るわけではな 、ので(この場合、サーバ 4100bから の応答パケットが来ていない)、何もせずにサーバ 4100bからの応答パケットを待つ 。そして、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 4 100bから受信すると (ステップ S435)、これで全ての応答パケットが揃ったので、正 当性判定部 4206はそれら応答パケットを互いに比較することでサーバ 4100に障害 が発生している力否かをチェックする(ステップ S436)。この場合、 2つの応答パケット は共にトランザクションが正常に開始されたことを示すパケットであるため、障害は無 いと判断する。そして、応答送信処理部 4207は、正当な応答パケットの 1つをクライ アント 4500aへ転送するとともに、該応答を送信キュー 4203に保存する(ステップ S4 37)。
[0554] ここで、サーバ 4100bは、ステップ S435で応答パケットを返した後、故障などの障 害が発生してダウンしたものとする(ステップ S438)。
[0555] 次に、クライアント 4500aは、テーブル test— tableを更新する SQL (UPDATE)を 含んだパケットを 172.17.1.1へ送信する (ステップ S439)。受信クエリ処理部 4204は 、サーバ管理表 4201を参照して正常稼働しているサーバ 4100について送信状態 を「未送信」にして送信キュー 4203に入れる。この時点では、仲介装置 4200はサー
ノ lOObのダウンを知らないので、サーバ 4100bが正常稼働しているという情報が サーバ管理表 4201に格納されたままである。したがって、受信クエリ処理部 4204は 、サーバ 4100aの欄だけでなくサーバ 4100bの欄にっ 、ても送信状態を「未送信」 にして送信キュー 4203に受信クエリを格納する。クエリ送信処理部 4205は、送信キ ユー 4203から送信状態が「未送信」のクエリを取り出して各サーバ 4100a及び 4100 bにパケットを転送する(それぞれステップ S440と S441)。次いで、クエリ送信処理部 4205は、送信キュー 4203の送信状態を「送信完了」に更新する。サーバ 4100aは 正常に UPDATE成功したことを通知する応答パケットを仲介装置 4200に送信し、 仲介装置 4200の正当性判定部 4206がこの応答パケットを受信する(ステップ S442 ) oこの時点では応答パケットが全て揃っているわけではないので、正当性判定部 42 06は何もせず待機する。し力し、サーノ lOObはダウンしているのでサーバ 4100b 力 の応答パケットはいつまで経っても正当性判定部 4206には届かない。これによ り正当性判定部 4206はタイムアウトし、サーバ 4100bのダウンを検知する。そして、 正当性判定部 4206はサーバ管理表 4201からサーバ 4100bのエントリを削除する( ステップ S443)。このときのサーバ管理表 4201を図 141に示す。また、サーバ 4100 bについての送信状態の欄を送信キュー 4203から削除する。このときの送信キュー 4 203を図 142に示す。次に、正当性判定部 4206は、システム力も切り離したサーバ 4100bに対して再起動指示を送出する (ステップ S444)。もっとも、ここではサーバ 4 100bはダウンしているので、当該再起動指示に対する処理が行われることはない。 次に、応答送信処理部 4207は応答パケットをクライアント 4500aへ転送するとともに 、該応答を送信キュー 4203に保存する(ステップ S445)。ここでは、クライアント 450 Oaにとつて、サーバ 4100bが障害になったかどうかは認識せず、今までと同様に仮 想サーノ 4800からサービスを受けることができることに注目すべきである。
次に、クライアント 4500aは、テーブル test— tableへの更新を確定する SQL (CO MMIT)を含んだパケットを 172.17.1.1へ送信する(ステップ S446)。受信クエリ処理 部 4204は、サーバ管理表 4201を参照して正常稼働して!/、るサーバ 4100につ!/、て 送信状態を「未送信」にして送信キュー 4203に入れる。ここでは、サーバ 4100aに っ 、てのみ送信状態が「未送信」で送信キュー 4203にクエリが記憶される。そして、
クエリ送信処理部 4205は、送信キュー 4203から当該クエリを取り出し、対応するサ ーノ 、この場合、サーバ 4100aのみへ該パケットを転送する(ステップ S447)。次い で、送信キュー 4203の送信状態を「送信完了」に更新する。サーバ 4100aは正常に COMMIT成功したことを通知する応答パケットを送信し、仲介装置 4200の正当性 判定部 4206がこの応答パケットを受信する (ステップ S448)。ここでは、正常稼働中 のサーバ 4100が 1台のみなので正当性判定部 4206は当該応答パケットを正当と判 断し、応答送信処理部 4207は該応答パケットをクライアント 4500aへ転送するととも に、該応答を送信キュー 4203に保存する(ステップ S449)。また、 COMMITが正 常に完了したことから、トランザクションが終了したことが分力るので、応答送信処理 部 4207はトランザクション管理表 4202からこのトランザクションの登録を削除するとと もに (ステップ S450)、全てのサーバ 4100につ 、て送信状態が「送信完了」となって いるクエリ(ここでは、「BEGIN」, 「UPDATE」, 「COMMIT」の 3つのクエリ)を送信 キュー 4203から削除する(ステップ S450)。このときのトランザクション管理表 4202 及び送信キュー 4203は再び初期状態 (すなわち空)になる。
[0557] ここで、ステップ S447によって、サーバ 4100aのデータベース 4101aは、クライア ント 4500aからの UPDATE (ステップ S439)が反映されているのに対して、サーバ 4 100bのデータベース 4101bにはクライアント 4500aからの UPDATE (ステップ S43 9)が反映されていない、つまり、データベース 4101aとデータベース 4101bは非同 期状態になったことに注目すべきである。
[0558] 次に、並行処理される複数のトランザクションについて、各サーバ 4100における処 理順序が異なった場合について図 143及び図 144のシーケンスチャートを参照して 説明する。
[0559] ここでは、 2台の正常稼働中のサーバ 4100a及び 4100bが各クライアント 4500か らのクエリを処理するものとする。初期状態では、データベース 4101aと 4101bは完 全に同一であり、サーバ管理表 4201は図 137のようになっているものとする。また、ト ランザクシヨン管理表 4202と送信キュー 4203は空であるとする。各サーバ 4100a, 4100bには、テーブル test— tableが存在しているとする。そして、図 58のテーブル t est tableに対して、図 59のトランザクション T1をクライアント 4500aが発行し、同図
のトランザクション T2をクライアント 4500bが発行したものとする。前述したように、こ の 2つのトランザクション Tl, T2の処理後におけるデータベース 4101のデータは、 各トランザクションの処理順序によって異なった内容になることに注意されたい。
[0560] なお、ここではクエリの処理順序に伴うデータベースの不整合とその解決方法の大 まかな流れについて説明するため、サーバ管理表 4201の更新動作、送信キュー 42 03に対するクエリの入出力、トランザクション管理表 4202の更新動作など、仲介装 置 4200の各部にっ 、ての詳細な動作にっ ヽては省略する。
[0561] 図 143に示すように、クライアント 4500aがトランザクション T1を開始するクエリ(BE GIN)を仲介装置 4200に送信し (ステップ S4101)、一方、クライアント 4500bがトラ ンザクシヨン T2を開始するクエリ(BEGIN)を仲介装置 4200に送信する(ステップ S4 102)。仲介装置 4200は、各クエリをそれぞれ正常稼働中のサーバ 4100a及び 410 Obに転送する(ステップ S4103〜S4106)。そして、各サーノ 4100a及び 4100bカゝ らのそれぞれ応答(ステップ S4107〜S4110)について正当性をチェックし(図示省 略)、正当な応答の 1つをそれぞれの要求元のクライアント 4500a又は 4500bに転送 する(ステップ S4111〜S4112)。
[0562] 仲介装置 4200から BEGINに対する応答を受信したクライアント 4500a及び 4500 bは、それぞれのトランザクションに属する次のクエリを仲介装置 4200に送信する。 本実施例では、クライアント 4500aはトランザクション T1の UPDATEクエリを仲介装 置 4200に送信し (ステップ S4113)、クライアント 4500bはトランザクション T2の UP DATEクエリを仲介装置 4200に送信する(ステップ S4114)。クライアント 4500a及 び 4500bからクエリを受信した仲介装置 4200は、当該クエリをそれぞれ正常稼働中 のサーノ 4100a及び 4100b【こ転送する(ステップ S4115〜S4118)。
[0563] サーバ 4100aではトランザクション Tlの UPDATEクエリがトランザクション T2の U PDATEクエリより先に処理されたとする。トランザクション T1の UPDATEクエリを処 理したサーバ 4100aは、処理結果を仲介装置 4200に送信する(ステップ S4119)。 このとき、トランザクション T1の UPDATEクエリによる test— tableの当該更新対象 行は、トランザクション T1が COMMITされるまでロックされる。トランザクション T2の UPDATEクエリは上記ロックされている行が更新対象となっているので、当該クエリ
の処理はロックが解除されるまで保留される(ステップ S4120)。
[0564] 一方、サーバ 4100bではトランザクション T2の UPDATEクエリがトランザクション T 1の UPDATEクエリより先に処理されたとする。トランザクション T2の UPDATEタエ リを処理したサーバ 4100bは、処理結果を仲介装置 4200に送信する(ステップ S41 21)。このとき、トランザクション T2の UPDATEクエリによる test— tableの当該更新 対象行は、トランザクション T2が COMMITされるまでロックされる。トランザクション T 1の UPDATEクエリは上記ロックされている行が更新対象となっているので、当該ク エリの処理はロックが解除されるまで保留される(ステップ S4122)。
[0565] ここで、サーバ 4100aからのトランザクション T1の UPDATEクエリに対する応答(ス テツプ S4119)力 サーバ 4100bからのトランザクション T2の UPDATEクエリに対す る応答 (ステップ S4121)よりも先に仲介装置 4200に到達したとする。
[0566] 仲介装置 4200は、トランザクション T1の UPDATEクエリについての応答を一方の サーバ 4100aから受信したが(ステップ S4119)、他方のサーバ 4100bからの応答 は受信していないので当該応答を待つ (ステップ S4123)。これは、前述したように、 仲介装置 4200において、各サーバ 4100a及び 4100bからの応答を互いに比較し て正当性を判断するためである。同様に、仲介装置 4200は、トランザクション T2の U PDATEクエリについての応答を一方のサーバ 4100bから受信したが(ステップ S41 21)、他方のサーバ 4100aからの応答は受信していないので当該応答を待つ(ステ ップ S4124)。
[0567] 前述のようにサーバ 4100bにおいてトランザクション T1の UPDATEクエリの処理 はロック解除待ちされているので (ステップ S4122)、仲介装置 4200における当該ク エリに対する応答待ち (ステップ S4123)はタイムアウトする (ステップ S4125)。これ により、仲介装置 4200は、サーバ 4100bが障害になったと判断し、前記ステップ S4 124の応答待ちをキャンセルし、当該サーバ 4100bをシステム力も切り離す (ステツ プ S4126)。具体的には、サーバ管理表 4201から当該サーバ 4100bのエントリを削 除するとともに、送信キュー 4203からサーバ 4100bの送信状態の欄を削除する。そ して、仲介装置 4200は、図 144に示すように、システムから切り離したサーバ 4100b に対して再起動指示を送信するとともに (ステップ S4127)、応答をクライアント 4500
aに返す (ステップ S4128)。
[0568] サーバ 4100bは、仲介装置 4200からの再起動指示を受信すると、 自身の再起動 を開始する(ステップ S4129)。
[0569] トランザクション T1の UPDATEクエリにつ!/、て応答を受信したクライアント 4500a は、更新を確定するクエリ(COMMIT)を仲介装置 4200に送信する (ステップ S413 0)。仲介装置 4200は、クライアント 4500aからクエリを受信すると、サーバ管理表 42 01を参照して正常稼働中のサーバ 4100aに当該クエリを転送する (ステップ S4131
) o
[0570] サーバ 4100aでは、トランザクション T1の COMMITクエリを処理することによりロッ クが解除されてトランザクション T2の処理が再開可能となる(ステップ S4132)。これ により、サーバ 4100aはトランザクション T1の COMMITクエリに対する応答を仲介 装置 4200に返し (ステップ S4133)、仲介装置 4200は当該応答をクライアント 4500 aに転送する(ステップ S4134)。次いで、サーバ 4100aはトランザクション T2の UPD ATEクエリに対する応答を仲介装置 4200に返し (ステップ S4135)、仲介装置 420 0は当該応答をクライアント 4500bに転送する (ステップ S4136)。
[0571] トランザクション T2の UPDATEクエリにつ!/、て応答を受信したクライアント 4500b は、更新を確定するクエリ(COMMIT)を仲介装置 4200に送信する (ステップ S413 7)。仲介装置 4200は、クライアント 4500bからクエリを受信すると、サーバ管理表 42 01を参照して正常稼働中のサーバ 4100aに当該クエリを転送する (ステップ S4138 )。サーバ 4100aは当該クエリを処理して応答を仲介装置 4200に返し (ステップ S41 39)、仲介装置 4200は当該応答をクライアント 4500bに転送する (ステップ S4140)
[0572] ここで、システム力も切り離されたサーバ 4100bの再起動が完了したものとする(ス テツプ S4141)。サーバ 4100bは、再起動が完了すると仲介装置 4200に対してデ ータベース同期化要求を送信する(ステップ S4142)。仲介装置 4200は、正常稼働 中のサーバ 4100aと協働して、サーバ 4100aのデータベース 4101aと、サーバ 410 Obのデータベース 4101bとを同期化させる処理を行う(ステップ S4143)。この同期 化処理の詳細については後述する。仲介装置 4200は、同期化処理が完了したら当
該サーバ 4100bを再びシステムに組み込む(ステップ S4144)。システムへの組込処 理の詳細についてはステップ S4143の同期化処理の詳細と併せて後述する。
[0573] 以上の処理により、並行処理される複数のトランザクションについて、各サーバ 410
0における処理順序が異なった場合であっても、各サーバ 4100間でデータベース 4
101の同期が保たれる。
[0574] 次に、並行処理される複数のトランザクションについて、各サーバ 4100における処 理順序が異なった場合の他の例について図 145及び図 146のシーケンスチャートを 参照して説明する。
[0575] ここでは、 2台の正常稼働中のサーバ 4100a及び 4100bが各クライアント 4500か らのクエリを処理するものとする。初期状態では、データベース 4101aと 4101bは完 全に同一であり、サーバ管理表 4201は図 137のようになっているものとする。また、ト ランザクシヨン管理表 4202と送信キュー 4203は空であるとする。各サーバ 4100a, 4100bには、テーブル test— tableが存在しているとする。そして、図 58のテーブル t est— tableに対して、図 60のトランザクション T3をクライアント 4500aが発行し、同図 のトランザクション T4をクライアント 4500bが発行したものとする。前述したように、こ の 2つのトランザクション T3, T4の処理後におけるデータベース 4101のデータは、 各トランザクションの処理順序には影響されない。し力しながら、前述したように、トラ ンザクシヨン T4における SELECTの結果は各トランザクション T3, T4の処理順序に よって異なった内容になることに注意されたい。
[0576] なお、ここではクエリの処理順序に伴うデータベースの不整合とその解決方法の大 まかな流れについて説明するため、サーバ管理表 4201の更新動作、送信キュー 42 03に対するクエリの入出力、トランザクション管理表 4202の更新動作など、仲介装 置 4200の各部にっ 、ての詳細な動作にっ ヽては省略する。
[0577] 図 145に示すように、クライアント 4500aがトランザクション T3を開始するクエリ(BE GIN)を仲介装置 4200に送信すると(ステップ S4201)、仲介装置 4200は、サーバ 管理表 4201を参照して正常稼働中のサーバ 4100a及び 4100bに転送する(ステツ プ S4202, S4203)。 ί中介装置 4200ίま、各サーノ 4100a及び 4100b力らの応答を 受信すると (ステップ S4204, S4205)、正当な応答の 1つをクライアント 4500aに転
送する(ステップ S4206)。
[0578] 次!、で、クライアント 4500aはトランザクション T3の更新クエリ(UPDATE)を仲介 装置 4200に送信する(ステップ S4207)。一方、クライアント 4500bはトランザクショ ン T4を開始するクエリ(BEGIN)を仲介装置 4200に送信する (ステップ S4208)。
[0579] 仲介装置 4200は、トランザクション T3の UPDATEクエリを正常稼働中のサーバ 4 100a及び 4100bに転送するととちに(ステップ S4209, S4210)、卜ランザクシヨン T 4の BEGINクエリを正常稼働中のサーバ 4100a及び 4100bに転送する(ステップ S 4211, S4212)。そして、仲介装置 4200は、トランザクション T3の UPDATEクエリ に対する応答を各サーノ 4100a及び 4100b力ら受信すると (ステップ S4213, S42 14)、正当な応答の 1つをクライアント 4500aに転送する(ステップ S4215)。また、ト ランザクシヨン T4の BEGINクエリに対する応答を各サーバ 4100a及び 4100bから 受信すると (ステップ S4216, S4217)、正当な応答の 1つをクライアント 4500bに転 送する(ステップ S4218)。
[0580] 次!、で、クライアント 4500aはトランザクション T3を確定するクエリ(COMMIT)を仲 介装置 4200に送信する(ステップ S4219)。一方、クライアント 4500bはトランザクシ ヨン T4の参照クエリ(SELECT)を仲介装置 4200に送信する(ステップ S4220)。
[0581] 仲介装置 4200は、トランザクション T3の COMMITクエリを正常稼働中のサーバ 4 100a及び 4100bに転送するととちに(ステップ S4221, S4222) ,卜ランザクシヨン T 4の SELECTクエリを正常稼働中のサーバ 4100a及び 4100bに転送する(ステップ S4223, S4224)。
[0582] ここで、一方のサーバ 4100aでは、トランザクション T3の COMMITクエリがトランザ クシヨン T4の SELECTクエリより先に処理され (ステップ S4225, S4226)、他方の サーバ 4100bでは、トランザクション T4の SELECTクエリがトランザクション T3の CO MMITクエリより先に処理されたものとする(ステップ S4227, S4228)。これにより、 トランザクション T4の SELECTクエリの応答は、サーバ 4100aからの応答(ステップ S 4226)と、サーノ 4100b力らの応答(ステップ S4227)とは異なったものとなったとす る。
[0583] 仲介装置 4200は、トランザクション T4の SELECTクエリに対する応答力 各サー
ノ lOOa及び 4100b間で不一致となっているので、何れかのサーバ 4100a又は 41 00bを選定し、選定したサーバ 4100a又は 4100bからの応答を正当なものとする(ス テツプ S4229)。ここで、サーバ 4100の選定方法としては、例えば予め Masterサー バを定めておいて、この Masterサーバを選定する方法、最初に応答を返したサーバ を選定する方法、ラウンドロビンにより選定サーバを順次選定する方法、ランダムに選 定する方法、各サーバの処理能力,処理負荷などにより選定する方法などが挙げら れる。本実施の形態では、サーバ 4100aを Masterサーバとして該サーバ 4100aを 正当な応答を返したサーバとして選定する。仲介装置 4200は、正当でない応答を 返したサーバ 4100bをシステム力も切り離す (ステップ S4230)。具体的には、サー バ管理表 4201から当該サーバ 4100bのエントリを削除するとともに、送信キュー 42 03からサーバ 4100bの送信状態の欄を削除する。そして、図 146に示すように、当 該サーバ 4100bに対して再起動指示を送信する (ステップ S4231)。
[0584] サーバ 4100bは、仲介装置 4200からの再起動指示を受信すると、 自身の再起動 を開始する(ステップ S4232)。
[0585] 仲介装置 4200は、選定したサーバ 4100aから受信した、トランザクション T3の CO MMITクエリに対する応答及びトランザクション T4の SELECTクエリに対する応答を 、それぞれ要求元のクライアン卜 4500a, 4500bに転送する(ステップ S4233, S423 4) o以降、各クライアン卜 4500a, 4500b力らのクエリ ίま、正常稼働中のサーノ 4100 aで処理する。図 146の例では、クライアント 4500bがトランザクション T4の COMMI Tクエリを仲介装置 4200に送信すると (ステップ S4235)、仲介装置 4200は当該ク エリを正常稼働中のサーバ 4100aに転送する (ステップ S4236)。そして、仲介装置 4200は、当該クエリに対する応答をサーバ 4100aから受信すると (ステップ S4237) 、この応答を要求元のクライアント 4500bに返す (ステップ S4238)。
[0586] ここで、システム力も切り離されたサーバ 4100bの再起動が完了したものとする(ス テツプ S4239)。サーバ 4100bは、再起動が完了すると仲介装置 4200に対してデ ータベース同期化要求を送信する(ステップ S4240)。仲介装置 4200は、正常稼働 中のサーバ 4100aと協働して、サーバ 4100aのデータベース 4101aと、サーバ 410 Obのデータベース 4101bとを同期化させる処理を行う(ステップ S4241)。この同期
化処理の詳細については後述する。仲介装置 4200は、同期化処理が完了したら当 該サーバ 4100bを再びシステムに組み込む(ステップ S4242)。システムへの組込処 理の詳細についてはステップ S4241の同期化処理の詳細と併せて後述する。
[0587] 以上の処理により、並行処理される複数のトランザクションについて、各サーバ 410 0における処理順序が異なった場合であっても、クライアント 4500には 1つの正しい 応答のみが処理結果として返される。
[0588] なお、この例では、 2つのトランザクション T3及び T4に属するクエリの処理順序が 異なっても当該トランザクション T3及び T4に属する各クエリの中で同一行を更新する クエリは存在しないので、クエリの処理順序が異なることによる各データベース 4101 間の不整合は生じない。したがって、この例に限定して考えると、データベース 4101 の同期ィ匕のための各処理 (ステップ S4230〜S4232, S4239~S4242)は不要で あるとも考えられる。しかし、本実施の形態では、何らかの原因でデータベース 4101 に不整合が潜在していた場合であって、当該不整合について前記ステップ S4229を 契機に検出した場合にも対処できるように、データベース 4101の同期化のための各 処理を実施するようにした。また、この例では、 SELECTと UPDATEの順序不一致 による結果不一致について説明した力 他にも、参照系では SELECT FOR UP DATE,更新係では DELETEなどの組み合わせで結果不一致が生じる場合がある 。本実施の形態では、このような場合であっても図 145及び図 146を参照して説明し たシーケンスと同様の処理を行うことによって、データベース 4101の不整合を解消で きる。
[0589] 次に、前記ステップ S4143及び S4241における同期化処理の詳細について説明 する。本発明における同期化処理では、同期化処理開始時において正常稼働して いるサーバ 4100でデータベース 4101のスナップショットを作成し、このスナップショ ットを同期化対象の新規サーバ 4100に転送する。そして新規サーバ 4100において スナップショットからデータベース 4101の復元を行う。さらに、この処理中に受信した クライアント 4500からのクエリを仲介装置 4200にお 、て差分情報として蓄積する。こ の差分情報の蓄積は送信キュー 4203を利用する。そして、新規サーバ 4100がスナ ップショットからのデータベース 4101の復元が完了したら仲介装置 4200から差分情
報を取得して、この差分情報を処理する。
[0590] なお、前述したように、サーバ 4100は自身が起動されるとデータベース同期化要 求を仲介装置 4200に送信するので、同期化処理の実施は、仲介装置 4200からの 再起動指示に応じた再起動時に限られない。すなわち、サーバ 4100が障害となつ てシステムカゝら切り離され、その後にシステムに再び組み込む際にも実施される。ま た、システムを構成するサーバを増設する場合にも実施される。
[0591] 以下に、サーバ 4100bをシステムに組み込む場合の同期化動作を図 147から図 1 67を参照して説明する。このとき注目すべきポイントは、スナップショット作成期間中 を除きクライアント 4500a及び 4500bに対するサービスを続けたままサーバ 4100bを 追加する、つまり、システムダウンさせずにデータベース 4101aと 4101bを同期させ ることである。
[0592] データベース 4101bはデータベース 4101aと同期がとれていない状態、つまり、同 一ではない状態である。例えば、データベース 4101bは、再起動直前のデータ又は 障害発生直前のデータを保持して 、る力もしれな 、し、全く新 U、サーバの場合には 、データを全く持っていない状態力もしれない。本発明では、前者の場合でも古いデ ータは削除し、データベース 4101bはデータを全く保持していないものとしてシステ ムに糸且み込む。つまり、古いデータを保持している必要はない。
[0593] ここでは、サーバ 4100aのみが正常稼働しているのでサーバ管理表 4201は図 15 1のようになっているとする。また、トランザクション管理表 4202は空であるとする。さら に、送信キュー 4203は空であり、正常稼働中のサーバ 4100aについてのみ送信状 態を記憶する構成となって 、る。
[0594] 図 147に示すように、クライアント 4500aが 172.17.1.1宛のトランザクション開始 SQL
(BEGIN)を含んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204 はそのパケットを受信する (ステップ S4301)。受信クエリ処理部 4204は、トランザク シヨンが開始されたことを検知し、トランザクション管理表 4202にクライアント 4500a の IPアドレスとトランザクション番号を登録する(ステップ S4302)。図 152にこのとき のトランザクション管理表 4202を示す。受信クエリ処理部 4204は、サーバ管理表 42 01を参照して正常稼働中のサーバ 4100aについて送信状態を「未送信」にして受信
クエリを送信キュー 4203に入れる(ステップ S4303)。クエリ送信処理部 4205は、送 信キュー 4203から当該クエリを取り出し、対応するサーバ 4100aに転送し (ステップ S4304)、送信キュー 4203の送信状態を「送信完了」に更新する (ステップ S4305) 。仲介装置 4200の正当性応答部 206は、トランザクションが正常に開始されたことを 通知する応答パケットをサーバ 4100aから受信すると (ステップ S4306)、ここでは、 正常稼働中のサーバ 4100が 1台のみなので当該応答パケットを正当と判断し、応答 送信処理部 4207は該応答パケットをクライアント 4500aへ転送するとともに (ステップ S4307)、該応答を送信キュー 4203に保存する (ステップ S4308)。この時の送信キ ユー 4203を図 153に示す。
[0595] 次いで、クライアント 4500aが 172.17.1.1宛に、テーブル test— tableを更新する S QL (UPDATE)を含んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受信する(ステップ S4309)。受信クエリ処理部 4204は、サー バ管理表 4201を参照して正常稼働中のサーバ 4100aについて送信状態を「未送 信」にして受信クエリを送信キュー 4203に入れる(ステップ S4310)。この時の送信キ ユー 4203を図 154に示す。
[0596] ここで、サーバ 4100bが再起動したものとする(ステップ S4311)。これにより、サー ノ lOObのデータベース制御部 4102bは、データベース同期化要求(システムへの 組込要求)を仲介装置 4200へ送信する(ステップ S4312)。
[0597] データベース同期化要求を受信した同期化処理制御部 4208は、サーバ管理表 4 201を参照して同期化用のサーバ 4100を選定する。ここでは、正常稼働中のサー ノ 100は 1台のみなので、サーバ 4100aを選定する。そして、サーバ管理表 4201 のサーノ 4100aにつ!/、ての稼働状態を「active + syncjに更新するとともに(ステツ プ S4313)、送信キュー 4203のサーバ 4100aについて送信状態が「未送信」となつ ているエントリを「保留」に更新する (ステップ S4314)。また、同期化処理制御部 420 8は、同期化用のサーバ 4100aにおいて実行中クエリがないことを確認した後に、要 求元のサーバ 4100bにつ!/、て稼働状態を「sync」でサーバ管理表 4201に追加する とともに (ステップ S4315)、送信キュー 4203の送信状態の欄に当該サーバ 4100b 用の列を追加する (ステップ S4316)。ここで、当該サーバ 4100bの送信状態は全て
「保留」に設定する。この時のサーバ管理表 4201及び送信キュー 4203を図 155, 図 156に示す。以降、各クライアント 4500から受信したクエリは、サーバ 4100a及び 4100bの双方について送信状態を「保留」にして送信キュー 4203に入れる。なお、 同期化処理制御部 4208は、上記ステップ S4313〜S4316の処理は 1つの処理とし て取り扱 ヽ、 他帘 IJ御を行う。つまり、ステップ S4313〜S4316の処理中に ίま、各ス テツプでアクセスするサーバ管理表 4201及び送信キュー 4203に対して、他の機能 ブロック (例えば受信クエリ処理部 4204など)からのアクセスを中断させる。
[0598] 次いで、同期化処理制御部 4208は、サーバ 4100aにスナップショットの作成指示 を送出する (ステップ S4317)。
[0599] スナップショット作成指示を受け取ったサーバ 4100aのデータベース制御部 4102 aは、データベース 4101aのスナップショットを作り出す (ステップ S4318)。ここで、こ のスナップショットは、スナップショット作成指示を受け取った時点で COMMITされて いるデータベース全体のバックアップデータ及びデータベースを復元するための情 報であり、既に更新クエリを受信して 、てもスナップショット作成指示時には未だ CO MMITされてなければ当該更新は反映されて ヽな 、ことに注目すべきである。
[0600] 前述したように、クライアント 4500からクエリを受信すると、受信クエリ処理部 4204 は、サーバ 4100a及び 4100bの双方について送信状態を「保留」にして送信キュー 4203に入れる。図 148の例では、クライアント 4500bがトランザクション開始 SQL (B EGIN)を含んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204は そのパケットを受信する (ステップ S4319)。受信クエリ処理部 4204は、トランザクショ ンが開始されたことを検知し、トランザクション管理表 4202にクライアント 4500bの IP アドレスとトランザクション番号を登録する(ステップ S4320)。図 157にこのときのトラ ンザクシヨン管理表 4202を示す。受信クエリ処理部 4204は、サーバ 4100a及び 41 00bの双方について送信状態を「保留」にして当該受信クエリを送信キュー 4203に 入れる(ステップ S4321)。この時の送信キュー 4203を図 158に示す。
[0601] サーバ 4100aのデータベース制御部 4102aは、スナップショット作成が完了すると
(ステップ S4322)、その旨を仲介装置 4200へ通知するとともに (ステップ S4323)、 該スナップショットのサーバ 4100bへの転送を開始する(ステップ S4324)。サーバ 4
100bのデータベース制御部 4102bは、サーバ 4100aから受信したスナップショット からデータベースを復元する(ステップ S4325)。
[0602] サーバ 4100aからスナップショット完了通知を受信した仲介装置 4200の同期化処 理制御部 4208は、送信キュー 4203のサーバ 4100aについての送信状態が「保留」 となっているエントリを「保留解除」に更新する (ステップ S4326)。この時の送信キュ 一 4203を図 159に示す。以降、各クライアント 4500から受信したクエリは、サーバ 4 100aについては送信状態を「保留解除」にして、 4100bについては送信状態を「保 留」にして送信キュー 4203に入れる。これにより、クエリ送信処理部 4205は、送信状 態が「保留解除」となったクエリを古いものから順にサーバ 4100aに送信する。ここで は、クエリ送信処理部 4205は、図 159に示すトランザクション IDが 3番の UPDATE クエリをサーバ 4100aに送信し (ステップ S4327)、送信状態を「送信完了」に更新す る(ステップ S4328)。仲介装置 4200の正当性判定部 4206は、 UPDATEが正常 に処理されたことを通知する応答パケットをサーバ 4100aから受信すると (ステップ S 4329)、ここでは正常稼働中のサーバ 4100が 1台のみなので当該応答パケットを正 当と判断する。そして、応答送信処理部 4207は該応答パケットのクライアント 4500a へ転送するとともに (ステップ S4330)、該応答を送信キュー 4203に保存する (ステツ プ S4331)。同様にして図 159に示すトランザクション ID力 番の BEGINクエリも処 理する(ステップ S4332〜S4336)。この時の送信キュー 4203を図 160に示す。ここ で、サーバ 4100aについては、送信キュー 4203において送信状態が「保留解除」で あったクエリが全て処理されたことになるので、応答送信処理部 4207は、サーバ管 理表 4201のサーバ 4100aについての稼働状態を「active」に更新する(ステップ S4 337)。これによりサーバ 4100aはシステムに組み込まれる。この時のサーバ管理表 4 201を図 161に示す。以降、各クライアント 4500から受信したクエリは、サーバ 4100 aについては送信状態を「未送信」にして、サーバ 4100bについては送信状態を「保 留」にして送信キュー 4203に入れる。
[0603] 図 148の例では、クライアント 4500bが 172.17.1.1宛の UPDATEクエリを含んだパ ケットを送信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受信 する(ステップ S4338)。受信クエリ処理部 4204は、サーバ管理表 4201を参照して
正常稼働中のサーバ 4100aについて送信状態を「未送信」にするとともに、同期化 処理中のサーバ 4100bについて送信状態を「保留」にして受信クエリを送信キュー 4 203【こ人れる(ステップ S4339)。この時の送信キュー 4203を図 162【こ示す。クエリ 送信処理部 4205は、送信キュー 4203から当該クエリを取り出し、送信状態が「未送 信」であるサーバ 4100aに転送し (ステップ S4340)、送信キュー 4203のサーバ 410 Oaについての送信状態を「送信完了」に更新する (ステップ S4341)。仲介装置 420 0の正当性判定部 4206は、 UPDATEが正常に処理されたことを通知する応答パケ ットをサーバ 4100aから受信すると (ステップ S4342)、ここでは、正常稼働中のサー ノ 100が 1台のみなので当該応答パケットを正当と判断する。そして、応答送信処 理部 4207は該応答パケットをクライアント 4500bへ転送するとともに (ステップ S434 3)、該応答を送信キュー 4203に保存する (ステップ S4344)。
[0604] クライアント 4500a力 172.17.1.1宛のトランザクション確定 SQL (COMMIT)を含ん だパケットを送信すると、仲介装置 4200は、該パケットを前述のステップ S4338〜3 44と同様に処理する(ステップ S4345〜S4351)。この結果、送信キュー 4203は図 163に示したものとなる。また、 COMMITが正常に完了したことから、トランザクショ ンが終了したことが分力るので、応答送信処理部 4207はトランザクション管理表 420 2からこのトランザクションの登録を削除する(ステップ S4352)。なお、この時点でトラ ンザクシヨン IDが 3番のトランザクションは終了した力 該トランザクションに係るクエリ は同期化中のサーバ 4100bに対しては未だ送信していないので、当該クエリの送信 キュー 4203からの削除は行わない。
[0605] ここで、サーバ 4100bにおいてスナップショットからのデータベース 4101bの復元 が完了したものとする(ステップ S4353)。サーバ 4100bはデータベース 4101bの復 元が完了すると差分情報転送要求を仲介装置 4200に送信する (ステップ S4354)。
[0606] サーバ 4100bから差分情報転送要求を受信すると、同期化処理制御部 4208は、 要求元のサーバ 4100bにつ!/、て送信キュー 4203の送信状態が「保留」となって!/、る ものを「保留解除」に更新する (ステップ S4355)。以降、各クライアント 4500から受 信したクエリーは、サーバ 4100aについては送信状態を「未送信」にして、サーバ 41 00bについては送信状態を「保留解除」にして送信キュー 4203に入れる。この時の
送信キュー 4203を図 164に示す。これにより、クエリ送信処理部 4205は、送信状態 が「保留解除」となったクエリを差分情報として古 、もの力も順にサーバ 4100bに送 信する。
[0607] 具体的には、クエリ送信処理部 4205は、送信キュー 4203から BEGINクエリを取り 出してサーバ 4100bに転送するとともに (ステップ S4356)、送信キュー 4203の送信 状態を「送信完了」に更新する (ステップ S4357)。この時の送信キュー 4203を図 16 5に示す。仲介装置 4200の正当性判定部 4206は、トランザクションが正常に開始さ れたことを通知する応答パケットをサーバ 4100bから受信すると (ステップ S4358)、 当該応答と、送信キュー 4203に保存されている応答とを対比する (ステップ S4359) 。そして、両者が一致しない場合には、サーバ 4100bについてのエントリをサーバ管 理表 4201及び送信キュー 4203から削除した後に、当該サーバ 4100bに対して再 起動指示を送出する。これにより、ステップ S4311以降の処理が再試行される。
[0608] なお、この同期化処理の再試行の発生頻度は低いものと考えられるが理論上は無 限回数継続する可能性がある。そこで、所定の記憶装置に再試行回数を記憶し、再 試行回数が所定回数以上となったら同期化処理を中止すると好適である。さらに、同 期化処理を中止した場合には、所定の出力手段に当該中止した旨を出力すると好 適である。例えば、ログファイルに出力する方法などが挙げられる。そして、正常稼働 中のサーバ 4100や仲介装置 4200の負荷が低いときなどに再び同期化処理を試行 すると好適である。
[0609] 前述したように、サーバ 4100bへの差分情報の転送開始後であってサーバ 4100b のシステムのへ組込前にクライアント 4500からクエリを受信した場合には、受信クエリ 処理部 4204は、サーバ 4100aについては送信状態「未送信」で、サーバ 4100bに っ 、ては送信状態「保留解除」で当該クエリを送信キュー 4203に投入する。図 149 の例では、クライアント 4500bが仲介装置 4200に対して INSERTクエリを送信すると (ステップ S4360)、 ί中介装置 4200の受信タエジ処理咅4204は、サーノ 4100aに っ 、ては送信状態「未送信」で、サーバ 4100bにつ 、ては送信状態「保留解除」で 当該クエリを送信キュー 4203に投入する (ステップ S4361)。クエリ送信処理部 420 5は、当該クエリを送信キュー 4203から取り出してサーバ 4100aに送信し (ステップ S
4362)、サーバ 4100aについての送信状態を「送信完了」に更新する (ステップ S43 63)。仲介装置 4200の正当性判定部 4206は、 INSERTが正常に処理されたことを 通知する応答パケットをサーバ 4100aから受信すると (ステップ S4364)、ここでは正 常稼働中のサーバ 4100が 1台のみなので当該応答パケットを正当と判断する。そし て、応答送信処理部 4207は該応答パケットのクライアント 4500bへ転送するとともに (ステップ S4365)、該応答を送信キュー 4203に保存する(ステップ S4366)。この時 の送信キュー 4203を図 166に示す。
[0610] このような差分情報の転送中において、あるトランザクションに属する各クエリがサ ーバ 4100bで処理され且つその応答が正当であると判定されたら、応答送信処理部 4207は、当該トランザクションに属する全てのクエリを送信キュー 4203から削除する 。図 166の例では、トランザクション IDが 3番の UPDATE,トランザクション ID力 番 の BEGIN、トランザクション IDが 4番の UPDATEが上述した手順により順次処理さ れ、そしてトランザクション IDが 3番の COMMITクエリについて、サーバ 4100bで処 理され且つその応答が正当であると判定された時点で、トランザクション IDが 3番の B EGIN, UPDATE, COMMITクエリが送信キュー 4203から削除される。
[0611] 全ての差分情報の転送が終了し (すなわち送信キュー 4203から「保留解除」のタエ リを全て送出し終わり)、且つ、差分情報としてのクエリの処理が正常に処理された時 点で、サーバ 4100aのデータベース 4101aとサーバ 4100bのデータベース 4101b の同期化が完了するので、サーバ 4100bをシステムに組み込むべくサーバ 4100b についてのサーバ管理表 4201の稼働状態を「active」に更新する。
[0612] 図 150の例では、クエリ送信処理部 4205は、送信キュー 4203から INSERTクエリ を取り出してサーバ 4100bに転送するとともに (ステップ S4390)、送信キュー 4203 の送信状態を「送信完了」に更新する (ステップ S4391)。仲介装置 4200の正当性 判定部 4206は、 INSERTが成功したことを通知する応答パケットをサーバ 4100bか ら受信すると (ステップ S4392)、当該応答と、送信キュー 4203に保存されている応 答とを対比する (ステップ S4393)。そして、両者が一致しない場合には、サーバ 410 Obについてのエントリをサーバ管理表 4201及び送信キュー 4203から削除した後に 、当該サーバ 4100bに対して再起動指示を送出する。これにより、ステップ S4311以
降の処理が再試行される。この時の送信キューを図 167に示す。
[0613] この時点で送信キュー 4203には送信状態が「保留解除」のクエリがなくなつたので 、応答送信処理部 4207は、サーバ 4100bをシステムに組み込むべくサーバ 4100b についてのサーバ管理表 4201の稼働状態を「active」に更新する(ステップ S4394 )。この時のサーバ管理表 4201を図 168に示す。なお、このステップ S4394の処理 は、前述のステップ S4144, S4242の処理に対応するものである。
[0614] このような同期化処理により、もともとシステムに組み込まれていたが再起動や障害 等のためにシステム力も切り離されたサーバであっても、新規のサーバであっても、 理論的には幾らでも追加できる。つまり、追加できるサーバ数に制限はない。
[0615] また、本実施の形態では、システム力も切り離されたサーバはスナップショット及び 差分情報に基づきデータベースの復元を行うが、該サーバにおける差分情報の処理 結果と、システムに組み込まれていた正常なサーバにおける処理結果とがー致しな い場合には、同期化処理が再試行される。これにより、サーバ間において処理要求 の処理順序が異なることにより各サーバのデータベースが非同期状態になることを未 然に防止できる。
[0616] なお、本実施形態では、クライアント 4500a及び 4500bからの処理要求のみ多重 化データベースシステムで処理する場合にっ 、て説明した力 データベース一致検 查装置 4600からの処理要求も同様に処理すればよい。これは、多重化データべ一 スシステムから見るとデータベース一致検査装置 4600もクライアントコンピュータの 1 つだからである。ところで、データベース一致検査装置 4600は、前述したように、定 期的に又は必要に応じてデータベース一致検査用の参照クエリを仲介装置 4200に 送信する。これにより、何らかの理由でデータベース 4101間でデータの矛盾が生じ た場合であっても、当該クエリによりデータベース 4101間の矛盾が検出され上記同 期化処理が実行される。これにより、データベース 4101間の同期をより確実に図るこ とがでさる。
[0617] 以上のように本実施の形態に係る多重化データベースシステムによれば、複数のト ランザクシヨンを並行処理しても各データベース間で矛盾の生じることがなく同期状 態を保つことができる。
[0618] (第 20の実施の形態)
本発明の第 20の実施の形態に係る多重化データベースシステムについて図面を 参照して説明する。本実施の形態が前述の第 19の実施の形態と異なる点は、仮想 サーバ 4800が 3台のサーバ 4100を備えていることにある。各装置の構成'動作等に ついては第 19の実施の形態と同様である。具体的には、本実施の形態と第 19の実 施の形態とでは、システムにサーバ 4100を組み込む際の同期化処理 (第 19の実施 の形態における図 144のステップ S4143及び図 146のステップ S4241)の動作が異 なり、他の動作については同じである。以下、この同期化処理について詳述する。
[0619] ここでは、 3台のサーバ 4100a〜4100cのうち 1台のサーバ 4100cがシステムから 切り離されている状態から、該サーバ 4100cをシステムに再び組み込む場合につい て図 169〜図 186を参照して説明する。
[0620] 初期状態にけるサーバ管理表 4201を図 174に示す。また、トランザクション管理表 4202は空であるものとする。送信キュー 4203は空であり図 175に示すような構造と なっている。
[0621] 図 169に示すように、クライアント 4500aが 172.17.1.1宛のトランザクション開始 SQL
(BEGIN)を含んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204 はそのパケットを受信する (ステップ S4401)。受信クエリ処理部 4204は、トランザク シヨンが開始されたことを検知し、トランザクション管理表 4202にクライアント 4500a の IPアドレスとトランザクション番号を登録する (ステップ S4402)。受信クエリ処理部 4204は、サーバ管理表 4201を参照して正常稼働中のサーバ 4100a及び 4100b について送信状態を「未送信」にして受信クエリを送信キュー 4203に入れる (ステツ プ S4403)。クエリ送信処理部 4205は、送信キュー 4203から当該クエリを取り出し、 対応するサーノ 4100a及び 4100b【こ転送し (ステップ S4404, S4405)、それぞれ 送信キュー 4203の送信状態を「送信完了」に更新する (ステップ S4406)。仲介装置 4200の正当性判定部 4206は、トランザクションが正常に開始されたことを通知する 応答ノ ケッ卜をサーノ 4100a及び 4100b力ら受信すると(ステップ S4407, S4408) 、各サーバ 4100a及び 4100bからの応答パケットの正当性を判定する。そして、応 答送信処理部 4207は正当な応答パケットの 1つをクライアント 4500aへ転送するとと
もに (ステップ S4409)、該応答を送信キュー 4203に保存する(ステップ S4410)。こ の時の送信キュー 4203を図 176に示す。
[0622] 次いで、クライアント 4500aが 172.17.1.1宛に、テーブル test— tableを更新する S QL (UPDATE)を含んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受信する(ステップ S4411)。受信クエリ処理部 4204は、サー バ管理表 4201を参照して正常稼働中のサーバ 4100a及び 4100bについて送信状 態を「未送信」にして受信クエリを送信キュー 4203に入れる (ステップ S4412)。この 時の送信キュー 4203を図 177に示す。
[0623] ここで、サーバ 4100cが再起動したものとする(ステップ S4413)。これにより、サー ノ lOOcのデータベース制御部 4102cは、データベース同期化要求(システムへの 組込要求)を仲介装置 4200へ送信する(ステップ S4414)。
[0624] データベース同期化要求を受信した同期化処理制御部 4208は、サーバ管理表 4 201を参照して同期化用のサーバ 4100を 1台選定する。ここでは、正常稼働中のサ ーバ 4100は 2台なので、何れか一方のサーバを所定の規則に従って選定する。本 実施の形態では、サーバ 4100bを同期化用サーバとして選定したものとする。同期 化処理制御部 4208は、サーバ管理表 4201のサーバ 4100bについての稼働状態 を「sync」に更新するとともに(ステップ S4415)、送信キュー 4203のサーバ 4100b について送信状態が「未送信」となっているエントリを「保留」に更新する (ステップ S4 416)。また、同期化処理制御部 4208は、同期化用のサーバ 4100bにおいて実行 中クエリの処理が完了したことを確認した後に、要求元のサーバ 4100cについて稼 働状態を「sync」でサーバ管理表 4201に追加するとともに (ステップ S4417)、送信 キュー 4203の送信状態の欄に当該サーバ 4100c用の列を追加する (ステップ S44 18)。ここで、当該サーバ 4100cの送信状態は全て「保留」に設定する。この時のサ ーバ管理表 4201及び送信キュー 4203を図 178,図 179に示す。なお、同期化処 理制御部 4208は、上記ステップ S4415〜S4418の処理は 1つの処理として取り扱 い、排他制御を行う。つまり、ステップ S4415〜S4418の処理中には、各ステップで アクセスするサーバ管理表 4201及び送信キュー 4203に対して、他の機能ブロック( 例えば受信クエリ処理部 4204など)からのアクセスを中断させる。
[0625] 次いで、同期化処理制御部 4208は、該サーバ 4100bにスナップショットの作成指 示を送出する(ステップ S4419)。スナップショット作成指示を受け取ったサーバ 410 Obのデータベース制御部 4102bは、データベース 4101bのスナップショットを作り出 す (ステップ S4420)。
[0626] 本実施の形態が第 19の実施の形態と大きく異なる点は、第 19の実施の形態では スナップショット作成中にはクライアント 4500からのクエリを処理できなかった力 本 実施の形態では処理可能である点である。すなわち、同期化処理制御部 4208が上 記ステップ S4415〜S4418の排他処理を終えると、図 170に示すように、クエリ送信 処理部 4205は、送信キュー 4203から送信状態が「未送信」のクエリを取り出し、対 応するサーバ 4100aに転送するとともに (ステップ S4421)、送信キュー 4203の送信 状態を「送信完了」に更新する (ステップ S4422)。仲介装置 4200の受信クエリ処理 部 4204は、 UPDATEが正常に処理されたことを通知する応答パケットをサーバ 41 00aから受信すると (ステップ S4423)、ここでは、正常稼働中のサーバ 4100が 1台 のみなので当該応答パケットを正当と判断し、応答送信処理部 4207は該応答パケ ットのクライアント 4500aへ転送するとともに (ステップ S4424)、該応答を送信キュー 4203に保存する(ステップ S4425)。
[0627] また、クライアント 4500bが 172.17.1.1宛のトランザクション開始 SQL (BEGIN)を含 んだパケットを送信すると、仲介装置 4200の受信クエリ処理部 4204はそのパケット を受信する (ステップ S4426)。受信クエリ処理部 4204は、トランザクションが開始さ れたことを検知し、トランザクション管理表 4202にクライアント 4500bの IPアドレスとト ランザクシヨン番号を登録する(ステップ S4427)。受信クエリ処理部 4204は、サーバ 管理表 4201を参照して正常稼働中のサーバ 4100aについて送信状態を「未送信」 にするとともに、同期化処理中のサーバ 4100b及び 4100cについて送信状態を「保 留」にして受信クエリを送信キュー 4203に入れる (ステップ S4428)。クエリ送信処理 部 4205は、送信キュー 4203から当該クエリを取り出し、送信状態が「未送信」である サーノ 4100a【こ転送し (ステップ S4429)、送信キュー 4203のサーノ 4100a【こつ!ヽ ての送信状態を「送信完了」に更新する (ステップ S4430)。仲介装置 4200の正当 性判定部 4206は、トランザクションが正常に開始されたことを通知する応答パケット
をサーバ 4100aから受信すると (ステップ S4431)、ここでは、正常稼働中のサーバ 4 100が 1台のみなので当該応答パケットを正当と判断し、応答送信処理部 4207は該 応答パケットのクライアント 4500bへ転送するとともに (ステップ S4432)、該応答を送 信キュー 4203【こ保存する(ステップ S4433)。この時の送信キュー 4203を図 180【こ 示す。
[0628] ここで、同期化用のサーバ 4100bがスナップショットの作成を完了したとする(ステツ プ S4434)。サーバ 4100bのデータベース制御部 4102bは、スナップショット作成が 完了すると、スナップショット作成完了通知を仲介装置 4200へ通知するとともに (ステ ップ S4435)、該スナップショットのサーバ 4100cへの転送を開始する(ステップ S44 36)。サーバ 4100cのデータベース制御部 4102cは、サーバ 4100bから受信したス ナップショットからデータベースを復元する(ステップ S4437)。
[0629] サーバ 4100bからスナップショット作成完了通知を受信すると、同期化処理制御部 4208は、該サーバ 4100bについて送信キュー 4203の送信状態が「保留」となって いるものを「保留解除」に更新する(ステップ S4438)。この時の送信キュー 4203を図 181〖こ示す。以降、各クライアント 4500から受信したクエリは、サーバ 4100aについ ては送信状態を「未送信」で、サーバ 4100bにつ ヽては送信状態を「保留解除」で、 サーバ 4100cについては送信状態を「保留」にして送信キュー 4203に入れる。これ により、クエリ送信処理部 4205は、送信状態が「保留解除」となったクエリを差分情報 として古いもの力も順にサーバ 4100bに送信する。
[0630] 具体的には、クエリ送信処理部 4205は、送信キュー 4203から UPDATEクエリを 取り出してサーバ 4100bに転送するとともに(ステップ S4439)、送信キュー 4203の 送信状態を「送信完了」に更新する (ステップ S4440)。仲介装置 4200の正当性判 定部 4206は、更新が正常に処理されたことを通知する応答パケットをサーバ 4100b 力も受信すると (ステップ S4441)、当該応答と、送信キュー 4203に保存されている 応答とを対比する (ステップ S4442)。そして、両者が一致しない場合には、ー且、サ ーバ 4100b及び 4100cについてのエントリをサーバ管理表 4201及び送信キュー 4 203から削除した後に、サーバ 4100bに対して再起動指示を送出する。これにより、 第 19の実施の形態で前述した手順によりサーバ 4100bがシステムに組み込まれる
ので、次いでサーバ 4100cに対して再起動指示を送出する。これにより、前記ステツ プ S4415以降の処理が再試行される。
[0631] ここで、クライアント 4500bが INSERTクエリを仲介装置 4200に送信すると (ステツ プ S4443)、前述したように、仲介装置 4200の受信クエリ処理部 4204は、サーバ 4 100aについては送信状態を「未送信」で、サーバ 4100bについては送信状態を「保 留解除」で、サーバ 4100cについては送信状態を「保留」で当該クエリを送信キュー に投入する(ステップ S4444)。この時の送信キュー 4203を図 182に示す。クエリ送 信処理部 4205は、送信キュー 4203から当該クエリを取り出し、送信状態が「未送信 」であるサーバ 4100aに対して転送するとともに (ステップ S4445)、送信キュー 420 3のサーバ 4100aについての送信状態を「送信完了」に更新する(ステップ S4446) 。正当性応答部 206は、 INSERTが正常に処理されたことを通知するパケットをサー ノ lOOaから受信すると (ステップ S4447)、ここでは、正常稼働中のサーバ 4100が 1台のみなので当該応答パケットを正当と判断し、応答送信処理部 4207は該応答 パケットをクライアント 4500bへ転送するとともに (ステップ S4448)、該応答を送信キ ユー 4203に保存する(ステップ S4449)。
[0632] 図 182に示すように、この時点では送信キュー 4203において送信状態が「保留解 除」になったクエリは、 BEGINクエリと INSERTクエリの 2つである。仲介装置 4200 は、前述のステップ S4439〜S4442と同様〖こして、当該 2つのクエリを処理する(ス テツプ S4450〜S4457)。
[0633] 以上でサーバ 4100bに対しては、全ての差分情報の転送が終了し (すなわち送信 キュー 4203から「保留解除」のクエリを全て送出し終わり)、且つ、差分情報としての クエリの処理が正常に処理されたことになるので、サーバ 4100aのデータベース 410 laとサーバ 4100bのデータベース 4101bの同期化が完了したことになる。そこで、 仲介装置 4200の応答送信処理部 4207は、サーバ 4100bをシステムに組み込むベ くサーバ 4100bについてのサーバ管理表 4201の稼働状態を「active」に更新する( ステップ S4458)。なお、システムへの組み込みのタイミングは、正常稼働中のサー ノ 100においてクエリの実行中であっても構わず、またトランザクションが継続中で あっても構わな 、点に留意された 、。
[0634] 以降、クライアント 4500からのクエリは、サーバ 4100a及びサーバ 4100bについて は送信状態を「未送信」で、サーバ 4100cについては送信状態を「保留」にして送信 キュー 4203〖こ入れる。具体的には、図 171〖こ示すよう〖こ、クライアント 4500aが 172.17.1.1宛のトランザクション確定 SQL (COMMIT)を含んだパケットを送信すると 、仲介装置 4200の受信クエリ処理部 4204はそのパケットを受信する(ステップ S44 59)。受信クエリ処理部 4204は、サーバ管理表 4201を参照して正常稼働中のサー ノ lOOa及び 4100bについては送信状態を「未送信」に、同期化処理中のサーバ 4 100cについては送信状態を「保留」にして受信クエリを送信キュー 4203に入れる( ステップ S4460)。この時の送信キュー 4203を図 183に示す。クエリ送信処理部 42 05は、送信キュー 4203から当該クエリを取り出し、対応するサーバ 4100a及び 410 Obに転送し (ステップ S4461, S4462)、それぞれ送信キュー 4203の送信状態を「 送信完了」に更新する (ステップ S4463)。仲介装置 4200の正当性判定部 4206は 、トランザクションが正常に COMMITされたことを通知する応答パケットをサーバ 41 00a及び 4100b力ら受信すると(ステップ S4464, S4465)、各サーノ 4100a及び 4 100bからの応答パケットの正当性を判定する。そして、応答送信処理部 4207は正 当な応答パケットの 1つをクライアント 4500aへ転送するとともに(ステップ S4466)、 該応答を送信キュー 4203に保存する(ステップ S4467)。また、 COMMITが正常に 完了したことから、トランザクションが終了したことが分力るので、応答送信処理部 42 07はトランザクション管理表 4202からこのトランザクションの登録を削除する(ステツ プ S4468)。
[0635] ここで、サーバ 4100cにおいてスナップショットからのデータベース 4101cの復元 が完了したものとする(ステップ S4469)。サーバ 4100cはデータベース 4101cの復 元が完了すると差分情報転送要求を仲介装置 4200に送信する (ステップ S4470)。
[0636] サーバ 4100cから差分情報転送要求を受信すると、同期化処理制御部 4208は、 要求元のサーバ 4100cにつ!/、て送信キュー 4203の送信状態が「保留」となって!/、る ものを「保留解除」に更新する(ステップ S4471)。この時の送信キュー 4203を図 18 4に示す。以降、各クライアント 4500から受信したクエリは、サーバ 4100a及びサー ノ 100bについては送信状態を「未送信」で、サーバ 4100cについては送信状態を
「保留解除」にして送信キュー 4203に入れる。これにより、クエリ送信処理部 4205は 、送信状態が「保留解除」となったクエリを差分情報として古 、もの力 順にサーバ 4 100cに送信する。
[0637] 具体的には、クエリ送信処理部 4205は、送信キュー 4203から BEGINクエリを取り 出してサーバ 4100cに転送するとともに (ステップ S4472)、送信キュー 4203の送信 状態を「送信完了」に更新する (ステップ S4473)。仲介装置 4200の正当性判定部 4 206は、トランザクションが正常に開始されたことを通知する応答パケットをサーバ 41 00cから受信すると (ステップ S4474)、当該応答と、送信キュー 4203に保存されて いる応答とを対比する (ステップ S4475)。そして、両者が一致しない場合には、サー ノ lOOcについてのエントリをサーバ管理表 4201及び送信キュー 4203から削除し た後に、当該サーバ 4100cに対して再起動指示を送出する。これにより、ステップ S4 415以降の処理が再試行される。
[0638] サーバ 4100cへの差分情報転送中にクライアント 4500bから UPDATEクエリを受 信すると(ステップ S4476)、受信クエリ処理咅4204は、サーノ 4100a及び 4100b につ 、ては送信状態を「未送信」で、サーバ 4100cにつ 、ては送信状態を「保留解 除」で当該クエリーを送信キュー 4203に投入する (ステップ S4477)。この時の送信 キュー 4203を図 185に示す。クエリ送信処理部 4205は、送信キュー 4203から当該 クエリを取り出し、送信状態が「未送信」であるサーバ 4100a及び 4100bに転送し (ス テツプ S4478, S4479)、それぞれのサーノ 4100a及び 4100b【こつ!/、て送信キュ 一 4203の送信状態を「送信完了」に更新する (ステップ S4480)。正当性判定部 42 06は、各サーバ 4100a及び 4100bから UPDATEが正常したことを通知するバケツ トを受信すると (ステップ S4481, S4482)、各応答の正当性を判定して正当な応答 の 1つをクライアント 4500bに返すとともに (ステップ S4483)、該応答を送信キュー 4 203に保存する(ステップ S4484)。
[0639] 全ての差分情報の転送が終了し (すなわち送信キュー 4203から「保留解除」のタエ リを全て送出し終わり)、且つ、差分情報としてのクエリの処理が正常に処理された時 点で、サーバ 4100aのデータベース 4101aとサーバ 4100cのデータベース 4101c の同期化が完了するので、サーバ 4100cをシステムに組み込むべくサーノ lOOc
についてのサーバ管理表 4201の稼働状態を「active」に更新する。なお、システム への組み込みのタイミングは、正常稼働中のサーバ 4100においてクエリの実行中で あっても構わず、またトランザクションが継続中であっても構わない点に留意されたい
[0640] 図 185の例では、まず、トランザクション IDが 5番の UPDATEクエリカ トランザクシ ヨン IDが 6番の INSERTクエリについて、前述のステップ S4472〜S4475と同様の 処理を行う。以下、図 185の例における、トランザクション IDが 5番の COMMITクエリ と、トランザクション IDが 6番の UPDATEクエリの処理につ!、て詳述する。
[0641] クエリ送信処理部 4205は、送信キュー 4203力ら COMMITクエリを取り出してサ ーバ 4100cに転送するとともに (ステップ S4490)、送信キュー 4203の送信状態を「 送信完了」に更新する (ステップ S4491)。仲介装置 4200の正当性判定部 4206は 、トランザクションが確定したことを通知する応答パケットをサーバ 4100cから受信す ると (ステップ S4492)、当該応答と、送信キュー 4203に保存されている応答とを対 比する(ステップ S4493)。そして、両者が一致しない場合には、サーノ lOOcにつ いてのエントリをサーバ管理表 4201及び送信キュー 4203から削除した後に、当該 サーバ 4100cに対して再起動指示を送出する。これにより、ステップ S4415以降の 処理が再試行される。
[0642] この時点でトランザクション ID5のトランザクションは全てのサーノ 100において処 理が終了し、且つ、送信キュー 4203にはトランザクション ID5に属する各クエリは全 てのサーバ 4100a, 4100b, 4100cについて送信状態が「送信完了」となったので、 応答送信処理部 4207は、当該トランザクションに属するクエリのエントリを送信キュー 4203力ら肖 IJ除する(ステップ S4494)。この時の送信キュー 4203を図 186に示す。
[0643] 次いで、図 173に示すように、クエリ送信処理部 4205は、送信キュー 4203から UP DATEクエリを取り出してサーバ 4100cに転送するとともに(ステップ S4495)、送信 キュー 4203の送信状態を「送信完了」に更新する (ステップ S4496)。仲介装置 420 0の正当性判定部 4206は、 UPDATEが正常に処理されたことを通知する応答パケ ットをサーバ 4100cから受信すると (ステップ S4497)、当該応答と、送信キュー 420 3に保存されている応答とを対比する (ステップ S4498)。そして、両者が一致しない
場合には、サーバ 4100cについてのエントリをサーバ管理表 4201及び送信キュー 4 203から削除した後に、当該サーバ 4100cに対して再起動指示を送出する。これに より、ステップ S4415以降の処理が再試行される。
[0644] この時点で送信キュー 4203には送信状態が「保留解除」のクエリがなくなつたので 、応答送信処理部 4207は、サーバ 4100cをシステムに組み込むべくサーバ 4100c についてのサーバ管理表 4201の稼働状態を「active」に更新する(ステップ S4499 ) oなお、このステップ S4499の処理は、第 1の実施形態で前述したステップ S4144 , S4242の処理に対応するものである。
[0645] 以上のように本実施の形態では、第 19の実施の形態と比較して、同期化処理にお V、て実施されるスナップショットの作成中にもクライアントに対してサービス提供を維 持できるという効果を有する。他の作用'効果については第 19の実施の形態と同じで ある。
[0646] なお、本実施の形態では、スナップショットを作成する同期化用のサーバ 4100bと 、システムに再び組み込まれるサーバ 4100cとに対して、それぞれ独立したタイミン グで差分情報を転送していたが、サーバ 4100cから差分情報転送要求があった際 に両サーバ 4100b, 4100cに同一の差分情報を転送するようにしてもよい。
[0647] また、本実施の形態では、同期化処理用サーバ 4100bにおける差分情報の処理 結果が、正常稼働中のサーバ 4100aでの処理結果と一致しない場合には、当該サ ーバ 4100bだけでなくサーバ 4100cに対する処理を中断し、第 19の実施の形態の 手法を用いて当該サーバ 4100bのみをシステムに組み込み、その後にサーバ 4100 cをシステムに組み込む処理を再試行していた。一方、この変形例として、サーバ 41 00cに対する処理を継続してサーバ 4100cをシステムに組み込み、その後にサーバ 4100bをシステムに組み込むようにしてもよい。この方法では、クライアント 4500への サービス提供を継続できる点、サーバ 4100cの同期化処理を無駄にやり直す必要が な 、と 、う点で好適である。
[0648] 以上、本発明の実施形態につ!、て詳述したが、上記実施の形態は例示的なもので あり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に 示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれる
ものである。なお、以下の各変形例は適宜組み合わせて上記各実施の形態に適用 できる。
[0649] 上記実施の形態では、同期化処理の再試行を行う際には、新規サーバ 4100の再 起動から再試行していたが、再起動は行わずに、新規サーバ 4100から仲介装置 42 00へのデータベースサーバ同期化要求 (第 1の実施形態におけるステップ S4312, 第 20の実施の形態におけるステップ S4414)から再試行するようにしてもよい。
[0650] また、上記実施の形態では、同期化処理の再試行を行う際にはスナップショットを 再度作成し直して ヽたが、再試行前に作成したスナップショットを用いて同期化処理 を行ってもよい。これにより、再試行時の同期化処理時間を短縮化できる。なお、この 方法を実現するためには、上記実施形態のごとく送信キュー 4203に差分情報として 記憶しているクエリを適宜削除するのではなぐ同期化が完了するまでに保持してお く必要がある。
[0651] また、上記実施の形態では、送信状態力 ^保留解除」となっているクエリを送信キュ 一 4203から取り出して差分情報としてサーバ 4100に対して転送し、該転送中にクラ イアント 4500からクエリを受信すると、当該サーバ 4100についての送信状態を「保 留解除」にして送信キュー 4203に投入する処理を行っている。そして、送信状態が「 保留解除」となっているクエリが全てサーバ 4100において処理された後に当該サー ノ 100をシステムに組み込む処理を行っている。このような処理では、クライアント 4 500からのクエリ受信頻度が高いとサーバ 4100のシステムへの組み込みに時間を 要することが考えられる。そこで、例えば送信キュー 4203に送信状態が「保留解除」 として記憶されているクエリが所定数以下となったら、受信クエリ処理部 4204が送信 キュー 4203へのクエリの投入を一停止するなど所定条件で差分情報の転送処理を 優先させるようにしてもよい。
[0652] また、上記実施の形態では、クライアント 4500から受信した全てのクエリを送信キュ 一 4203に保存しておき、同期化処理時には該送信キュー 4203に保存されているク エリを差分情報としてサーバ 4100に転送している力 SELECTクエリのようにデータ ベース 4101の更新を行わない参照系クエリについては差分情報としてのサーバ 41 00への転送を行わないようにしてもよい。これにより、同期化処理の処理時間を短縮
化できる。
[0653] さらに、 UPDATEクエリのようにデータベース 4101の更新を行う更新系クエリのみ を転送し、参照系クエリやトランザクション制御クエリ(BEGIN, ROLLBACK等)の 転送を行わないようにしてもよい。そして、当該更新系クエリを差分情報としてサーバ 4100に転送する際には、サーバ 4100において AutoCommitモードで当該クエリ を処理させるようにする。これにより、更に同期化処理の短縮化及び記憶容量の節約 が可能となる。ただし、この場合にはサーバ 4100に対してクエリを転送する順序が、 正常稼働中のサーバ 4100で処理された順序と一致することを保証する必要がある。 これを実現するためには、各更新系クエリに対する正常稼働中サーバ 4100からの処 理応答力も正常稼働中サーバ 4100における各クエリの実際の処理順序を把握し、 当該順序に従つて各クエリを転送すればよ 、。
[0654] また、上記実施の形態では、サーバ 4100においてトランザクションが継続中であつ ても仲介装置 4200がサーバ 4100に対してスナップショットの作成指示を送信してい た力 継続中のトランザクションが無くなった時点でスナップショットの作成指示を送 信するようにしてもよい。これにより、データベース 4101として、トランザクションの継 続中にはスナップショットの作成ができないものや、トランザクションの継続中であって もスナップショットの作成は開始できるが当該スナップショットにトランザクションに係る クエリが反映されるか否かが不確定なものを利用することができる。また、前述の第 1
9の実施の形態においてはスナップショットの作成中にはクライアント 4500へのサー ビスが停止するので、クライアント 4500によってはトランザクション失敗と判断して RO LLBACKクエリを仲介装置 4200に送信する場合がある。本変形例では、このような 余計な ROLLBACK処理を未然に防止できる。
[0655] また、上記の実施の形態では、同期化処理中に送信キュー 4203から各クエリを削 除するタイミングは、当該クエリが属するトランザクションが全てのサーバ 4100におい て終了した時点としていた。この方法では、通常動作時におけるクエリの削除タイミン グと同じなので実装が容易であるという利点がある。一方、同期化処理中には、送信 キュー 4203のクエリが差分情報としてサーバ 4100において処理されたら随時削除 するようにしてもよい。また、同期化処理が完了した後に一括して削除するようにして
も良い。
[0656] また、上記の実施の形態では、クエリのバッファリング機能と同期化処理用の差分 情報の記憶機能とを送信キュー 4203に統合させていたが、それぞれ機能毎に記憶 手段を設けるようにしてもよい。なお、この場合には、サーバ 4100が 3台構成となって いるときには、システムに組み込もうとするサーバ 4100と、同期化処理用サーバ 410 0とで差分情報記憶部を共有できるので、記憶容量を節約できると!、う点で有利であ る。
[0657] また、上記の実施の形態に加えて更に、各サーバ 4100にデータベース 4101ゃデ ータベース制御部 4102の障害を検出する障害検出手段を設けてもよい。この障害 検出手段は、データベース 4101やデータベース制御部 4102の動作を定期的に監 視することで障害を検出し、障害検出時には仲介装置 4200に障害発生を通知する 。これにより、仲介装置 4200では各サーバ 4100やネットワークでの障害発生検出を より確実且つ効率的に行うことができる。
[0658] また、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はない。
すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンノ ィラオプショ ン、ハードウェアかソフトウェア力 などが異なっていてもよい。サーバには、 Postgre SQLなどのフリーソフトウェアや Oracleなどの市販のソフトウェア、独自開発のソフト ウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サーバ 4 100aは PostgreSQLでサーバ 4100bは Oracleでも良い。
[0659] DBMSとしては、巿中品(例えば、 Oracleや PostgreSQL)を使う場合は、データ ベース制御部 4102は、データベース管理部とデータベースサーバ管理部に機能を 分けることによって、巿中品を無改造で使うことができる。データベース管理部は、デ ータベース 4101を直接操作するもので、例えば PostgreSQLの場合は postmaste rや postgresに相当する。データベースサーバ管理部は、仲介装置 4200とデータ ベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを 同期化する際のデータベース 4101のスナップショットを作成したり、そのスナップショ ットを他のサーバへ転送したりする処理を行う。また、上記データベースサーバ管理 部を仲介装置 4200に配置しても良い。このような構成にすることで、冗長化されてい
な 、通常使用して 、るデータベースシステムにお!/、て、サーバ 4100とクライアント 45 00の間に中間装置 200を配置し、さらにサーバ 4100を増設するだけでサーバ 410 0の冗長化を実現できる。これは既存のデータベースシステムをなるベく変更せず簡 単に冗長化した 、場合に好適である。
[0660] 上記実施の形態では、スナップショットの作成には DBMSサーバの種類に依存し な 、汎用のツール (同期化用サーバから SELECTクエリで全てのデータを取り出す ツール)を用いることを前提とし、また、新規サーバでのリストアにも汎用のツール (新 規サーバへ INSERTクエリで全てのデータを入れるツール)を用いること前提として いた。これにより、 DBMSサーバの種類に依存することなく本発明を実施できるだけ でなぐ異種 DBMS間(例えば PostgreSQLと Oracle)でのクエリ翻訳手段を併用 することで同一システム内に異種 DBMSを混在させることができる。異種 DBMSサ ーバが混在したシステムとしては、例えば一台の Oracleと二台の PostgreSQLを使 つた三重化システムが挙げられる。このように、高価なライセンスを必要とするサーバ と、ライセンスが低廉又は無料のサーバを混在させることで、高価なライセンスを必要 とするサーバの冗長化を低コストで実現できる。
[0661] また、上記実施の形態では、汎用のスナップショット作成ツールを用いることを前提 としていたため、第 19の実施の形態においてはスナップショット作成開始力も作成完 了までは新 、クエリを実行させて 、な力つた。これは該スナップショット作成ツール では、スナップショット作成開始以降に COMMITされる更新クエリがスナップショット に反映されるか否かが確定しないためである。これにより、データベースサイズが大き い場合には、新しいクエリを実行できない時間が長期化するおそれがある。そこで、 スナップショット作成中でもクエリを実行でき、且つ、スナップショット作成開始以降に COMMITされる更新クエリはスナップショットに反映されな 、ことが保証されて 、るッ ールを用いると、スナップショット作成中でもクエリを実行できる。このようなツールは 一般的には DBMSサーバ固有のツールとして提供されている。例えば、 PostgreS QLでは、 pg— dumpや PostgreSQL8. 0で機能追加される PITR(Point In Time Recovery)機能が挙げられる。
[0662] スナップショット作成ツールとして pg— dumpを用いた場合の動作につ!、て上記第
1の実施形態の変形例として説明する。この場合、図 147におけるステップ S4317が 「pg— dumpの実行指示」に相当し、ステップ S4318力 ¾g— dumpの開始、ステップ S4322が pg— dumpの完了となる。汎用ツールを用いた上記第 1の実施形態ではス テツプ S4309の UPDATEクエリはスナップショット作成完了まで実行できな 、が、 pg —dumpを用いた場合はステップ S4318の直後に実行できる。また、ステップ S4319 の BEGINクエリは、ステップ S4338の UPDATEクエリと同様に、仲介装置 4200が 受信すると即座にサーバ 4100aへ転送され処理される。このように、 pg— dumpを用 Vヽればスナップショット作成中でもクエリの処理を全く中断する必要はな 、。
[0663] また、上記実施の形態では、システムへの組み込み要求 (新規サーバのデータべ ース同期化要求)は当該新規サーバ 4100のデータベース制御部 4102が仲介装置 4200へ送信している力 さらに保守端末などの他の装置力も送信可能にしてもよい し、オペレータが仲介装置 4200に直接指示可能としても良い。
[0664] さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが 、ハードウェアで実装しても良い。
[0665] また、上記実施の形態では、仮想サーバ 4800を構成する仲介装置 4200は 1台の みであつたが、複数台設けて冗長性を持たせることにより、より可用性の高い構成と することも可能である。仲介装置を多重化させる技術については、例えば本願出願 人による特開 2003— 345679号公報に記載されたものなどを用いればよい。
[0666] また、上記実施の形態では、クライアント 4500とサーバ 4100はそれぞれ別のネット ワーク 4300, 4400に属するようにし、 ί中介装置 4200力 S両 ッ卜ワーク 4300, 4400 を仲介するようなネットワーク構成とした力 本発明ではネットワーク構成は不問であ る。例えば、 1つのネットワークにクライアント 4500,サーバ 4100,仲介装置 4200が 属するように構成してちょい。
[0667] さらに、上記各実施の形態では、データベース一致検査装置 4600を多重化デー タベースシステムの外側、すなわちネットワーク 4400に接続していた力 多重化デー タベースシステムの内側のネットワーク 4300にデータベース一致検査装置 4600を 接続するようにしてもよ ヽ。
[0668] 上述の第 1〜11の実施の形態は障害で切り離されたサーバまたは新規のサーバを
、サービスを止めずにシステムに追加するものであり、第 12〜20の実施の形態は、 複数の DBMSが並列処理をしている際に同期が崩れてしまったことを検知し、それ を契機に再び同期状態へ戻すものであった。このうち、第 12〜20の実施の形態に お!、ては、同期が崩れたことを仲介装置が各サーバからの応答の有無をチェックし、 タイマ監視などにより無応答と判断することにより検知する方法と、各サーバからの応 答を比較してチェックし、不一致を検出することにより検知する方法がある。
[0669] これらの各実施の形態においては、他にも種々のバリユエーシヨンがある。例えば、 上述の各実施の形態においては、データベース制御部がサーバの代わりに仲介装 置にあっても良い。これは例えば、図 187に示すように、データベース制御部 4102a 及びデータベース制御部 4102bがサーバ 4100a及びサーバ 4100bの代わりに仲 介装置 4200にあっても良い。
[0670] 更にこの場合には、図 188に示すように、データベース制御部 4102a及び bにあつ たデータベース 4101へのデータの送信機能をクエリ送信処理部 4205が備え、デー タベース制御部 4102a及び bにあったデータベース 4101a及び bからの応答受信機 能を正当性判定部 4206が備え、また、データベース制御部 4102a及び bにあった 同期化処理機能を同期化処理制御部 4208が備える構成としても良い。
[0671] この場合、データベース 4101aやデータベース 4101bのスナップショットはネットヮ ークを経由して仲介装置へ送信され、仲介装置 4200の同期化処理制御部 4208が これを受信し、格納する。この処理の流れは、例えば、図 188及び図 189に示すもの である。なお、図 188及び図 189のステップ A〜C以外の処理は上述の処理と大きく 異なるものではない。
[0672] この処理の流れにお!、ては、まず、正常稼動して!/、るサーバ上のデータベース 41 Olaと、新たに追加するサーバである新規サーバ上で稼動するデータベース 4101b とがある場合に、仲介装置 4200の同期化処理制御部 4208は、同期化要求と共に 追加対象の新規サーバの指定を受け付ける(図 188及び図 189のステップ A)。この 受付は、他の端末装置力もネットワークを経由して行っても、ユーザから仲介装置 42 00の受付部に直接受け付けても、あるいは、正当性判定部 4206が異常を検知した 際に正当性判定部 4206が同期化要求を出力しても良い。
[0673] 次に、仲介装置 4200の同期化処理制御部 4208は、ネットワークを経由してサー バ 4100a上のデータベース 4101aをアクセスし、データベース 4101aのスナップショ ットを得る(図 188及び図 189のステップ B)。そして、仲介装置 4200の同期化処理 制御部 4208は、得られたスナップショットを記憶領域に格納する。
[0674] 次に、仲介装置 4200の同期化処理制御部 4208は、記憶領域からスナップショット を読み出し、ネットワークを経由してサーバ 4100bへ読み出したスナップショットを送 信し、データベース 4101bへの格納を要求する(図 188及び図 189のステップ C)。 サーバ 4100bは受信したスナップショットをデータベース 4101bへ格納し、上述の処 理と同様に同期化処理を行う。
[0675] このように、データベース制御部がサーバの代わりに仲介装置にある場合には、サ ーバ側から仲介装置へ差分情報の転送を要求することはなくなるため、図 149のス テツプ 4354などの処理は必要がない。さらに、サーバやクライアントにおいては既存 の DBMSやクライアントプログラムが実行されるのみである。即ち、既存のハードゥエ ァゃソフトウェアの構成に対して大きな変更を行う必要が無ぐシステムに仲介装置を 加えるだけで簡単に上述の各実施の形態が実現できる効果がある。
[0676] また、上述の各実施の形態において、差分情報蓄積部をサーバ側に配置しても良 い。この場合、サーバ 4100a等には差分情報を管理する機能ブロックが必要になる。 この機能ブロックは上述の実施の形態においては、仲介装置にあったものである。
[0677] 図 190は差分情報蓄積部をサーバ側に配置する場合における処理の流れを表し ている。差分情報を管理する機能ブロックは正常時にはクエリを蓄え、同期化処理時 には差分情報を同期化対象のサーバへ転送する。サーバ 4100bからサーバ 4100a への差分情報転送要求(図 190のステップ S 5001 )を契機に差分情報をサーバ 410 Oaからサーバ 4100bへ転送し、全ての差分情報を転送し終わった後、サーバ 4100 aからのシステム追加要求(図 190のステップ S5002)によってサーバ 4100bはシス テムに追カ卩される。
[0678] このように差分情報蓄積部をサーバ側に配置する場合には、仲介装置力 サーバ へ差分情報を転送する必要がなくなる。このため、同期化処理中の仲介装置と、サ ーバとの間の通信処理におけるトラフィックの増加を抑止することができる効果がある
[0679] また、上述の各実施の形態においては、スナップショットの転送後であって、更に、 同期処理の対象となるデータベースのスナップショットからの復元の完了を待った後 に差分情報が転送される。このため、同期処理の開始から差分情報の転送までに長 い時間を要し、かつ、多くのクエリが発生する場合などにおいては、差分情報の容量 も大きなものとなることがありえる。このような大きな容量の差分情報の送受信が一度 に発生すると、仲介装置と、サーバとの間の通信処理におけるトラフィックが増大し、 他のクエリに対するレスポンスが遅れるといった問題が発生することがある。このため 、各サーバは、上述の各実施の形態において、差分情報を一時格納するためのバッ ファを記憶領域中に備えても良い。
[0680] 図 191は各サーバが差分情報を一時格納するためのバッファを記憶領域中に備え る場合における同期処理の流れを表している。上述の各実施の形態との差異は、上 述の実施の形態においてはスナップショットからのデータベースの復元を待って差分 情報を送信している力 図 191においては、スナップショットからのデータベースの復 元を待っていないことである。例えば、図 191のステップ S5011の BEGINはスナップ ショットからのデータベースの復元中であっても、ステップ S5015において送信される 。他のステップ S5012の UPDATEも同様に、ステップ S5016において送信されて いる。
[0681] なお、このようにスナップショットからのデータベースの復元を待つことなぐ差分情 報の転送を行う場合であっても、データベースのスナップショットからの復元完了後に 差分情報を適用するという順序自体には変更がない。このため、スナップショットから のデータベースの復元完了までの間、サーバにおいてバッファに差分情報を蓄積す る。
[0682] このように、各サーバが差分情報を一時格納するためのバッファを記憶領域中に備 える場合においては、一度に大量の差分情報が転送されることがなくなるため、仲介 装置と、サーバとの間の通信処理におけるトラフィックの増大が緩やかのものとなり、 他のクエリに対するレスポンスが遅れるといった問題の発生を抑止することができる効 果が得られる。
[0683] また、上述の各実施の形態においては、サーバと、仲介装置とは別々の装置として 動作していたが、仲介装置の機能をサーバにおいて実現しても良い。図 192は仲介 装置の機能をサーバ 1100aにおいて実現した場合の機能ブロック図である。この場 合の動作シーケンスは、サーバ 1100aと、仲介装置の間のネットワークを介した通信 がサーバ 1100a内でやり取りされる以外は上述のものと同様である。
[0684] また、上述の各実施の形態において、仲介装置を複数設けても良い。仲介装置は 上述の各実施の形態においてはフロントエンドサーバ的な機能を備えるため、クライ アントが多数ある場合やクライアントからのクエリの量が多い場合にはクエリの受付を 分散処理できる効果がある。
[0685] また、第 5の実施の形態において、図 35に示す正常稼働中のサーバ 1100a及び 新規サーバ 1100bの双方の送信状態を「未送信」で送信キュー 1206へ記憶する処 理については、「保留」として送信キュー 1206へ記憶しても良い。全ての差分情報が 処理された後に新規サーバ 1100bがシステムに追加されるため、クライアントへの応 答時間の増大を防ぐことができる。
産業上の利用可能性
[0686] 本発明によれば、データベースサーバに障害が発生しても少ない同期化用データ で復旧後のデータベースサーバの同期化を図ることができる。また、システム全体を ダウンさせることなく、データベースサーバのデータ記憶状況に拘わらずデータべ一 スサーバを任意に切り離し又は組み込むことができる。