以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理システムの構成例および処理例を示す図である。図1に示す情報処理システムは、情報処理装置1,2を含む。情報処理装置1は、データベース1aを管理する装置であり、情報処理装置2は、データベース2aを管理する装置である。なお、データベース1aは、情報処理装置1の外部に接続された記憶装置に記憶されていてもよく、同様にデータベース2aは、情報処理装置2の外部に接続された記憶装置に記憶されていてもよい。
この情報処理システムでは、データベース1a,2aのいずれもマスタとして運用されるマルチマスタ方式のデータベースレプリケーションが実現される。すなわち、情報処理装置1によってデータベース1aが更新されたとき、その更新内容がデータベース2aにも反映される。また、情報処理装置2によってデータベース2aが更新されたとき、その更新内容がデータベース1aにも反映される。さらに、情報処理装置1,2は、データベース1a,2aの内容が一致するように同期制御を行う。この同期制御では、データベース1a,2aの更新権を情報処理装置1,2の一方のみが有するように制御することで、データベース1aとデータベース2aとの間におけるデータの整合性が保証される。
情報処理装置1は、次のような処理を実行する。まず、更新権を有する第1の状態では、情報処理装置1は、データベース1aの更新要求に応じて、データベース1aを更新するとともに、データベース1aの更新内容をデータベース2aに反映させるための同期要求を情報処理装置2に送信する。
一方、更新権を有さない第2の状態では、情報処理装置1は、データベース1aの更新要求が発生したとき、データベース1aの更新を抑止するとともに、更新権の獲得要求を情報処理装置2に送信する、また、第2の状態では、情報処理装置1は、情報処理装置2によるデータベース2aの更新内容をデータベース1aに反映させるための同期要求を情報処理装置2から受信したとき、受信した同期要求に基づいてデータベース1aを更新する。さらに、第2の状態では、情報処理装置1は、更新権の獲得を許可する許可通知を情報処理装置2から受信したとき、更新権を有する上記の第1の状態に遷移する。
そして、情報処理装置1は、情報処理装置2から上記の獲得要求を受信したとき、情報処理装置1が更新権を有する第1の状態である場合、これを拒否し、情報処理装置1が更新権を有さない第2の状態である場合には、許可通知を情報処理装置2に送信する。
情報処理装置2も、上記と同様の処理を実行する。このような情報処理装置1,2の処理により、データの整合性が保証されたデータベース1a,2a間の同期を、簡易な処理によって実現できる。
以下、図1を用いて、情報処理装置1,2の状態に応じた処理例について説明する。まず、図1の上段に示すように、情報処理装置1が更新権を有する状態であり、情報処理装置2が更新権を有さない状態であるとする。
更新権を有する情報処理装置1は、データベース1aの更新要求に応じて、データベース1aを更新する(ステップS1a)とともに、データベース1aの更新内容をデータベース2aに反映させるための同期要求3aを情報処理装置2に送信する(ステップS1b)。なお、データベース1aの更新要求は、例えば、データベース1aを利用して処理を実行するアプリケーションから発生される。
一方、更新権を有さない情報処理装置2は、同期要求3aを受信すると、同期要求3aに基づいてデータベース2aを更新する(ステップS1c)。これにより、データベース1a,2aが同期される。また、情報処理装置2は、データベース2aの更新要求が発生したとき、データベース2aの更新を抑止する(ステップS1d)とともに、更新権の獲得要求4aを情報処理装置1に送信する(ステップS1e)。なお、データベース2aの更新要求は、例えば、データベース2aを利用して処理を実行するアプリケーションから発生される。
情報処理装置1は、更新権を有する状態において獲得要求4aを受信した場合、これを拒否する。例えば、情報処理装置1は、更新権の獲得を拒否する(許可しない)ことを示す拒否通知5を情報処理装置2に送信する(ステップS1f)。
次に、図1の中段に示すように、情報処理装置1が更新権を有さない状態に遷移した(更新権を放棄した)とする。なお、情報処理装置1は、例えば、データベース1aの更新処理を含むトランザクションが終了すると、更新権を有さない状態に遷移する。あるいは、情報処理装置1は、更新権を有する状態であった期間における情報処理装置2からの獲得要求の受信状況に基づいて、更新権を有さない状態に遷移するタイミングを決定してもよい。
情報処理装置1は、更新権を有さない状態では、データベース1aの更新要求が発生したとき、データベース1aの更新を抑止する(ステップS2a)。一方、情報処理装置2において、データベース2aの更新要求に応じたデータベース2aの更新が抑止され(ステップS2b)、更新権の獲得要求4bが送信されたとする(ステップS2c)。情報処理装置1は、更新権を有さない状態において獲得要求4bを受信すると、更新権の獲得を許可する許可通知6を情報処理装置2に送信する(ステップS2d)。
情報処理装置2は、許可通知6を受信することにより、図1の下段に示すように更新権を有する状態に遷移する(更新権を獲得する)。更新権を有する状態では、情報処理装置2は、データベース2aの更新要求に応じて、データベース2aを更新する(ステップS3a)とともに、データベース2aの更新内容をデータベース1aに反映させるための同期要求3bを情報処理装置1に送信する(ステップS3b)。情報処理装置1は、同期要求3bに基づいてデータベース1aを更新する(ステップS3c)。
以上の情報処理システムでは、情報処理装置1,2の一方のみが更新権を所有し、更新権を有する情報処理装置のみが、自装置の配下にあるデータベースの更新と、その更新内容を他方のデータベースに反映させるための同期要求の送信とを実行できる。また、このような情報処理装置1,2の状態制御を、一方の情報処理装置が更新権の獲得要求を受信し、それを受信した他方の情報処理装置が自装置の状態に応じて返答する、という簡単な処理によって実現できる。このとき、更新権の獲得要求を受信した情報処理装置は、自装置の配下にあるデータベースの更新を抑止した状態、すなわち更新権を有さない状態でのみ、許可通知を返信する。これにより、データベース1a,2aのそれぞれにおけるデータ更新の順序性を保証し、データベース1a,2a間のデータの整合性を正確に維持することができる。したがって、データの整合性が保証されたデータベース1a,2a間の同期を、簡易な処理によって実現できる。
なお、前述した、更新連番値を用いたデータベースシステムでは、一方のデータベースの更新時に更新連番値が算出され、更新されたデータレコードを他方のデータベースに適用する際に、更新連番値の比較によって適用可否が判定される。しかし、本実施の形態の情報処理装置1,2は、自装置が更新権を有していれば、自装置の配下のデータベースの更新要求を受けたとき、単にそのデータベースを更新するだけである。また、情報処理装置1,2は、他方の情報処理装置から同期要求を受けたとき、無条件で、その同期要求に基づいて自装置の配下のデータベースを更新できる。したがって、簡易な処理でデータベース1a,2a間のデータの整合性を保証できる。
さらに、本実施の形態では、更新権の獲得要求とその応答が情報処理装置1,2間で送受信されることによって、情報処理装置1,2間で更新権が受け渡される。このため、例えば、更新権の管理を情報処理装置1,2とは別の装置で管理する場合と比較して、装置のコストや設置面積を抑制できる。また、情報処理装置1,2の一方が更新権を管理する場合と比較して、管理のための処理を情報処理装置1,2間で分散させることができる。また、更新権の獲得要求とその応答の送受信によって、情報処理装置1,2がそれぞれ独立して自装置の更新権の有無を管理するので、管理処理効率を高めることができる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係る情報処理システムの構成例を示す図である。図2に示す情報処理システムは、データベース(DB)サーバ100,200とアプリケーション(APL)サーバ150,250とを含む。
アプリケーションサーバ150はデータベースサーバ100と接続され、アプリケーションサーバ250はデータベースサーバ200と接続されている。また、データベースサーバ100とデータベースサーバ200とはネットワーク300を介して接続されている。ネットワーク300は、例えばLAN(Local Area Network)である。また、データベースサーバ100,200は遠隔地に配置されていてもよく、その場合ネットワーク300はWAN(Wide Area Network)であってもよい。
データベースサーバ100は、データベース111を管理するサーバ装置である。アプリケーションサーバ150は、ユーザアプリケーションのプログラムを実行するサーバ装置である。ユーザアプリケーションの処理には、データベース111を利用する処理が含まれる。アプリケーションサーバ150は、ユーザアプリケーションの処理により、データベースサーバ100にコマンドを送信することで、データベース111を利用することができる。例えば、コマンドの送信により、アプリケーションサーバ150は、データベース111の更新やデータベース111からのデータ読み出しを実行できる。データベースサーバ100は、アプリケーションサーバ150からのコマンドに応じたデータベース111に関する処理を実行し、アプリケーションサーバ150に応答する。
同様に、データベースサーバ200は、データベース111を管理するサーバ装置であり、アプリケーションサーバ250は、ユーザアプリケーションのプログラムを実行するサーバ装置である。アプリケーションサーバ250は、ユーザアプリケーションの処理により、データベースサーバ200にコマンドを送信することで、データベース211を利用することができる。
また、データベース111とデータベース211との間では、一方のデータベースの更新内容が他方のデータベースにも反映されるように制御される。データベースサーバ100は、アプリケーションサーバ150からデータベース111の更新要求を受けると、データベース111を更新するとともに、その更新内容を含むジャーナルを生成してデータベースサーバ200に送信する。データベースサーバ200は、受信したジャーナルに基づいて、データベース111の更新内容をデータベース211に反映させる。同様に、データベースサーバ200は、アプリケーションサーバ250からデータベース211の更新要求を受けると、データベース211を更新するとともに、その更新内容を含むジャーナルを生成してデータベースサーバ100に送信する。データベースサーバ100は、受信したジャーナルに基づいて、データベース211の更新内容をデータベース111に反映させる。
これにより、マルチマスタ構成のデータベースレプリケーションシステムが構築される。同一内容のデータベースが複数箇所に配置されることで、データロスの可能性が低減され、データの安全性を向上させることができる。また、アプリケーションサーバ150,250からデータベースへのアクセス負荷や更新処理負荷が、データベースサーバ100,200の2カ所に分散される。このため、アプリケーションサーバ150,250からデータベースへのアクセスに対する応答性能を向上させることができる。
また、後述するように、データベースサーバ100とデータベースサーバ200との間で排他制御情報が送受信されることで、データベース111とデータベース211との整合性が保証される。排他制御情報は、データベース111,211を排他的に更新できる排他権の獲得要求や、獲得要求に対する許諾または却下(不許可)の通知のために利用される制御情報である。
図3は、データベースサーバのハードウェア構成例を示す図である。図3では例としてデータベースサーバ100について示すが、データベースサーバ200についても図3に示すハードウェア構成によって実現可能である。
データベースサーバ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を有する。
プロセッサ101は、データベースサーバ100全体を統括的に制御する。プロセッサ101は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM102は、データベースサーバ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
HDD103は、データベースサーバ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。ネットワーク107aとしては、データベースサーバ200と接続するネットワーク300や、アプリケーションサーバ150と接続するネットワークが含まれる。
なお、アプリケーションサーバ150,250についても、図3に示したハードウェア構成を有するコンピュータとして実現可能である。
次に、図2を用いて、データベース111,211のレプリケーションに関する問題点について説明する。レプリケーションの方式としては、例えば、非同期レプリケーションと同期レプリケーションがある。
非同期レプリケーションでは、例えば、一方のデータベース(ここではデータベース111とする)が更新されると、その更新内容を含むジャーナルが他方のデータベースサーバ200に送信されて、他方のデータベース211も即座に更新される。他方のデータベース211の更新時にも同様の動作が行われて、データベース111が即座に更新される。データベース111とデータベース211との間では、排他制御が行われない。このため、同じ時間帯にデータベース111,211の両方が更新されると、データの衝突が発生し、データベース111,211のそれぞれにおけるデータの更新順序が違ってしまう場合がある。その場合には、データベース111とデータベース211との間でデータの不整合が生じてしまう。
これに対して、同期レプリケーションでは、トランザクション単位でデータの整合性が検証される。例えば、データベースサーバ100でトランザクションが発生して、データベース111に対する更新が複数回行われたとする。データベース111が更新されるたびに、更新内容を含むジャーナルが他方のデータベースサーバ200に送信される。そして、一連の更新処理が終了すると、その終了がデータベースサーバ200に通知され、データベースサーバ200において、受信したジャーナルや更新前のデータなどを用いてデータの整合性が検証される。データの整合が確認されると、ジャーナルの内容がデータベース211に反映され、その旨がデータベースサーバ100に送信される。これにより、トランザクションがコミットされる。
この方法では、同じ時間帯にデータベース111,211の両方が更新されても、データの整合性が保たれる可能性が高い。しかし、トランザクションの終了時に、サーバ間の通信が行われるとともに整合性確認処理が実行される分だけ、データベース111,211の両方を更新できない余計な時間が発生する。このため、アプリケーションサーバ150,250からのデータベースの更新性能が低下する。特に、長いトランザクションが発生して多数のジャーナルが送信された場合、整合性確認の処理時間が長くなるので、データベースの更新性能が顕著に低下する。また、一方のサーバでトランザクションが繰り返し発生した場合、トランザクションの終了のたびにサーバ間通信を伴う整合性確認処理が実行されるので、データベースの更新性能が顕著に低下する。さらに、同じ時間帯にアプリケーションサーバ150,250の両方で長いトランザクションが発生すると、整合性確認の処理が複雑になり、データ不整合が発生しやすい。データ不整合が発生した場合、ロールバックが実施されたデータ更新がキャンセルされるので、データベースの更新性能は一層悪化する。
このような課題に鑑み、本実施の形態では、データベースサーバ100,200の一方のみが排他権を持つようにして、両サーバが同じ時間帯にデータベース更新を行うことによるデータの衝突を回避する。また、トランザクションの終了時にデータベースサーバ100とデータベースサーバ200との間で整合性確認のための相互通信を行わずに、データベース111,211の更新の順序性を保証し、データの不整合を防止できるようにする。
以下、図4〜図6を用いて、本実施の形態におけるデータベース更新処理の概要について説明する。なお、これ以後の説明では例として、データベース111,211に対する操作や制御の要求のためにSQL(Structured Query Language)の構文が用いられるものとする。
図4〜図6は、データベース更新処理の概要を説明するための図である。
まず、データベースサーバ100は、データベースサーバ200から受信したジャーナルを一時的に保持するための受信キュー112を備える。また、データベースサーバ200は、データベースサーバ100から受信したジャーナルを一時的に保持するための受信キュー212を備える。受信キュー112,212は、いずれもFIFO(First In/First Out)方式のキューである。
また、データベースサーバ100とデータベースサーバ200との間では、排他制御情報が送受信される。排他制御情報は、排他権の獲得に関する制御情報である。排他制御情報には、排他権の獲得を要求する「排他要求」と、排他要求を許諾したことを通知する「許諾通知」と、排他要求を却下する(許可しない)ことを通知する「却下通知」という3つのデータ種別がある。
排他制御情報は、データベースサーバ100とデータベースサーバ200との間では、ジャーナルと同格に取り扱われて、受信キュー112,212を介して送受信される。例えば、データベースサーバ100から送信されたジャーナルおよび排他制御情報は、それらの送信順に受信キュー212に格納され、受信キュー212の先頭から順番に取り出されて処理される。また、データベースサーバ200から送信されたジャーナルおよび排他制御情報は、それらの送信順に受信キュー112に格納され、受信キュー112の先頭から順番に取り出されて処理される。
また、データベースサーバ100,200は、排他権に関する動作状態として、「待機中」「要求中」「排他中」のいずれかの状態をとる。「待機中」は、排他権を持っていない状態である。この「待機中」では、排他要求を送信可能であり、かつ、他方のデータベースサーバからの排他要求を許諾可能な状態である。「要求中」は、排他権を持っていないが、排他要求を送信して、それに対する応答を待っている状態である。この「要求中」では、他方のデータベースサーバからの排他要求は却下される。「排他中」は、排他権を獲得している状態である。この「排他中」では、自サーバに接続されたアプリケーションサーバからの要求に応じて自サーバ内のデータベースを更新可能であり、かつ、その更新内容を含むジャーナルを他方のデータベースサーバに送信可能な状態である。
図4の状態1では、例として、データベースサーバ100が「排他中」であり、データベースサーバ200が「待機中」であるとする。この状態で、アプリケーションサーバ150からデータベース111の更新要求が発行される。ここでは例として、UPDATE文による更新要求が発行されるものとする。
なお、以下の説明では、「データベースの更新要求」とは、データベースに対して何らかの更新が行われる操作の要求を示す。このような更新要求としては、例えば、データの更新を要求する「UPDATE文」、行データの挿入を要求する「INSERT文」、行の削除を要求する「DELETE文」が含まれる。以下の説明では、これらのうち例として「UPDATE文」が用いられるものとするが、説明中の「UPDATE文」を「INSERT文」または「DELETE文」に置き換えることも可能である。
図4の状態1において、例えば、データベース111に対するUPDATE文が2つ発行されたとする。データベースサーバ100は、排他権を持つ「排他中」であるので、2つのUPDATE文に応じてデータベース111を更新し、これら2つのUPDATE文にそれぞれ対応するジャーナルJNL1,JNL2をデータベースサーバ200に送信する。ジャーナルJNL1,JNL2は、データベースサーバ200に受信されて受信キュー212に順に格納される。
次に、これら2つのUPDATE文の発行によりデータベース111の更新のトランザクションが終了したとする。すると、図4の状態2のように、データベースサーバ100は排他権を手放し、「排他中」から「待機中」に遷移する。
ここで、図5の状態3のように、ジャーナルJNL1,JNL2の反映処理の実行前に、アプリケーションサーバ250からデータベース211に対するUPDATE文が発行されたとする。このとき、データベースサーバ200は、動作状態が「待機中」であり排他権を持っていないので、UPDATE文による操作要求を拒否し、アプリケーションサーバ250に対して排他エラーを返却する。これとともに、データベースサーバ200は、排他要求CTL1をデータベースサーバ100に送信し、「待機中」から「要求中」に遷移する。排他要求CTL1は、データベースサーバ100に受信されて受信キュー112に格納される。
図5の状態4のように、データベースサーバ100は、受信キュー112から排他要求CTL1を取り出す。このとき、データベースサーバ100は、動作状態が「待機中」であるので、排他要求を許諾し、許諾通知CTL2をデータベースサーバ200に送信する。許諾通知CTL2は、データベースサーバ200に受信されて受信キュー212に格納される。
次に、図6の状態5のように、データベースサーバ200は、受信キュー212からジャーナルJNL1,JNL2を順に読み出し、更新内容をデータベース211に反映させる。さらに、図6の状態6のように、データベースサーバ200は、受信キュー212から許諾通知CTL2を取り出す。データベースサーバ200は、許諾通知CTL2に応じて排他権を獲得し、「要求中」から「排他中」に遷移する。この状態で、データベースサーバ200は、アプリケーションサーバ250から再送されたUPDATE文を受信すると、そのUPDATE文に基づいてデータベース211を更新する。また、図示しないが、データベースサーバ200は、このUPDATE文に対応するジャーナルをデータベースサーバ100に送信して、更新内容をデータベース111に反映させる。
以上の処理において、データベースサーバ100は、データベース111の更新が終了すると、整合性確認のための通信を行うことなく、排他権を即座に手放して「待機中」に遷移する。この状態でデータベースサーバ200から排他要求を受信すると、データベースサーバ100はそれを許諾して、許諾通知CTL2を返信する。
一方、データベースサーバ200は、排他権を持たない状態ではアプリケーションサーバ250からの要求に応じたデータベース211の更新を抑止し、許諾通知CTL2を受信することで排他権を獲得する。しかし、データベースサーバ200は、許諾通知CTL2の受信前に受信済みのジャーナルJNL1,JNL2がある場合には、それらのジャーナルJNL1,JNL2を処理してから許諾通知CTL2を取得して排他権を獲得し、「排他中」に遷移する。ジャーナルJNL1,JNL2と許諾通知CTL2が共通の受信キュー212を介して受け渡されることで、ジャーナルJNL1,JNL2および許諾通知CTL2の送信順と処理順とが変化することはない。このため、データベース211の更新順序が保証された状態で、排他権がデータベースサーバ200に受け渡される。
このように、データベースサーバ100でのトランザクションが終了したときに、サーバ間の相互通信を伴う、データベース111,211の両方とも更新できない期間(前述の非同期レプリケーションにおける整合性確認の期間)が発生しない。データベースサーバ100は、他方サーバと通信することなく、自サーバにおけるトランザクションの終了のみを契機として、排他権を手放し、他方サーバからの排他権の獲得要求(排他要求)を許諾する。他方のデータベースサーバ200は、送信順にしたがってジャーナルJNL1,JNL2を処理した後に許諾通知CTL2を取得することで、排他権を獲得できる。これにより、データベース111,211の整合性を維持しつつ、排他権を短時間で移動させてデータベース更新を継続させることができる。したがって、データの安全性が高く、データベース111,211の更新性能も高いマルチマスタ構成のデータベースレプリケーションシステムを実現できる。
また、複雑な整合性確認処理を行わずに、データベースサーバ100,200のそれぞれにおける動作状態の管理と、ジャーナルと共通の受信キューを用いた排他制御情報の受け渡しという簡単な処理によって、排他権を短時間で移動させることができる。したがって、上記のようなマルチマスタ構成のデータベースレプリケーションシステムを低負荷の処理によって実現できる。
なお、一方のデータベースサーバ100のみにおいてトランザクションが繰り返し発生した場合、上記の非同期レプリケーションにおける整合性確認処理がトランザクションの終了ごとに実行されることはない。その代わりに、トランザクションの終了のたびにデータベースサーバ200への排他要求の送信とデータベースサーバ200からの許諾通知の受信のみが行われる。例えば、図4の状態2においてデータベースサーバ100が排他権を手放した後、続けてアプリケーションサーバ150からデータベース111の更新要求が発生した場合、排他要求の送信と許諾通知の受信が行われることで、データベースサーバ100は排他権を再度獲得できる。したがって、繰り返し発生するトランザクションの処理を短時間で完了することができる。
次に、図7は、情報処理システムの各サーバが備える処理機能の構成例を示すブロック図である。
まず、アプリケーションサーバ150は、データベース111を利用した処理を実行するユーザアプリケーション151を備える。ユーザアプリケーション151の処理は、アプリケーションサーバ150が備える図示しないプロセッサがユーザアプリケーションプログラムを実行することで実現される。アプリケーションサーバ250も同様に、データベース211を利用した処理を実行するユーザアプリケーション251を備える。ユーザアプリケーション251の処理は、アプリケーションサーバ250が備える図示しないプロセッサがユーザアプリケーションプログラムを実行することで実現される。
次に、データベースサーバ100は、前述のデータベース111および受信キュー112に加えて、送信キュー113を備える。送信キュー113は、データベースサーバ100からデータベースサーバ200へ送信されるジャーナルおよび排他制御情報を一時的に保持するためのFIFO方式のキューである。なお、データベース111は、HDD103などのデータベースサーバ100が備える記憶装置に記憶される。受信キュー112および送信キュー113は、RAM102などのデータベースサーバ100が備える記憶装置の記憶領域によって実現される。
データベースサーバ200も同様に、前述のデータベース211および受信キュー212に加えて、送信キュー213を備える。送信キュー213は、データベースサーバ200からデータベースサーバ100へ送信されるジャーナルおよび排他制御情報を一時的に保持するためのFIFO方式のキューである。なお、データベース211は、データベースサーバ200が備える記憶装置に記憶され、受信キュー212および送信キュー213は、データベースサーバ200が備える記憶装置の記憶領域によって実現される。
また、データベースサーバ100は、ジャーナル制御部120と排他制御部130を備える。ジャーナル制御部120および排他制御部130の処理は、データベースサーバ100のプロセッサ101が所定のプログラム(例えばデータベース管理プログラム)を実行することで実現される。ジャーナル制御部120は、ジャーナル抽出部121、ジャーナル送信部122、ジャーナル受信部123およびジャーナル反映部124を備える。
データベースサーバ200も同様に、ジャーナル制御部220と排他制御部230を備える。ジャーナル制御部220および排他制御部230の処理は、データベースサーバ200が備える図示しないプロセッサが所定のプログラム(例えばデータベース管理プログラム)を実行することで実現される。ジャーナル制御部220は、ジャーナル抽出部221、ジャーナル送信部222、ジャーナル受信部223およびジャーナル反映部224を備える。
データベースサーバ100において、ジャーナル抽出部121は、排他制御部130から出力されるデータベース111の更新要求を捕捉して、その更新要求に基づいてデータベース111を更新する。これとともに、ジャーナル抽出部121は、データベース111の更新内容を示す情報をジャーナルとして抽出し、ジャーナル送信部122に出力する。
ジャーナル送信部122は、ジャーナル抽出部121から出力されたジャーナル、および排他制御部130から出力された排他制御情報を、送信キュー113に順次格納する。そして、ジャーナル送信部122は、送信キュー113からエントリ(ジャーナルまたは排他制御情報)を順番に取り出し、データベースサーバ200に送信する。送信されたジャーナルまたは排他制御情報は、データベースサーバ200のジャーナル受信部223によって受信される。
ジャーナル受信部123は、データベースサーバ200のジャーナル送信部222から送信されたジャーナルまたは排他制御情報を受信して、受信キュー112に順次格納する。そして、ジャーナル受信部123は、受信キュー112からエントリ(ジャーナルまたは排他制御情報)を順番に取り出す。ジャーナル受信部123は、受信キュー112からジャーナルを取り出した場合、それをジャーナル反映部124に出力し、受信キュー112から排他制御情報を取り出した場合、それを排他制御部130に出力する。
ジャーナル反映部124は、ジャーナル受信部123から出力されたジャーナルに基づいてデータベース111を更新して、ジャーナルに含まれる更新内容をデータベース111に反映させる。
排他制御部130は、状態管理情報131を参照しながら処理を実行する。状態管理情報131は、データベースサーバ100の動作状態を示す情報であり、RAM102などのデータベースサーバ100が備える記憶装置に格納される。
排他制御部130は、ユーザアプリケーション151からデータベース111に発行されるコマンドを捕捉する。排他制御部130は、捕捉したコマンドの内容と、状態管理情報131に記録された動作状態とに基づいて、データベース111の更新可否判定や排他制御情報の送信のための処理を実行する。また、排他制御部130は、ジャーナル受信部123から出力された排他制御情報の種別と、状態管理情報131に記録された動作状態とに基づいて、排他制御情報の返信やデータベースサーバ100の動作状態の変更処理を実行する。
なお、データベースサーバ200において、ジャーナル抽出部221、ジャーナル送信部222、ジャーナル受信部223およびジャーナル反映部224は、それぞれジャーナル抽出部121、ジャーナル送信部122、ジャーナル受信部123およびジャーナル反映部124と同様の処理を実行する。これらのうち、ジャーナル送信部222、ジャーナル受信部223は、それぞれ送信キュー213、受信キュー212を参照しながら処理を実行する。
また、排他制御部230は、状態管理情報231を参照しながら排他制御部130と同様の処理を実行する。状態管理情報231は、データベースサーバ200の動作状態を示す情報であり、データベースサーバ200が備える記憶装置に格納される。
次に、データベースサーバ100の処理について、図8〜図12のフローチャートを用いて説明する。なお、図8〜図12では例としてデータベースサーバ100の処理について説明するが、データベースサーバ200でも同様の処理が実行される。
図8は、データベース更新制御の処理例を示すフローチャートである。このデータベース更新制御とは、アプリケーションサーバ150のユーザアプリケーション151からデータベース111に対するコマンドが発行された場合の処理を示す。
[ステップS11]排他制御部130は、ユーザアプリケーション151からデータベース111に発行されたコマンドを捕捉する。
[ステップS12]排他制御部130は、捕捉したコマンドに含まれるSQL文を判定する。排他制御部130は、SQL文がトランザクションの開始を要求するBEGIN文である場合、処理を終了する。この場合、トランザクションが開始され、排他制御部130は、ユーザアプリケーション151からのデータベース111の操作要求(ここではUPDATE文)を待機する状態となる。また、排他制御部130は、SQL文がデータ更新を要求するUPDATE文である場合、ステップS13の処理を実行する。また、排他制御部130は、SQL文がトランザクションの確定を示すCOMMIT文の場合、トランザクションを終了し、ステップS20の処理を実行する。
[ステップS13]排他制御部130は、状態管理情報131を参照して、現在の動作状態が「排他中」かを判定する。排他制御部130は、現在「排他中」の場合、ステップS14の処理を実行し、「排他中」でない場合、ステップS16の処理を実行する。
[ステップS14]排他制御部130は、UPDATE文をデータベース111に出力する。ジャーナル抽出部121は、排他制御部130から出力されたUPDATE文を捕捉し、このUPDATE文に基づいてデータベース111を更新する。
[ステップS15]ジャーナル抽出部121は、データベース111の更新内容を示す情報をジャーナルとして抽出し、このジャーナルをジャーナル送信部122に出力する。ジャーナル送信部122は、ジャーナル抽出部121からのジャーナルを送信キュー113に格納する。その後、このジャーナルは送信キュー113の先頭に達するとジャーナル送信部122に取り出され、データベースサーバ200に送信される。
[ステップS16]ステップS13で「排他中」でないと判定された場合、すなわち、現在「待機中」または「要求中」である場合には、排他制御部130は、ユーザアプリケーション151に対して排他エラーを返却する。これにより、データベース111の更新要求が拒否され、排他権のない状態でのデータベース111の更新が抑止される。
[ステップS17]排他制御部130は、現在の動作状態が「待機中」かを判定する。排他制御部130は、現在「待機中」の場合はステップS18の処理を実行し、現在「待機中」でない場合、すなわち「要求中」の場合には処理を終了する。
[ステップS18]排他制御部130は、「排他要求」の排他制御情報を生成してジャーナル送信部122に出力する。ジャーナル送信部122は、排他制御部130からの排他制御情報を送信キュー113に格納する。その後、この排他制御情報は送信キュー113の先頭に達するとジャーナル送信部122に取り出され、データベースサーバ200に送信される。
[ステップS19]排他制御部130は、状態管理情報131を「要求中」を示すように書き替える。これにより、データベースサーバ100は「要求中」に遷移する。
[ステップS20]排他制御部130は、状態管理情報131を「待機中」を示すように書き替える。これにより、データベースサーバ100は「待機中」に遷移する。
なお、図8の例では、COMMIT文を受信すると即座に動作状態が「待機中」に遷移する。しかし、例えば、排他制御部130は、これとは別の条件によって動作状態を「排他中」から「待機中」に遷移させてもよい。例えば、排他制御部130は、次の図9の例のように、「排他中」の期間における他方のデータベースサーバ200からの排他要求の受信状況に基づいて、動作状態を「待機中」に遷移させるタイミングを決定してもよい。
図9は、「待機中」への遷移判定の処理例を示すフローチャートである。
[ステップS21]排他制御部130は、動作状態が「排他中」に遷移すると、ステップS22以降の処理を実行する。また、排他制御部130は、図9の処理で使用される変数である「受信回数」を0にリセットする。
[ステップS22]排他制御部130は、データベースサーバ200から排他要求を受信したかを判定する。排他制御部130は、排他要求を受信していない場合、一定時間後にステップS22の処理を再実行する。そして、排他制御部130は、排他要求を受信した場合、ステップS23の処理を実行する。
[ステップS23]排他制御部130は、受信回数をカウントアップする。
[ステップS24]排他制御部130は、カウントアップ後の受信回数が所定の閾値を超えたかを判定する。排他制御部130は、受信回数が閾値以下の場合、一定時間後にステップS22の処理を実行する。そして、排他制御部130は、受信回数が閾値を超えた場合、ステップS25の処理を実行する。
[ステップS25]排他制御部130は、状態管理情報131を「待機中」を示すように書き替える。これにより、データベースサーバ100は「待機中」に遷移する。
以上の図9の処理では、排他制御部130は、「排他中」の期間におけるデータベースサーバ200からの排他要求の受信回数が閾値を超えた場合、動作状態を「待機中」に遷移させる。また、他の例として、排他制御部130は、「排他中」の期間におけるデータベースサーバ200からの排他要求の受信頻度が閾値を超えた場合に、動作状態を「待機中」に遷移させてもよい。
また、図9の処理は、図8の処理と並列に実行されてもよい。この場合、COMMIT文の受信、または受信状況が所定の条件を満たすといういずれかの事象が発生したとき、動作状態が「排他中」から「待機中」に遷移する。さらに、他の例として、排他制御部130は、「待機中」の期間の長さが閾値を超えた場合に、動作状態を「待機中」に遷移させてもよい。また、COMMIT文を受信したときに、「排他中」の期間における排他要求の受信状況や「排他中」の期間の長さに基づいて、動作状態を「待機中」に遷移させるかが判定されてもよい。
図10は、受信制御の処理例を示すフローチャートである。この受信制御とは、他方のデータベースサーバ200から受信したジャーナルまたは排他制御情報に応じた制御処理を示す。なお、前述のように、ジャーナル受信部123は、データベースサーバ200のジャーナル送信部222から送信されたジャーナルまたは排他制御情報を受信して、受信キュー112に順次格納する。
[ステップS31]ジャーナル受信部123は、受信キュー112の先頭からエントリを1つ取得する。取得されたエントリは受信キュー112から削除される。
[ステップS32]ジャーナル受信部123は、取得したエントリがジャーナルの場合、そのジャーナルをジャーナル反映部124に出力して、処理をステップS33に進める。一方、ジャーナル受信部123は、取得したエントリが排他制御情報の場合、その排他制御情報を排他制御部130に出力して、処理をステップS34に進める。
[ステップS33]ジャーナル反映部124は、ジャーナル受信部123からのジャーナルに含まれる更新内容をデータベース111に反映させて、データベース111を更新する。
[ステップS34]排他制御部130は、ジャーナル受信部123からの排他制御情報の種別を判定する。排他制御部130は、種別が「排他要求」の場合、ステップS35の処理を実行し、種別が排他要求の結果(「許諾通知」または「却下通知」)の場合、ステップS36の処理を実行する。
[ステップS35]排他制御部130は、排他要求に対する応答処理を実行する。この処理の詳細については後の図11において説明する。
[ステップS36]排他制御部130は、排他要求の結果反映処理を実行する。この処理の詳細については後の図12において説明する。
図11は、排他要求に対する応答処理の例を示すフローチャートである。
[ステップS41]排他制御部130は、状態管理情報131を参照して、現在の動作状態が「待機中」かを判定する。排他制御部130は、現在「待機中」の場合、ステップS42の処理を実行し、現在「待機中」でない場合、すなわち「排他中」または「要求中」の場合には、ステップS43の処理を実行する。
[ステップS42]排他制御部130は、種別が「許諾通知」の排他制御情報を生成する。
[ステップS43]排他制御部130は、種別が「却下通知」の排他制御情報を生成する。
[ステップS44]排他制御部130は、ステップS42またはステップS43で生成した排他制御情報をジャーナル送信部122に出力する。ジャーナル送信部122は、排他制御部130からの排他制御情報を送信キュー113に格納する。その後、この排他制御情報は送信キュー113の先頭に達するとジャーナル送信部122に取り出され、データベースサーバ200に送信される。
図12は、排他要求の結果反映処理の例を示すフローチャートである。
[ステップS51]排他制御部130は、状態管理情報131を参照して、現在の動作状態が「要求中」かを判定する。排他制御部130は、現在「要求中」の場合、ステップS52の処理を実行し、現在「要求中」でない場合、処理を終了する。
[ステップS52]排他制御部130は、図10のステップS31で取得された排他制御情報の種別を判定する。排他制御部130は、種別が「許諾通知」の場合、ステップS53の処理を実行し、種別が「却下通知」の場合、ステップS54の処理を実行する。
[ステップS53]排他制御部130は、状態管理情報131を「排他中」を示すように書き替える。これにより、データベースサーバ100は排他権を獲得して「排他中」に遷移する
[ステップS54]排他制御部130は、状態管理情報131を「待機中」を示すように書き替える。これにより、データベースサーバ100は「待機中」に遷移する。
次に、図13〜図17のシーケンス図を用いて、情報処理システムにおけるデータベース更新処理の具体例を説明する。
まず、図13、図14は、一方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図である。
図13の初期状態では、データベースサーバ100,200のいずれも「待機中」であるものとする。この状態から、アプリケーションサーバ150のユーザアプリケーション151からBEGIN文が発行されてトランザクション開始が要求され(ステップS101)、さらにUPDATE文が発行されたとする(ステップS102)。
データベースサーバ100の排他制御部130は、UPDATE文を受信したとき、「待機中」であることからアプリケーションサーバ150に対して排他エラーを返却し(ステップS111)、排他要求をジャーナル送信部122に出力する。これにより、ジャーナル送信部122からデータベースサーバ200に対して排他要求が送信される(ステップS112)。排他制御部130はさらに、動作状態を「要求中」に遷移させる(ステップS113)。
送信された排他要求はデータベースサーバ200のジャーナル受信部223によって受信され、排他制御部230に出力される(ステップS121)。排他制御部230は、データベースサーバ200が「待機中」であることから、許諾通知をジャーナル送信部222に出力する。これにより、ジャーナル送信部222からデータベースサーバ100に対して許諾通知が送信される(ステップS122)。
また、ステップS111で返却された排他エラーを受信したユーザアプリケーション151は、排他エラー発生時のエラー処理を実行する(ステップS103)。この処理では、ユーザアプリケーション151は、時間のカウントを開始し、一定時間後にトランザクションを再度開始させる。すなわち、ユーザアプリケーション151は、一定時間後にBEGIN文を再送し(ステップS104)、さらにUPDATE文を再送する(ステップS105)。
UPDATE文の再送時に動作状態が「要求中」であったとすると、UPDATE文を受信した排他制御部130は、再度排他エラーを返却する(ステップS114)。ユーザアプリケーション151は、排他エラーの受信に応じて再度エラー処理を実行する(ステップS106)。すなわち、再送のための時間のカウントが開始される。
以下、図14を用いて説明を続ける。
図13のステップS122で送信された許諾通知は、ジャーナル受信部123によって受信され、排他制御部130に出力される(ステップS141)。排他制御部130は、許諾通知に応じて動作状態を「排他中」に遷移させる(ステップS142)。これにより、データベースサーバ100は排他権を獲得する。
また、ユーザアプリケーション151は、図13のステップS106の実行から一定時間後にトランザクションを再度開始させる。すなわち、ユーザアプリケーション151は、一定時間後にBEGIN文を再送し(ステップS131)、さらにUPDATE文を再送する(ステップS132)。このとき「排他中」であるので、UPDATE文を受信した排他制御部130は、UPDATE文に基づいてデータベース111を更新させる。このとき、ジャーナル抽出部121によってデータベース111が更新され(ステップS143)、ジャーナル送信部122によってその更新内容を含むジャーナルがデータベースサーバ200に送信される(ステップS144)。送信されたジャーナルはジャーナル受信部223によって受信され(ステップS151)、ジャーナル反映部224によってジャーナルの更新内容がデータベース211に反映され、データベース211が更新される(ステップS152)。
以上のような排他制御部130の制御により、データベースサーバ100は、「待機中」では、ユーザアプリケーション151からの要求に応じたデータベース111の更新を抑止するとともに、排他要求を送信して「要求中」に遷移する。「要求中」では、データベースサーバ100は、データベースサーバ200から許諾通知を受けるまでデータベース111の更新をさらに抑止する。そして、データベースサーバ100は、許諾通知を受信すると、排他権を獲得して「排他中」に遷移する。この状態で、データベースサーバ100は、ユーザアプリケーション151からの要求に応じてデータベース111を更新し、その更新内容を他方のデータベース211に反映させるためのジャーナルを送信する。
次に、図15は、同じ時間帯に両方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図である。
図15の初期状態では、データベースサーバ100,200のいずれも「待機中」であるものとする。この状態から、アプリケーションサーバ150のユーザアプリケーション151からBEGIN文が発行されてトランザクション開始が要求され(ステップS161)、さらにUPDATE文が発行されたとする(ステップS162)。
データベースサーバ100の排他制御部130は、UPDATE文を受信したとき、「待機中」であることからアプリケーションサーバ150に対して排他エラーを返却し(ステップS171)、排他要求をジャーナル送信部122に出力する。これにより、ジャーナル送信部122からデータベースサーバ200に対して排他要求が送信される(ステップS172)。排他制御部130はさらに、動作状態を「要求中」に遷移させる(ステップS173)。なお、ステップS171で返却された排他エラーを受信したユーザアプリケーション151は、エラー処理を実行して、再送のための時間のカウントを開始する(ステップS163)。
一方、ステップS161,S162とほぼ同じ時間帯において、アプリケーションサーバ250のユーザアプリケーション251からも、BEGIN文が発行されてトランザクション開始が要求され(ステップS191)、さらにUPDATE文が発行されたとする(ステップS192)。データベースサーバ200の排他制御部230は、UPDATE文を受信したとき、「待機中」であることからアプリケーションサーバ250に対して排他エラーを返却し(ステップS181)、排他要求をジャーナル送信部222に出力する。これにより、ジャーナル送信部222からデータベースサーバ100に対して排他要求が送信される(ステップS182)。排他制御部230はさらに、動作状態を「要求中」に遷移させる(ステップS183)。なお、ステップS181で返却された排他エラーを受信したユーザアプリケーション251は、エラー処理を実行して、再送のための時間のカウントを開始する(ステップS193)。
ステップS172で送信された排他要求は、データベースサーバ200のジャーナル受信部223によって受信され、排他制御部230に出力される(ステップS184)。排他制御部230は、このとき「要求中」であることから、却下通知をジャーナル送信部222に出力する。これにより、ジャーナル送信部222からデータベースサーバ100に対して却下通知が送信される(ステップS185)。送信された却下通知は、データベースサーバ100のジャーナル受信部123によって受信され、排他制御部130に出力される(ステップS176)。排他制御部130は、却下通知に応じて、動作状態を「待機中」に遷移させる(ステップS177)。
また、ステップS182で送信された排他要求は、データベースサーバ100のジャーナル受信部123によって受信され、排他制御部130に出力される(ステップS174)。排他制御部130は、このとき「要求中」であることから、却下通知をジャーナル送信部122に出力する。これにより、ジャーナル送信部122からデータベースサーバ200に対して却下通知が送信される(ステップS175)。送信された却下通知は、データベースサーバ200のジャーナル受信部223によって受信され、排他制御部230に出力される(ステップS186)。排他制御部230は、却下通知に応じて、動作状態を「待機中」に遷移させる(ステップS187)。
以上のような排他制御部130,230の制御により、同時間帯にデータベース111,211の両方に対する更新が発生した場合には、データベース111,211の両方についての更新が抑止される。これにより、データベース111とデータベース211との間でデータの不整合が発生する事態を確実に回避できる。
次に、図16、図17は、一方のデータベースサーバが排他権を持つ状態で他方のデータベースサーバにおいてデータベースの更新要求が発生した場合の処理例を示すシーケンス図である。
図16の初期状態では、データベースサーバ100が排他権を持つ「排他中」であり、データベースサーバ200が「待機中」であるものとする。この状態で、アプリケーションサーバ150のユーザアプリケーション151からBEGIN文が発行されてトランザクション開始が要求され(ステップS201)、さらにUPDATE文が発行される(ステップS202)。
UPDATE文を受信した排他制御部130は、「排他中」であるのでUPDATE文に基づいてデータベース111を更新させる。このとき、ジャーナル抽出部121によってデータベース111が更新され(ステップS211)、ジャーナル送信部122によってその更新内容を含むジャーナルがデータベースサーバ200に送信される(ステップS212)。送信されたジャーナルはデータベースサーバ200のジャーナル受信部223によって受信され(ステップS221)、ジャーナル反映部224によってジャーナルの更新内容がデータベース211に反映され、データベース211が更新される(ステップS222)。
また、ユーザアプリケーション151からUPDATE文が続けて発行されたとする(ステップS203)。このUPDATE文を受信した排他制御部130は、「排他中」であるのでUPDATE文に基づいてデータベース111を更新させる。このとき、ジャーナル抽出部121によってデータベース111が更新され(ステップS213)、ジャーナル送信部122によってその更新内容を含むジャーナルがデータベースサーバ200に送信される(ステップS214)。送信されたジャーナルはデータベースサーバ200のジャーナル受信部223によって受信され(ステップS226)、ジャーナル反映部224によってジャーナルの更新内容がデータベース211に反映され、データベース211が更新される(ステップS227)。
ここで、上記のようなデータベースサーバ100でのトランザクションの実行中において、アプリケーションサーバ250のユーザアプリケーション251からデータベース211の更新が要求されたとする。すなわち、ユーザアプリケーション251からBEGIN文が発行されてトランザクション開始が要求され(ステップS231)、さらにUPDATE文が発行される(ステップS232)。
ここでは、ステップS222でのデータベース211の更新直後にUPDATE文が発行されたとする。UPDATE文を受信した排他制御部230は、「待機中」であることからアプリケーションサーバ250に対して排他エラーを返却し(ステップS223)、排他要求をジャーナル送信部222に出力する。これにより、ジャーナル送信部222からデータベースサーバ100に対して排他要求が送信される(ステップS224)。排他制御部230はさらに、動作状態を「要求中」に遷移させる(ステップS225)。なお、ステップS223で返却された排他エラーを受信したユーザアプリケーション251は、エラー処理を実行して、再送のための時間のカウントを開始する(ステップS233)。
ステップS232のUPDATE文は、ステップS222でのジャーナル反映とステップS227でのジャーナル反映との間のタイミングで排他制御部230に出力されている。しかし、排他制御部230は、「待機中」であり排他権を持たないことから、UPDATE文に応じたデータベース211の更新を抑止する。これにより、データベース211とデータベース111との間のデータの整合性を維持でき、事後の整合性確認処理も不要になる。
ステップS224で送信された排他要求は、データベースサーバ100のジャーナル受信部123によって受信され、排他制御部130に出力される(ステップS215)。以下、図17を用いて説明を続ける。
排他制御部130は、このとき「排他中」であることから、却下通知をジャーナル送信部122に出力する。これにより、ジャーナル送信部122からデータベースサーバ200に対して却下通知が送信される(ステップS251)。送信された却下通知は、データベースサーバ200のジャーナル受信部223によって受信され、排他制御部230に出力される(ステップS261)。排他制御部230は、却下通知に応じて、動作状態を「待機中」に遷移させる(ステップS262)。
ここで、ユーザアプリケーション151からCOMMIT文が発行されて、トランザクション終了が要求されたとする(ステップS241)。排他制御部130は、COMMIT文に応じて、動作状態を「待機中」に遷移させ、排他権を手放す(ステップS252)。
一方、ユーザアプリケーション251は、ステップS233で時間のカウントを開始してから一定時間後にBEGIN文を再送し(ステップS271)、さらにUPDATE文を再送する(ステップS272)。このとき、動作状態が「待機中」であったとすると、UPDATE文を受信した排他制御部230は、アプリケーションサーバ250に対して排他エラーを返却し(ステップS263)、排他要求をジャーナル送信部222に出力する。これにより、ジャーナル送信部222からデータベースサーバ100に対して排他要求が送信される(ステップS264)。排他制御部230はさらに、動作状態を「要求中」に遷移させる(ステップS265)。
ステップS264で送信された排他要求は、データベースサーバ100のジャーナル受信部123によって受信され、排他制御部130に出力される(ステップS253)。排他制御部130は、「待機中」であり排他権を持たないので、許諾通知をジャーナル送信部122に出力する。これにより、ジャーナル送信部122からデータベースサーバ200に対して許諾通知が送信される(ステップS254)。送信された許諾通知はデータベースサーバ200のジャーナル受信部223によって受信され、排他制御部230に出力される(ステップS266)。排他制御部230は、許諾通知に応じて動作状態を「排他中」に遷移させる(ステップS267)。これにより、データベースサーバ200は排他権を獲得する。
ユーザアプリケーション251は、ステップS273の実行から一定時間後にBEGIN文を再送し(ステップS274)、さらにUPDATE文を再送する(ステップS275)。このとき「排他中」であるので、UPDATE文を受信した排他制御部230は、UPDATE文に基づいてデータベース211を更新させる。このとき、ジャーナル抽出部221によってデータベース211が更新され(ステップS268)、ジャーナル送信部222によってその更新内容を含むジャーナルがデータベースサーバ100に送信される(ステップS269)。送信されたジャーナルはジャーナル受信部123によって受信され(ステップS255)、ジャーナル反映部124によってジャーナルの更新内容がデータベース111に反映され、データベース111が更新される(ステップS256)。
以上の処理において、データベースサーバ200は、データベースサーバ100から受信済みのジャーナルを順に処理した後、許諾通知を受信した時点で排他権を獲得し、データベース211の更新を開始する。ここで、データベースサーバ100は、排他権を持たない状態、すなわち、ユーザアプリケーション151からの要求に応じたデータベース111の更新を行わないことを保証した状態でのみ、許諾通知を送信する。図17の例では、データベース111についてのトランザクションが完了した後に、許諾通知を送信している(ステップS254)。このため、データベースサーバ200では、データベースサーバ100から受信済みのジャーナルが順に処理された後に、許諾通知に応じてデータベース211の更新が開始されることで、データベース211の更新順が保証される。
したがって、データベースサーバ200は、データベース111についてのトランザクションにおける最後のジャーナルの反映(ステップS227)の後に、データベースサーバ100との間でデータベース間の整合性確認処理を実行する必要がない。すなわち、データベースサーバ200は、許諾通知の受信に応じて即座に排他権を獲得でき、ユーザアプリケーション251からの要求に応じたデータベース211の更新を開始できる。また、上記の情報処理システムは、ジャーナルの送受信経路を用いた排他制御情報の送受信という簡単な処理によって、データの整合性が確実に保証された状態で、排他権をデータベースサーバ間において短時間で受け渡すことができる。
また、データベースサーバ100は、ユーザアプリケーション151からの要求に応じたデータベース111の更新が終了すると、それらの更新に対応するジャーナルがデータベース211に反映されたことを確認せずに、即座に排他権を手放すことができる。このため、ユーザアプリケーション151からの要求に応じたデータベース111の更新が終了した後、他方のデータベースサーバ200は短時間で排他権を獲得できる。その結果、データベース111,211の更新処理効率を向上させることができる。
さらに、一方のデータベースサーバは、他方のデータベースサーバの動作状態を認識しておらず、相手側の動作状態に関係なく、排他要求を送信できる。特に、図16のステップS224のケースのように、一方のデータベースサーバは、他方のデータベースサーバに排他権がある状態であっても、排他要求を送信できる。このため、一方のデータベースサーバが排他権を手放してから短時間で、他方のデータベースサーバが排他権を獲得できる。その結果、データベース111,211の更新処理効率を向上させることができる。
このように、情報処理システムの全体としてデータベース111,211に対する更新処理の効率を向上させることができる。したがって、データベースサーバ100,200がそれぞれユーザアプリケーション151,251からデータベース更新要求を受信してからの応答速度を高めることができる。
なお、図17の例では、データベースサーバ100の排他制御部130は、COMMIT文を受信すると即座に動作状態を「待機中」に遷移させ、排他権を手放している(ステップS252参照)。しかし、例えば、図9に示したように、「排他中」の期間における他方のデータベースサーバ200からの排他要求の受信状況に応じて、排他権を手放すタイミングが制御されてもよい。例えば、排他制御部130は、COMMIT文の受信時、またはその受信に関係なく、「排他中」の期間におけるデータベースサーバ200からの排他要求の受信頻度または受信回数が所定の閾値を超えた場合に、排他権を手放してもよい。また、他の例として、排他制御部130は、COMMIT文の受信時、またはその受信に関係なく、「排他中」の期間の長さが所定時間を超えた場合に、排他権を手放してもよい。このような制御により、一方のデータベースサーバが長期間排他権を独占し続け、他方のデータベースサーバがユーザアプリケーションからの要求に応じたデータベース更新をできなくなる、という事態の発生を回避できる。
<第1の変形例>
以下、第2の実施の形態における処理の一部を変形した第1の変形例について説明する。
第2の実施の形態では、例えばデータベースサーバ100は、ユーザアプリケーション151によるデータベース111に対する一連の更新処理が終了すると、「排他中」から「待機中」に遷移して排他権を手放す。しかし、例えばユーザアプリケーション251よりユーザアプリケーション151の方がデータベース更新処理の発生頻度が高い場合には、ユーザアプリケーション151による一連のデータベース更新処理が、短い間隔で繰り返し発生することが予測される。この場合、データベースサーバ100は、ユーザアプリケーション151による一連のデータベース更新処理が発生するたびに排他権を獲得し直さなければならず、その分だけユーザアプリケーション151からのデータベース更新要求に対する応答性能が低下する。
そこで、第1の変形例では、データベースサーバ100,200の動作状態として、上記の「待機中」「要求中」「排他中」に加えてさらに「予約中」を導入する。「予約中」は、排他権を持ってはいるが、他方のデータベースから排他要求を受信すると即座に排他権を手放す、という動作状態である。「予約中」には、「排他中」にCOMMIT文を受信した場合に遷移する。すなわち、データベースサーバは、「排他中」にユーザアプリケーションによるデータベース更新処理が終了したとき、「予約中」に遷移することで、即座に排他権を手放さずに保持し続ける。そして、「予約中」のデータベースサーバは、他方のデータベースサーバから排他要求を受信すると、その時点で排他権を手放し、許諾通知を送信する。しかし、「予約中」のデータベースサーバは、ユーザアプリケーションによるデータベース更新処理が再度発生した場合には、他方のデータベースサーバから排他権を獲得し直す手続きを実行することなく、「排他中」に遷移する。そして、「排他中」に遷移したデータベースサーバは、ユーザアプリケーションからの要求に応じたデータベース更新処理を即座に実行する。これにより、ユーザアプリケーションによる一連のデータベース更新処理が短い間隔で発生した場合における、データベース更新要求に対する応答性能を改善できる。
図18は、「排他中」から「予約中」に遷移する場合の処理例を示すシーケンス図である。
図18の初期状態では、データベースサーバ100は「排他中」であり、データベースサーバ200は「待機中」であるものとする。この状態から、アプリケーションサーバ150のユーザアプリケーション151からBEGIN文が発行されてトランザクション開始が要求され(ステップS281)、さらにUPDATE文が発行されたとする(ステップS282)。すると、データベースサーバ100の排他制御部130の制御により、データベース111が更新され(ステップS291)、ジャーナルが送信される(ステップS292)。データベースサーバ200では、ジャーナルが受信されると(ステップS301)、ジャーナルの内容がデータベース211に反映されてデータベース211が更新される(ステップS302)。
さらに続けて、ユーザアプリケーション151からUPDATE文が発行されたとする(ステップS283)。すると、データベースサーバ100の排他制御部130の制御により、データベース111が更新され(ステップS293)、ジャーナルが送信される(ステップS294)。データベースサーバ200では、ジャーナルが受信されると(ステップS303)、ジャーナルの内容がデータベース211に反映されてデータベース211が更新される(ステップS304)。
ここで、ユーザアプリケーション151からCOMMIT文が発行されてトランザクションの終了が要求されると(ステップS284)、排他制御部130は動作状態を「予約中」に遷移させる(ステップS295)。
しかしこの後、ユーザアプリケーション151から再度、BEGIN文が発行されてトランザクション開始が要求され(ステップS285)、さらにUPDATE文が発行されたとする(ステップS286)。BEGIN文を受信した排他制御部130は、「予約中」のため排他権を即座に獲得し、動作状態を「排他中」に遷移させる(ステップS296)。そして、排他制御部130は、UPDATE文を受信すると、UPDATE文に基づいてデータベース111を更新させ(ステップS297)、ジャーナルを送信させる(ステップS298)。データベースサーバ200では、ジャーナルが受信されると(ステップS305)、ジャーナルの内容がデータベース211に反映されてデータベース211が更新される(ステップS306)。
このように、「予約中」では、排他制御部130は、データベースサーバ200からの排他要求を受信する前にユーザアプリケーション151によるデータベース更新処理が再度発生した場合には、ユーザアプリケーション151からの要求に応じたデータベース更新処理を即座に実行できる。これにより、ユーザアプリケーション151からのデータベース更新要求に対する応答性能を改善できる。
なお、図18の例では、排他制御部130は、「予約中」の状態でBEGIN文を受信した場合に、動作状態を「排他中」に遷移させている。しかし、他の例として、排他制御部130は、「予約中」の状態でUPDATE文を受信した場合に、動作状態を「排他中」に遷移させ、UPDATE文に基づいてデータベース111の更新およびジャーナルの送信を実行させてもよい。
図19は、「予約中」に他方のデータベースサーバから排他要求を受信した場合の処理例を示すシーケンス図である。
図19の初期状態では、データベースサーバ100は「予約中」であり、データベースサーバ200は「待機中」であるものとする。この状態から、アプリケーションサーバ250のユーザアプリケーション251からBEGIN文が発行されてトランザクション開始が要求され(ステップS331)、さらにUPDATE文が発行されたとする(ステップS332)。すると、第2の実施の形態と同様に、データベースサーバ200の排他制御部230は、排他エラーを返却してデータベース211の更新を抑止し(ステップS321)、排他要求を送信させ(ステップS322)、動作状態を「要求中」に遷移させる(ステップS323)。
データベースサーバ100の排他制御部130は、排他要求が受信されると(ステップS311)、許諾通知を送信させ(ステップS312)、動作状態を「待機中」に遷移させる(ステップS313)。排他制御部230は、許諾通知の受信(ステップS324)に応じて、動作状態を「排他中」に遷移させる(ステップS325)。これにより、データベースサーバ200が排他権を獲得する。
ステップS321で返却された排他エラーを受信したユーザアプリケーション151は、排他エラー発生時のエラー処理を実行する(ステップS333)。ユーザアプリケーション251は、時間のカウントを開始し、一定時間後にBEGIN文を再送し(ステップS334)、さらにUPDATE文を再送する(ステップS335)。UPDATE文を受信した排他制御部230は、排他権を持っているので、UPDATE文に基づいてデータベース211を更新させ(ステップS326)、ジャーナルを送信させる(ステップS327)。データベースサーバ100では、ジャーナルが受信されると(ステップS314)、ジャーナルの内容がデータベース111に反映されてデータベース111が更新される(ステップS315)。
このように、排他制御部130は、「予約中」において排他要求を受信すると、即座に許諾通知を送信して、動作状態を「待機中」に遷移させ、排他権を手放す。データベースサーバ200は、排他要求を送信してから、第2の実施の形態の場合と同等の時間で排他権を獲得できる。すなわち、第1の変形例によれば、一方のデータベースサーバにおけるユーザアプリケーションからのデータベース更新要求に対するレスポンスを改善でき、なおかつ、他方のデータベースサーバが第2の実施の形態と同等の時間で排他権を獲得できる。
図20は、第1の変形例における、データベース更新制御の処理例を示すフローチャートである。この図20では、図8と同じ処理が実行される処理ステップには同じステップ番号を付して示しており、その処理内容の説明を省略する。
図20に示す処理では、図8のステップS12において、コマンドのSQL文がBEGIN文であった場合に、ステップS12a,S12bが実行される。
[ステップS12a]排他制御部130は、状態管理情報131に基づいて、現在の動作状態が「予約中」かを判定する。状態管理情報131は、動作状態が「予約中」の場合、ステップS12bの処理を実行し、動作状態が「予約中」でない場合、処理を終了する。
[ステップS12b]排他制御部130は、状態管理情報131を「排他中」を示すように書き替える。これにより、データベースサーバ100は「排他中」に遷移する。
なお、前述のように、「予約中」の状態では、BEGIN文の受信でなくUPDATE文の受信に応じて動作状態が「排他中」に遷移してもよい。この場合、図8の処理は次のように変形される。排他制御部130は、ステップS13において動作状態が「予約中」であった場合には、動作状態を「排他中」に遷移させた後、ステップS14の処理を実行する。
図21は、第1の変形例における、排他要求に対する応答処理の例を示すフローチャートである。
[ステップS61]排他制御部130は、状態管理情報131を参照して、現在の動作状態を判定する。排他制御部130は、「予約中」の場合、ステップS62の処理を実行し、「待機中」の場合、ステップS64の処理を実行し、「排他中」または「要求中」の場合、ステップS65の処理を実行する。
[ステップS62]排他制御部130は、種別が「許諾通知」の排他制御情報を生成する。
[ステップS63]排他制御部130は、状態管理情報131を「待機中」を示すように書き替える。これにより、データベースサーバ100は「待機中」に遷移する。
[ステップS64]排他制御部130は、種別が「許諾通知」の排他制御情報を生成する。
[ステップS65]排他制御部130は、種別が「却下通知」の排他制御情報を生成する。
[ステップS66]排他制御部130は、ステップS62,S64,S65のいずれかで生成した排他制御情報をジャーナル送信部122に出力する。ジャーナル送信部122は、排他制御部130からの排他制御情報を送信キュー113に格納する。その後、この排他制御情報は送信キュー113の先頭に達するとジャーナル送信部122に取り出され、データベースサーバ200に送信される。
<第2の変形例>
第2の実施の形態および第1の変形例における排他権の獲得および放棄制御は、データベース単位の他、データベースに含まれるテーブル単位、あるいはスキーマ単位で個別に実行されてもよい。このような場合、データベースサーバ100,200の動作状態は、排他権の獲得および放棄の制御単位で管理される。
図22は、動作状態がテーブル単位で管理される場合の状態管理情報の例を示す図である。図22に示す状態管理情報131では、制御対象となるテーブルごとに、排他権に関する動作状態が記録されている。このような状態管理情報131を用いることで、排他制御部130は、テーブル単位で排他権の獲得および放棄を制御できる。
なお、上記の各実施の形態に示した装置(例えば、情報処理装置1,2、データベースサーバ100,200、アプリケーションサーバ150,250)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。