(57)【要約】【課題】トランザクションを実行する装置を円滑に切り替えられるようにする。【解決手段】記憶部１２は、実行中のトランザクション１４−１，１４−２に対応する、データベース１１に未反映の更新処理を示す更新データ１５−１，１５−２を記憶する。制御部１３は、トランザクション１４−１，１４−２を示すリスト１６を生成する。また、制御部１３は、トランザクションを実行する装置を情報処理装置１０から情報処理装置１０ａに切り替えるとき、リスト１６を情報処理装置１０ａに送信し、リスト１６に基づいて更新データ１５−１，１５−２を情報処理装置１０ａに移行する。【選択図】図１
2015191451.tif 000002
【特許請求の範囲】
【請求項１】
データベースを管理する情報処理装置であって、
実行中の１または２以上のトランザクションに対応する、前記データベースに未反映の更新処理を示す１または２以上の更新データを記憶する記憶部と、
前記１または２以上のトランザクションを示すリストを生成し、トランザクションを実行する装置を前記情報処理装置から他の情報処理装置に切り替えるとき、前記リストを前記他の情報処理装置に送信し、前記リストに基づいて前記１または２以上の更新データを前記他の情報処理装置に移行する制御部と、
を有する情報処理装置。
【請求項２】
前記制御部は、２以上のトランザクションに対応する２以上の更新データが前記記憶部に記憶されているとき、前記リストに基づいて前記２以上の更新データについて前記他の情報処理装置に移行する順序を決定する、
請求項１記載の情報処理装置。
【請求項３】
前記制御部は、前記２以上のトランザクションのうち一の未移行の更新データに対応する一のトランザクションに属する処理要求が前記情報処理装置で受信されたときは、当該一の未移行の更新データの移行順位を繰り上げる、
請求項２記載の情報処理装置。
【請求項４】
前記情報処理装置に対して一のトランザクションに属する第１の処理要求が送信されたときは、前記他の情報処理装置に対して前記第１の処理要求と同じ処理を示す第２の処理要求が送信されており、
前記制御部は、前記１または２以上の更新データの移行を開始した後は、前記情報処理装置で受信された前記第１の処理要求を破棄する、
請求項１乃至３の何れか一項に記載の情報処理装置。
【請求項５】
データベースを管理するコンピュータが実行する制御方法であって、
実行中の１または２以上のトランザクションを示すリストを生成し、
トランザクションを実行する装置を前記コンピュータから他のコンピュータに切り替えるとき、前記リストを前記他のコンピュータに送信し、前記リストに基づいて、前記データベースに未反映の更新処理を示す前記１または２以上のトランザクションに対応する１または２以上の更新データを前記他のコンピュータに移行する、
制御方法。
【請求項６】
データベースを管理するコンピュータに、
実行中の１または２以上のトランザクションを示すリストを生成し、
トランザクションを実行する装置を前記コンピュータから他のコンピュータに切り替えるとき、前記リストを前記他のコンピュータに送信し、前記リストに基づいて、前記データベースに未反映の更新処理を示す前記１または２以上のトランザクションに対応する１または２以上の更新データを前記他のコンピュータに移行する、
処理を実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、制御方法および制御プログラムに関する。
【背景技術】
【０００２】
業務に用いられる情報処理システムは、データベースを備えることが多い。例えば、データベースを管理するサーバ装置（ＤＢサーバ）を設け、ＤＢサーバが、アプリケーションソフトウェアを実行する端末装置やサーバ装置など（ＤＢクライアント）から処理要求を受け付ける。ＤＢサーバは、受け付けた処理要求に応じて、データベースに対してデータの検索や更新などの処理を行い、処理結果をＤＢクライアントに返信する。
【０００３】
ＤＢサーバは、関連する複数の処理要求に応じて行われる一連の更新処理を、１つのトランザクションとして扱うことがある。トランザクションは、一連の更新処理の全てがデータベースに対して実行されるかまたは全く実行されないことが保証され、その一部のみ実行されることはないという性質（原始性）を備える。トランザクションを完了してデータベースに反映させることをコミットと言うことがあり、トランザクションを途中で取り消してデータベースに反映させないことをロールバックと言うことがある。
【０００４】
例えば、ＤＢサーバは、更新処理を示す処理要求を受け付けると、その段階ではデータベースを更新せずに更新内容を別途記憶しておく。先の処理要求と同じトランザクションに属するコミット要求を受け付けると、ＤＢサーバは、保持している更新内容をデータベースに反映させる。また、先の処理要求と同じトランザクションに属するロールバック要求を受け付けると、ＤＢサーバは、保持している更新内容を破棄する。
【０００５】
ところで、データベースを備える情報処理システムの中には、業務サービスを停止させないように長時間連続で稼働することが期待されるものもある。一方、ＤＢサーバに障害が発生したときや保守作業を行うときなど、ＤＢサーバを一時的に停止せざるを得ないこともある。そこで、ＤＢサーバを冗長化してデータベースの可用性を高めることがある。例えば、同じ内容のデータベースを保持する２つのＤＢサーバを用意し、一方はトランザクションを扱う現用サーバに指定し、他方はトランザクションを直接は扱わず現用サーバのデータベースと同期する待機サーバに指定する。現用サーバの障害発生時や保守作業時には、トランザクションを扱うＤＢサーバを待機サーバに切り替える。
【０００６】
ＤＢサーバの切替に関して、例えば、次のような技術が提案されている。
オンライン取引を実行するホストを、切替指示に応じて正ホストから副ホストに切り替える切替方法が提案されている。この切替方法では、切替指示が出される前に正ホストに届いた要求が正ホストで処理されるのを待って、正ホストのデータベースを確定させ、確定した正ホストのデータベースと同じ内容になるように副ホストのデータベースを更新する。切替指示が出された後に正ホストに届いた要求は、正ホストで待機させておき、副ホストのデータベースが更新された後に副ホストに実行させる。
【０００７】
また、トランザクション単位で正ストレージ装置のデータベースと副ストレージ装置のデータベースとを同期させるリカバリシステムが提案されている。このリカバリシステムでは、正ストレージ装置はトランザクションをコミットするとき、そのトランザクションの更新内容を示すログを副ストレージ装置に送信する。副ストレージ装置は、受信したログに基づいて副ストレージ装置のデータベースを更新する。
【０００８】
また、本番システムから代行システムに切り替えることで本番システムの保守作業を可能にするデータベースシステムが提案されている。このデータベースシステムでは、代行システムに切り替えるとき、本番システムへの新規トランザクションの投入を停止する。本番システムで実行中のトランザクションがコミットされると、そのトランザクションの更新データを本番システムから代行システムに送信し、代行システムのデータベースを本番システムと同期させる。そして、本番システムの全てのトランザクションが終了すると、代行システムへの新規トランザクションの投入を開始する。
【０００９】
また、アプリケーションサーバが正ＤＢサーバと副ＤＢサーバの両方に対してデータ操作を要求するデータベースシステムが提案されている。このデータベースシステムでは、正ＤＢサーバと副ＤＢサーバそれぞれがデータ操作のログを生成し、正ＤＢサーバのみがアプリケーションサーバにデータ操作完了を通知する。その後、アプリケーションサーバが正ＤＢサーバと副ＤＢサーバに対してトランザクションのコミットを要求すると、正ＤＢサーバと副ＤＢサーバそれぞれがログに基づいてデータベースを更新し、正ＤＢサーバのみがアプリケーションサーバにコミット完了を通知する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０００−８９９９３号公報
【特許文献２】特開２００６−４８１０３号公報
【特許文献３】特開２０１０−３３３９８号公報
【特許文献４】特開２０１２−１５５４９９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかし、トランザクションを実行する装置を切り替えるにあたり、上記の特許文献１〜３のような提案技術では切替先の装置の負荷が一時的に増大することになる。このため、切替時にデータベースアクセスの応答性能が悪化し得るという問題がある。
【００１２】
例えば、切替元の装置で実行中のトランザクションが終了するのを待って切替先の装置に新たなトランザクションの処理要求を投入し始める方法では、切替中に溜まった大量の処理要求が切替先の装置に一時に投入されてしまう。よって、切替直後に負荷が増大して応答性能が悪化してしまう。また、切替元の装置で実行中のトランザクションはロールバックし、すぐに切替先の装置に処理要求を投入し始める方法も考えられる。しかし、この方法でも、切替元の装置でロールバックしたトランザクションを切替先の装置で最初から実行し直すことになり、切替先の装置の負荷が一時的に増大してしまう。
【００１３】
一方、上記の特許文献４のように複数の装置の間でトランザクションの途中状態も同期しておく提案技術では、通常運用時の待機系の負荷が現用系と同等程度に大きくなってしまう。よって、待機系にも多くの計算リソースを用意することになり、また、待機系の計算リソースをトランザクション制御以外に活用することが難しくなるという問題がある。
【００１４】
１つの側面では、本発明は、トランザクションを実行する装置を円滑に切り替えられるようにする情報処理装置、制御方法および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
１つの態様では、データベースを管理する、記憶部と制御部とを有する情報処理装置が提供される。記憶部は、実行中の１または２以上のトランザクションに対応する、データベースに未反映の更新処理を示す１または２以上の更新データを記憶する。制御部は、１または２以上のトランザクションを示すリストを生成し、トランザクションを実行する装置を情報処理装置から他の情報処理装置に切り替えるとき、リストを他の情報処理装置に送信し、リストに基づいて１または２以上の更新データを他の情報処理装置に移行する。
【００１６】
また、１つの態様では、データベースを管理するコンピュータが実行する制御方法が提供される。制御方法では、実行中の１または２以上のトランザクションを示すリストを生成する。トランザクションを実行する装置をコンピュータから他のコンピュータに切り替えるとき、リストを他のコンピュータに送信し、リストに基づいて、データベースに未反映の更新処理を示す１または２以上のトランザクションに対応する１または２以上の更新データを他のコンピュータに移行する。また、１つの態様では、データベースを管理するコンピュータに実行させる制御プログラムが提供される。
【発明の効果】
【００１７】
１つの側面では、トランザクションを実行する装置を円滑に切り替えられる。
【図面の簡単な説明】
【００１８】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態のデータベースシステムを示す図である。
【図３】ＤＢサーバのハードウェア例を示すブロック図である。
【図４】スイッチオーバを利用した保守作業の例を示す図である。
【図５】コネクションとトランザクションの例を示す図である。
【図６】トランザクション処理例を示す第１の図である。
【図７】トランザクション処理例を示す第２の図である。
【図８】トランザクション処理例を示す第３の図である。
【図９】トランザクション処理例を示す第４の図である。
【図１０】業務サーバとＤＢサーバの機能例を示すブロック図である。
【図１１】設定ファイルの例を示す図である。
【図１２】生存サーバリストの例を示す図である。
【図１３】メッセージの例を示す図である。
【図１４】トランザクションログの例を示す図である。
【図１５】移行リストの例を示す図である。
【図１６】ＤＢサーバ起動の手順例を示すフローチャートである。
【図１７】ＤＢサーバ起動の手順例を示すフローチャート（続き）である。
【図１８】生存被監視の手順例を示すフローチャートである。
【図１９】生存監視の手順例を示すフローチャートである。
【図２０】コマンド受信の手順例を示すフローチャートである。
【図２１】クラスタ縮退の手順例を示すフローチャートである。
【図２２】サーバ組込の手順例を示すフローチャートである。
【図２３】スイッチオーバの手順例を示すフローチャートである。
【図２４】スイッチオーバの手順例を示すフローチャート（続き）である。
【図２５】メッセージ処理の手順例を示すフローチャート（第１の図）である。
【図２６】メッセージ処理の手順例を示すフローチャート（第２の図）である。
【図２７】メッセージ処理の手順例を示すフローチャート（第３の図）である。
【図２８】第１の他のトランザクション処理例を示すシーケンス図である。
【図２９】第２の他のトランザクション処理例を示すシーケンス図である。
【図３０】第３の他のトランザクション処理例を示すシーケンス図である。
【図３１】第４の他のトランザクション処理例を示すシーケンス図である。
【発明を実施するための形態】
【００１９】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。
【００２０】
第１の実施の形態の情報処理装置１０は、冗長構成のデータベースシステムに含まれている。情報処理装置１０は、データベース管理システム（ＤＢＭＳ：Database Management System）のプログラムを実行するコンピュータであってもよい。また、情報処理装置１０は、他の情報処理装置から処理要求を受け付けるサーバ装置であってもよい。
【００２１】
情報処理装置１０は、データベース１１を管理する。データベース１１が関係データベース（ＲＤＢ：Relational Database）である場合、データベース１１は、データレコードを格納する１または２以上のテーブルを含む。データベース１１は、ＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置またはＲＡＭ（Random Access Memory）などの揮発性の記憶装置に格納され得る。この不揮発性または揮発性の記憶装置は、情報処理装置１０が備えていてもよいし、情報処理装置１０の外部に接続されていてもよい。
【００２２】
冗長構成のデータベースシステムには、更に情報処理装置１０ａが含まれる。情報処理装置１０と情報処理装置１０ａとは、ネットワークを介して通信可能である。情報処理装置１０ａは、データベース１１と同期されて同じ内容のデータを格納することになる冗長なデータベースを管理していてもよい。情報処理装置１０がトランザクションを実行する現用系として動作しているとき、情報処理装置１０ａは、トランザクションを実行しない待機系として動作する。ただし、現用系が情報処理装置１０から情報処理装置１０ａに切り替えられることがある。例えば、情報処理装置１０の保守作業が行われるとき、管理者からの指示に応じて、現用系が情報処理装置１０ａに切り替えられる。
【００２３】
情報処理装置１０は、記憶部１２および制御部１３を有する。記憶部１２は、ＨＤＤなどの不揮発性の記憶装置でもよいし、ＲＡＭなどの揮発性の記憶装置でもよい。制御部１３は、例えば、プロセッサである。プロセッサは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）であってもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の集積回路を含んでいてもよい。プロセッサは、ＲＡＭなどの記憶装置（例えば、記憶部１２）に記憶されたプログラムを実行するものであってもよい。また、２以上のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００２４】
記憶部１２は、更新データ１５−１，１５−２を記憶する。更新データ１５−１は、コミットもロールバックもされていない情報処理装置１０で実行中のトランザクション１４−１（Ｔｒ１）に対応し、データベース１１に未反映の更新処理の内容を示す。同様に、更新データ１５−２は、情報処理装置１０で実行中のトランザクション１４−２（Ｔｒ２）に対応し、データベース１１に未反映の更新処理の内容を示す。
【００２５】
更新データ１５−１は、例えば、データベース１１に対して実行する命令、または、データベース１１に含まれる更新前のデータと更新後のデータの対応を示す。トランザクション１４−１について更新処理を示す処理要求が発生すると、データベース１１が更新される代わりに更新データ１５−１が生成または更新される。トランザクション１４−１についてコミット要求が発生すると、更新データ１５−１に基づいてデータベース１１が更新される。このとき、２以上のテーブルが纏めて更新されることもある。一方、トランザクション１４−１についてロールバック要求が発生すると、更新データ１５−１がデータベース１１に反映されずに破棄される。同様に、更新データ１５−２についても、トランザクション１４−２の状態に応じて生成・更新・破棄などが行われる。
【００２６】
制御部１３は、情報処理装置１０で実行中のトランザクション１４−１，１４−２を示すリスト１６を生成する。リスト１６は、例えば、トランザクション１４−１，１４−２の識別情報を含む。トランザクションを実行する現用系が情報処理装置１０から情報処理装置１０ａに切り替わるとき、制御部１３は、リスト１６のコピーを情報処理装置１０ａに送信する。リスト１６は、現用系の切替が指示されたときに生成してもよいし、切替が指示される前に生成しておいてもよい。後者の場合、例えば、情報処理装置１０は、実行中のトランザクションが変化する毎にリスト１６を更新して最新状態を維持する。
【００２７】
また、制御部１３は、現用系が情報処理装置１０ａに切り替わるとき、リスト１６に基づいて更新データ１５−１，１５−２を情報処理装置１０ａに移行する。例えば、制御部１３は、更新データ１５−１，１５−２を順次移行していき、各トランザクションの更新データが移行済か否かを、リスト１６を用いて管理する。制御部１３は、情報処理装置１０ａに移行する順序をリスト１６に基づいて決定してもよい。このとき、制御部１３は、トランザクション１４−２に属する処理要求を情報処理装置１０が受け付けた場合、更新データ１５−２の移行順位を繰り上げ、その処理要求に対応する処理を情報処理装置１０ａに実行させるようにしてもよい。また、制御部１３は、情報処理装置１０が切替命令を受け付ける前に、トランザクション１４−１に属する処理要求を受け付けていた場合、更新データ１５−１の移行順位を繰り下げ、その処理要求に対応する処理を情報処理装置１０の実行が完了するまでトランザクションの更新データの移行を待たせてもよい。情報処理装置１０ａも、受信したリスト１６のコピーを用いて、各トランザクションの更新データが移行済か否かを管理できる。
【００２８】
第１の実施の形態の情報処理装置１０によれば、トランザクションを実行する現用系が情報処理装置１０ａに切り替わるときに、リスト１６を用いて、実行中のトランザクション１４−１，１４−２を情報処理装置１０ａに引き継ぐことが可能となる。よって、トランザクション１４−１，１４−２を一旦ロールバックして情報処理装置１０ａに引き継がない場合と比べて、現用系を切り替えた後に大量の処理要求が情報処理装置１０ａに集中するのを抑制でき、情報処理装置１０ａの負荷を低減できる。よって、データベースシステムのレスポンス性能の悪化を抑え、無停止で現用系を切り替えることが可能となる。
【００２９】
また、コミット前のトランザクション１４−１，１４−２の状態を情報処理装置１０，１０ａ間で継続的に同期する場合と比べて、現用系を切り替えるときのみ引き継ぎを行えばよく、待機系として動作中の情報処理装置１０ａの負荷を低減できる。よって、待機系として動作する情報処理装置１０ａの計算リソース（ＣＰＵリソースなど）を、更新を伴わないデータ処理など他の処理に利用でき、計算リソースを有効活用できる。
【００３０】
［第２の実施の形態］
図２は、第２の実施の形態のデータベースシステムを示す図である。
第２の実施の形態のデータベースシステムは、データベースを管理するＤＢサーバを冗長化し、データベースの可用性を向上させたものである。このデータベースシステムは、業務サーバ２０，２０ａ、端末装置３１およびＤＢサーバ１００，１００ａ，１００ｂを有する。上記の装置は、ネットワーク３０に接続されている。
【００３１】
業務サーバ２０，２０ａは、業務に用いられるアプリケーションソフトウェアを実行するサーバコンピュータである。データベースを利用するアプリケーションソフトウェアが稼働しているとき、業務サーバ２０，２０ａは、ＤＢ１００，１００ａ，１００ｂとコネクションを確立しておく。業務サーバ２０，２０ａは、ＤＢサーバ１００，１００ａ，１００ｂにメッセージを送信し、何れかのＤＢサーバから処理結果を受信する。業務サーバ２０，２０ａは、ＤＢサーバ１００，１００ａ，１００ｂにとって、データ処理を要求する「ＤＢクライアント」であると言うことができる。なお、ユーザが操作するクライアントコンピュータをＤＢクライアントとして用いることも可能である。
【００３２】
端末装置３１は、データベースシステムの管理者が操作するクライアントコンピュータである。管理者は、業務サーバ２０，２０ａを用いた業務サービスを停止させずに、ＤＢサーバ１００，１００ａ，１００ｂのうち一部のＤＢサーバに対して保守作業を行うことがある。保守作業としては、例えば、ＤＢサーバ１００，１００ａ，１００ｂで動作するソフトウェアのアップデートやハードウェア部品の交換などが挙げられる。継続的にＤＢサーバ１００，１００ａ，１００ｂのソフトウェアやハードウェアの保守を行うことで、障害発生による業務サービスの異常停止を抑制することができる。
【００３３】
保守作業が行われるとき、端末装置３１は、業務サーバ２０，２０ａに処理結果を通知する現用状態のＤＢサーバに対して、現用状態のＤＢサーバの切替を指示するコマンドを送信する。コマンドに応じて現用状態のＤＢサーバを切り替えることを、「スイッチオーバ」と言うことがある。スイッチオーバが行われると、切替元のＤＢサーバは、業務サーバ２０，２０ａとの間のコネクションを切断してＤＢＭＳを停止させる。これにより、切替元のＤＢサーバに対して保守作業を行うことができる。スイッチオーバ後は、切替先のＤＢサーバが現用状態になり、業務サーバ２０，２０ａに処理結果を通知する。スイッチオーバ中に、ハートビートなどにより異常を検知した場合は、本発明のトランザクションを示すリストを使用したトランザクションの移行をせずに、フェイルオーバーによる移行元から移行先への切り替えを行う。
【００３４】
ＤＢサーバ１００，１００ａ，１００ｂは、それぞれデータベースを保持するサーバコンピュータである。ＤＢサーバ１００，１００ａ，１００ｂのデータベースは、格納されるデータが同じになるように同期されている。ＤＢサーバ１００，１００ａ，１００ｂの全てが稼働している場合、１つのＤＢサーバ（例えば、ＤＢサーバ１００）が現用状態であり、他のＤＢサーバ（例えば、ＤＢサーバ１００ａ，１００ｂ）が待機状態である。
【００３５】
現用状態のＤＢサーバは、業務サーバ２０，２０ａからのメッセージに応じてデータ処理を行い、処理結果を業務サーバ２０，２０ａに通知する。現用状態のＤＢサーバでは、トランザクションが実行され得る。一方、待機状態のＤＢサーバは、業務サーバ２０，２０ａからメッセージを受信してもデータ処理を行わず、処理結果を業務サーバ２０，２０ａに通知しない。待機状態のＤＢサーバでは、トランザクションが直接的には実行されない。ただし、現用状態のＤＢサーバでデータベースが更新されると、待機状態のＤＢサーバもデータベースを更新し、現用状態のＤＢサーバのデータベースと同期させる。
【００３６】
図３は、ＤＢサーバのハードウェア例を示すブロック図である。
ＤＢサーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。これらのユニットはバスに接続されている。ＣＰＵ１０１は、第１の実施の形態の制御部１３の一例である。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１２の一例である。業務サーバ２０，２０ａ、端末装置３１およびＤＢサーバ１００ａ，１００ｂも、ＤＢサーバ１００と同様のハードウェアを用いて実現可能である。
【００３７】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、ＤＢサーバ１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００３８】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ＤＢサーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３９】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、ＤＢサーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４０】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ＤＢサーバ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４１】
入力信号処理部１０５は、ＤＢサーバ１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、ＤＢサーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４２】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４３】
通信インタフェース１０７は、ネットワーク３０に接続され、ネットワーク３０を介して業務サーバ２０，２０ａやＤＢサーバ１００ａ，１００ｂと通信を行うインタフェースである。通信インタフェース１０７は、ケーブルで通信装置と接続される有線通信インタフェースでもよいし、基地局と無線で接続される無線通信インタフェースでもよい。
【００４４】
なお、ＤＢサーバ１００は、媒体リーダ１０６を備えていなくてもよく、ユーザが操作する端末装置から制御可能である場合には画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、ＤＢサーバ１００の筐体と一体に形成されていてもよい。
【００４５】
図４は、スイッチオーバを利用した保守作業の例を示す図である。
ＤＢサーバ１００は、データベース１２１とＤＢＭＳ１３１を有する。データベース１２１は、ＨＤＤ１０３またはＲＡＭ１０２に保存されている。ＤＢＭＳ１３１は、例えば、ＣＰＵ１０１が実行するミドルウェアとして実装される。同様に、ＤＢサーバ１００ａはデータベース１２１ａとＤＢＭＳ１３１ａを有し、ＤＢサーバ１００ｂはデータベース１２１ｂとＤＢＭＳ１３１ｂを有する。ここでは、ＤＢサーバ１００が現用状態として稼働し、ＤＢサーバ１００ａ，１００ｂが待機状態として稼働しているとする。
【００４６】
業務サーバ２０は、ＤＢサーバ１００，１００ａ，１００ｂそれぞれとコネクションを確立する。ＤＢサーバ１００，１００ａ，１００ｂによって管理されるデータにアクセスする場合、業務サーバ２０は、検索要求や更新要求などの処理要求を示すメッセージを、ＤＢサーバ１００，１００ａ，１００ｂに送信する。待機状態のＤＢサーバ１００ａ，１００ｂは、業務サーバ２０から受信したメッセージを破棄する。一方、現用状態のＤＢサーバ１００は、受信したメッセージに応じて、データベース１２１からのデータの検索やデータベース１２１の更新などの処理を行い、処理結果を業務サーバ２０に通知する。
【００４７】
ここで、ＤＢサーバ１００に対して保守作業が行われる場合、端末装置３１はＤＢサーバ１００に対して切替命令を送信する。これにより、現用状態のＤＢサーバ１００と１つの待機状態のＤＢサーバ（ここでは、ＤＢサーバ１００ａ）の間でスイッチオーバが実行される。スイッチオーバ中も、業務サーバ２０からＤＢサーバ１００，１００ａ，１００ｂには処理要求が送信され得る。切替元のＤＢサーバ１００は、業務サーバ２０から受信したメッセージを破棄するようになる。スイッチオーバに関与しない待機状態のＤＢサーバ１００ｂは、引き続き業務サーバ２０から受信したメッセージを破棄する。一方、切替先のＤＢサーバ１００ａは、受信したメッセージに応じた処理を行い、処理結果を業務サーバ２０に通知するようになる。なお、後述するように、切替元のＤＢサーバ１００で実行中であったトランザクションは、切替先のＤＢサーバ１００ａに引き継がれる。
【００４８】
ＤＢサーバ１００からＤＢサーバ１００ａへのスイッチオーバが完了すると、切替元のＤＢサーバ１００は、業務サーバ２０との間のコネクションを切断し、ＤＢＭＳ１３１を停止させる。これにより、ＤＢサーバ１００は停止状態に遷移し、保守作業を行うことが可能となる。切替先のＤＢサーバ１００ａは、現用状態に遷移する。ＤＢサーバ１００の保守作業が終わると、ＤＢＭＳ１３１を起動させ、ＤＢサーバ１００を待機状態としてデータベースシステムに再び組み込むことが可能である。スイッチオーバによって現用状態のＤＢサーバを次々と切り替えていくことで、ＤＢサーバ１００，１００ａ，１００ｂに対して順に保守作業を行うことができる。このような方法で複数のコンピュータのソフトウェアおよびハードウェアをアップデートすることを「ローリングアップデート」と言うことがある。
【００４９】
次に、コネクションとトランザクションの関係について説明する。
図５は、コネクションとトランザクションの例を示す図である。
業務サーバ２０は、業務サーバ２０上でのアプリケーションソフトウェアの実行状況に応じて、ＤＢサーバ１００，１００ａ，１００ｂそれぞれとの間に１または２以上のコネクションを確立する。業務サーバ２０は、異なるアプリケーションソフトウェアからの要求に応じて、同一のＤＢサーバとの間に複数のコネクションを確立することがある。
【００５０】
例えば、業務サーバ２０は、ＤＢサーバ１００との間にコネクション＃１１，＃１３を確立し、ＤＢサーバ１００ａとの間にコネクション＃２１，＃２３を確立する。各コネクションの識別情報として、コネクション＃１１にはセッションＩＤ＝Ａが付与され、コネクション＃１３にはセッションＩＤ＝Ｃが付与される。これに対し、コネクション＃２１にはコネクション＃１１と同じセッションＩＤ＝Ａが付与され、コネクション＃２３にはコネクション＃１３と同じセッションＩＤ＝Ｃが付与される。
【００５１】
ＤＢサーバの異なる２つのコネクションに同じセッションＩＤが付与されるのは、要求元の業務サーバやアプリケーションソフトウェアが同じであり、且つ、同じＤＢＭＳプログラムに従ってＤＢサーバ１００，１００ａがセッションＩＤを決定するためである。同様に、例えば、業務サーバ２０ａは、ＤＢサーバ１００との間にコネクション＃１２を確立し、ＤＢサーバ１００ａとの間にコネクション＃２２を確立する。各コネクションの識別情報として、コネクション＃１２にはセッションＩＤ＝Ｂが付与され、コネクション＃２２にはコネクション＃１２と同じセッションＩＤ＝Ｂが付与される。
【００５２】
業務サーバ２０，２０ａおよびＤＢサーバ１００，１００ａ，１００ｂは、異なるタイミングで送信される複数の処理要求に応じた一連の更新処理を、１つのトランザクションとして扱うことがある。業務サーバ２０，２０ａおよびＤＢサーバ１００，１００ａ，１００ｂは、１つのセッションＩＤにつき同時に１つのトランザクションのみ発生させることができる。あるトランザクションがコミットまたはロールバックによって終了すると、同じコネクション上で次のトランザクションを発生させることが可能である。
【００５３】
例えば、業務サーバ２０は、更新要求をコネクション＃１１上で送信し、同じ内容の更新要求をコネクション＃２１上で送信する。ＤＢサーバ１００は、コネクション＃１１上で更新要求を受信し、トランザクションＩＤを付与してトランザクション＃１を発生させる。一方、ＤＢサーバ１００ａは、コネクション＃２１で受信した更新要求を破棄する。以降、業務サーバ２０は、トランザクション＃１に属する処理要求をコネクション＃１１上で送信し、同じ内容の処理要求をコネクション＃２１上で送信する。業務サーバ２０は、更新内容をデータベースに反映させる場合はコミット要求を送信し、取り消す場合はロールバック要求を送信する。これにより、トランザクション＃１が終了する。
【００５４】
トランザクション＃１が終了した後、業務サーバ２０は、コネクション＃１１上でトランザクション＃４に属する処理要求を送信することができる。このとき、業務サーバ２０は、同じ内容の処理要求をコネクション＃２１上で送信する。また、例えば、業務サーバ２０は、トランザクション＃１と並行して、コネクション＃１３上でトランザクション＃３に属する処理要求を送信する。このとき、業務サーバ２０は、同じ内容の処理要求をコネクション＃２３上で送信する。また、業務サーバ２０ａは、トランザクション＃１と並行して、コネクション＃１２上でトランザクション＃２に属する処理要求を送信する。このとき、業務サーバ２０ａは、同じ内容の処理要求をコネクション＃２２上で送信する。
【００５５】
次に、ＤＢサーバ１００，１００ａ，１００ｂによるトランザクションの制御と、スイッチオーバ中のトランザクションの引き継ぎについて説明する。
図６は、トランザクション処理例を示す第１の図である。
【００５６】
トランザクション＃０を発生させるような処理要求を業務サーバ２０がＤＢサーバ１００，１００ａ，１００ｂに送信すると、現用状態のＤＢサーバ１００は、更新するデータの取得などデータベース１２１を更新する前までの処理を実行する。そして、ＤＢサーバ１００は、更新内容などトランザクション＃０の状態を示すトランザクションログ１５０を生成して保持する。また、ＤＢサーバ１００は、ＤＢサーバ１００が保持する移行リスト１４１にトランザクション＃０を登録し、その移行状態を「未移行」に設定する。一方、待機状態のＤＢサーバ１００ａ，１００ｂは、業務サーバ２０から受信した処理要求を破棄する。なお、図６〜９では、ＤＢサーバ１００ｂの動作の記載を省略している。
【００５７】
その後、業務サーバ２０がトランザクション＃０のコミット要求をＤＢサーバ１００，１００ａ，１００ｂに送信すると、ＤＢサーバ１００は、トランザクションログ１５０が示す更新内容をデータベース１２１に反映させる。また、ＤＢサーバ１００は、トランザクションログ１５０のコピーであるトランザクションログ１５０ａを、待機状態のＤＢサーバ１００ａ，１００ｂに送信する。ＤＢサーバ１００ａは、業務サーバ２０から受信したコミット要求を破棄し、ＤＢサーバ１００から受信したトランザクションログ１５０ａが示す更新内容をデータベース１２１ａに反映させる。ＤＢサーバ１００ｂも、ＤＢサーバ１００ａと同様の処理を行う。そして、ＤＢサーバ１００は、トランザクションログ１５０を削除し、移行リスト１４１からトランザクション＃０の情報を消去する。
【００５８】
図７は、トランザクション処理例を示す第２の図である。
ここでは、図５で説明したトランザクション＃１，＃２，＃３がＤＢサーバ１００で実行中であるとする。ＤＢサーバ１００は、トランザクション＃１に対応するトランザクションログ１５１と、トランザクション＃２に対応するトランザクションログ１５２と、トランザクション＃３に対応するトランザクションログ１５３を有する。また、ＤＢサーバ１００が有する移行リスト１４１には、トランザクション＃１，＃２，＃３が登録されており、各トランザクションの移行状態が「未移行」に設定されている。
【００５９】
このとき、端末装置３１がＤＢサーバ１００に切替命令を送信したとする。すると、ＤＢサーバ１００からＤＢサーバ１００ａへのスイッチオーバが行われる。切替元のＤＢサーバ１００は、移行リスト１４１のコピーである移行リスト１４１ａをＤＢサーバ１００ａに送信する。その後、ＤＢサーバ１００は、移行リスト１４１に従って、トランザクションログ１５１，１５２，１５３を１つずつＤＢサーバ１００ａに送信していく。送信順序は、例えば、トランザクションが移行リスト１４１に登録された順（発生タイミングが早い順）とする。ただし、任意の順序で送信するようにしてもよい。
【００６０】
例えば、ＤＢサーバ１００は、移行リスト１４１の先頭に登録されているトランザクション＃１を最初に選択する。すると、ＤＢサーバ１００は、トランザクション＃１に対応するトランザクションログ１５１のコピーであるトランザクションログ１５１ａを、ＤＢサーバ１００ａに送信する。ＤＢサーバ１００は、移行リスト１４１に記載されたトランザクション＃１の移行状態を「移行済」に更新し、ＤＢサーバ１００ａは、移行リスト１４１ａに記載されたトランザクション＃１の移行状態を「移行済」に更新する。
【００６１】
図８は、トランザクション処理例を示す第３の図である。
スイッチオーバ中であっても、ＤＢサーバ１００，１００ａ，１００ｂは、業務サーバ２０，２０ａから処理要求を受信する可能性がある。前述のようにトランザクション＃１がＤＢサーバ１００からＤＢサーバ１００ａに引き継がれた後、業務サーバ２０がトランザクション＃１に属する処理要求をＤＢサーバ１００，１００ａ，１００ｂに送信したとする。切替元のＤＢサーバ１００は、この処理要求を破棄する。切替先のＤＢサーバ１００ａは、移行リスト１４１ａを参照して、トランザクション＃１の移行状態が「移行済」であることを検知する。すると、ＤＢサーバ１００ａは、ＤＢサーバ１００から受信したトランザクションログ１５１ａを用いて、トランザクション＃１の処理を進める。なお、ＤＢサーバ１００ｂは、業務サーバ２０から受信した処理要求を破棄する。
【００６２】
次に、業務サーバ２０がトランザクション＃３に属する処理要求をＤＢサーバ１００，１００ａ，１００ｂに送信したとする。ＤＢサーバ１００は、この処理要求を破棄する。また、ＤＢサーバ１００は、移行リスト１４１を参照して、トランザクション＃３の移行状態が「未移行」であることを検知する。すると、ＤＢサーバ１００は、トランザクション＃３に対応するトランザクションログ１５３の移行順位が早くなるように、移行リスト１４１を更新する。ＤＢサーバ１００ａは、移行リスト１４１ａを参照して、トランザクション＃３の移行状態が「未移行」であることを検知する。すると、ＤＢサーバ１００ａは、処理要求をバッファに格納して、移行状態が「移行済」になるのを待つ。なお、ＤＢサーバ１００ｂは、業務サーバ２０から受信した処理要求を破棄する。
【００６３】
図９は、トランザクション処理例を示す第４の図である。
トランザクション＃３の移行順位が繰り上がることで、ＤＢサーバ１００は、次にトランザクション＃２をスキップしてトランザクション＃３を選択する。トランザクション＃３は、例えば、移行リスト１４１の中で、最も前方に登録されている「未移行」のトランザクションである。すると、ＤＢサーバ１００は、トランザクション＃３に対応するトランザクションログ１５３のコピーであるトランザクションログ１５３ａを、ＤＢサーバ１００ａに送信する。ＤＢサーバ１００は、移行リスト１４１に記載されたトランザクション＃３の移行状態を「移行済」に更新し、ＤＢサーバ１００ａは、移行リスト１４１ａに記載されたトランザクション＃３の移行状態を「移行済」に更新する。
【００６４】
ＤＢサーバ１００ａは、トランザクション＃３の移行状態が「移行済」に変わったことを検知すると、バッファからトランザクション＃３の処理要求を取り出す。ＤＢサーバ１００ａは、トランザクション＃３に対応するトランザクションログ１５３ａを用いて、その処理要求に応じた処理を実行し、業務サーバ２０に処理結果を通知する。このように、スイッチオーバが開始されると、業務サーバ２０からのメッセージは切替先のＤＢサーバ１００ａによって処理され、ＤＢサーバ１００ａから業務サーバ２０に処理結果が通知される。このとき、当該メッセージが未移行のトランザクションに属するものである場合、切替元のＤＢサーバ１００はそのトランザクションの移行順位を繰り上げ、ＤＢサーバ１００ａはそのトランザクションが移行されてからメッセージを処理する。
【００６５】
次に、ＤＢサーバ１００の機能およびＤＢサーバ１００が実行する処理について説明する。ＤＢサーバ１００ａ，１００ｂも、同様の機能を有し同様の処理を行う。
図１０は、業務サーバとＤＢサーバの機能例を示すブロック図である。
【００６６】
業務サーバ２０は、プログラム記憶部２１、ユーザプログラム制御部２２、ＤＢアクセス部２３および通信制御部２４を有する。プログラム記憶部２１は、例えば、業務サーバ２０が備えるＲＡＭまたはＨＤＤに確保した記憶領域として実現される。ユーザプログラム制御部２２、ＤＢアクセス部２３および通信制御部２４は、例えば、業務サーバ２０が実行するソフトウェアのモジュールとして実現される。
【００６７】
プログラム記憶部２１は、ユーザが作成したアプリケーションソフトウェアのプログラム（ユーザプログラム）を記憶する。ユーザプログラムが起動すると、ユーザプログラムの実行インスタンスである「プロセス」が生成される。ユーザプログラムの中には、１つのプロセスの中で、並行して実行可能な１または２以上の「スレッド」を生成するものもある。また、ユーザプログラムの中には、データベースとの間のコネクションを生成するよう要求し、そのコネクションを指定して処理要求を出力するものもある。データベースとの間のコネクションは、スレッド毎に生成することが可能である。
【００６８】
ユーザプログラム制御部２２は、プログラム記憶部２１に記憶されたユーザプログラムを起動し、業務サーバ２０におけるユーザプログラムの実行を制御する。
ＤＢアクセス部２３は、ユーザプログラム制御部２２によって起動されたプロセスまたはスレッドからの要求に応じて、データベースへのアクセスを実行する。コネクションの確立が要求された場合、ＤＢアクセス部２３は、３つのコネクション要求を生成してＤＢサーバ１００，１００ａ，１００ｂ宛てのメッセージとして出力する。複数のサーバへコネクションを確立する要求を生成するときは、１つのコネクション要求を生成して、マルチキャストに対応したネットワーク機器を使用して、ＤＢサーバ１００，１００ａ，１００ｂ宛てのメッセージとして出力してもよい。データベースの検索や更新などが要求された場合、ＤＢアクセス部２３は、３つの処理要求を生成してＤＢサーバ１００，１００ａ，１００ｂ宛てのメッセージとして出力する。トランザクションのコミットまたはロールバックが要求された場合、ＤＢアクセス部２３は、３つのコミット要求またはロールバック要求を生成してＤＢサーバ１００，１００ａ，１００ｂ宛てのメッセージとして出力する。また、ＤＢアクセス部２３は、何れかのＤＢサーバから結果通知を受け取ると、その結果通知が指定するプロセスまたはスレッドに渡す。
【００６９】
通信制御部２４は、ネットワーク３０を介した通信を制御する。通信制御部２４は、ＤＢアクセス部２３からメッセージを受け付け、ＤＢアクセス部２３から指定されたＤＢサーバにそのメッセージを送信する。また、通信制御部２４は、何れかのＤＢサーバから結果通知を受信し、受信した結果通知をＤＢアクセス部２３に渡す。
【００７０】
ＤＢサーバ１００は、データベース１２１、ログ記憶部１２２、サーバ情報記憶部１２３、移行リスト記憶部１２４、メッセージバッファ１２５、ＤＢＭＳ１３１および通信制御部１３５を有する。ログ記憶部１２２、サーバ情報記憶部１２３、移行リスト記憶部１２４およびメッセージバッファ１２５は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現される。通信制御部１３５は、例えば、ＤＢサーバ１００が実行するソフトウェアのモジュールとして実現される。
【００７１】
データベース１２１は、前述のように、データを記憶する。データベース１２１が関係データベース（ＲＤＢ）である場合、データベース１２１は、１または２以上のテーブルを記憶する。データベース１２１は、データ構造の定義情報を記憶していてもよい。
【００７２】
ログ記憶部１２２は、図６のトランザクションログ１５０や図７のトランザクションログ１５１〜１５３などのトランザクションログを記憶する。１つのトランザクションログは、１つのトランザクションに対応し、当該トランザクションの状態を示す。各トランザクションログは、処理要求を受け付けたコネクションを示すセッションＩＤや、データベースに未反映の更新内容を示す更新データなどを含んでいる。
【００７３】
サーバ情報記憶部１２３は、ＤＢサーバ１００を起動するときに参照される設定ファイルを記憶する。設定ファイルは、ユーザによって作成される。設定ファイルには、現用状態のＤＢサーバを決定するときに用いられる情報が記載される。
【００７４】
移行リスト記憶部１２４は、図６の移行リスト１４１を記憶する。前述のように、移行リスト１４１は、ＤＢサーバ１００において実行中のトランザクションを示す。移行リスト１４１は、トランザクションの生成や終了に応じて更新され、また、スイッチオーバ中に他のＤＢサーバにトランザクションを移行するときに参照される。
【００７５】
メッセージバッファ１２５は、業務サーバ２０，２０ａから受信したメッセージのうち、すぐに処理できないメッセージを一時的に記憶する。例えば、メッセージバッファ１２５は、図８のトランザクション＃３に属する処理要求を記憶する。
【００７６】
ＤＢＭＳ１３１は、業務サーバ２０，２０ａからメッセージを受け付け、データベース１２１へのアクセスを制御する。また、ＤＢＭＳ１３１は、データベース１２１と他のＤＢサーバのデータベースとの間の同期を制御する。ＤＢＭＳ１３１は、クラスタ制御部１３２、切替部１３３およびメッセージ処理部１３４を有する。
【００７７】
クラスタ制御部１３２は、サーバ情報記憶部１２３に記憶された設定ファイルを参照して、ＤＢＭＳ１３１の起動処理を行う。また、クラスタ制御部１３２は、他のＤＢサーバの稼働状況を監視し、他のＤＢサーバの稼働状況に応じてＤＢサーバ１００の状態（現用状態、待機状態または停止状態）を決定する。また、クラスタ制御部１３２は、端末装置３１からコマンドを受け付け、コマンドに応じてＤＢサーバ１００の状態を決定する。ただし、スイッチオーバを示すコマンドである切替命令は、端末装置３１から切替命令を受信した他のＤＢサーバ経由で転送されることもある。切替命令を受け付けた場合は、クラスタ制御部１３２は、切替命令を切替部１３３に出力する。
【００７８】
切替部１３３は、クラスタ制御部１３２から切替命令を取得すると、トランザクションの引き継ぎを制御する。ＤＢサーバ１００が現用状態の場合、ＤＢサーバ１００はトランザクションを引き渡す切替元になり得る。ＤＢサーバ１００が待機状態の場合、ＤＢサーバ１００はトランザクションを受け入れる切替先になり得る。ＤＢサーバ１００が切替元である場合、切替部１３３は、移行リスト記憶部１２４に記憶された移行リスト１４１を参照して、ログ記憶部１２２に格納されたトランザクションログを切替先のＤＢサーバに順次送信していく。ＤＢサーバ１００が切替先である場合、切替部１３３は、切替元から移行リスト１４１を取得して移行リスト記憶部１２４に保存し、移行リスト１４１を参照して、切替元からトランザクションログを順次取得しログ記憶部１２２に保存する。
【００７９】
メッセージ処理部１３４は、業務サーバ２０，２０ａから、検索要求・更新要求・コミット要求・ロールバック要求などのメッセージを取得する。ＤＢサーバ１００が待機状態である場合、メッセージ処理部１３４は、取得したメッセージを破棄し、要求されている処理を行わない。ＤＢサーバ１００が現用状態である場合、メッセージ処理部１３４は、取得したメッセージに応じた処理を行い、処理結果をメッセージの送信元に通知する。
【００８０】
ここで、更新要求によって新たなトランザクションが発生する場合、メッセージ処理部１３４は、そのトランザクションに対応するトランザクションログを生成してログ記憶部１２２に格納する。トランザクションに属する更新要求に対しては、メッセージ処理部１３４は、更新内容をデータベース１２１に反映させずにトランザクションログに記載しておく。その後、コミット要求を取得した場合、メッセージ処理部１３４は、ログ記憶部１２２に記憶されたトランザクションログに基づいてデータベース１２１を更新する。ロールバック要求を取得した場合、メッセージ処理部１３４は、ログ記憶部１２２に記憶されたトランザクションログを破棄することで、トランザクションの更新処理を取り消す。
【００８１】
ただし、ＤＢサーバ１００がスイッチオーバの切替先である場合、メッセージ処理部１３４は、業務サーバ２０，２０ａから取得するメッセージを切替元のＤＢサーバに代わって処理する。移行済のトランザクションに関するメッセージを取得した場合、メッセージ処理部１３４は、ログ記憶部１２２に格納された当該トランザクションに対応するトランザクションログを用いてメッセージを処理する。未移行のトランザクションに関するメッセージを取得した場合、メッセージ処理部１３４は、そのメッセージをメッセージバッファ１２５に一時的に保存し、当該トランザクションが移行されるのを待つ。
【００８２】
通信制御部１３５は、ネットワーク３０を介した通信を制御する。通信制御部１３５は、業務サーバ２０，２０ａからメッセージを受信し、受信したメッセージをメッセージ処理部１３４に渡す。また、通信制御部１３５は、メッセージ処理部１３４から処理結果を受け付け、メッセージに対する応答として業務サーバ２０，２０ａに送信する。また、通信制御部１３５は、端末装置３１からコマンドを受信し、受信したコマンドをクラスタ制御部１３２に渡す。また、通信制御部１３５は、ＤＢサーバ１００ａ，１００ｂとの間で、トランザクションログ、移行リスト１４１、コマンドなどを送受信する。
【００８３】
図１１は、設定ファイルの例を示す図である。
設定ファイル１４２は、上記のサーバ情報記憶部１２３に記憶されている。設定ファイル１４２には、パラメータと値の組が記載される。設定ファイル１４２に記載されるパラメータには、ClusterServersおよびStartupTimerが含まれる。
【００８４】
パラメータClusterServersは、クラスタシステムに参加している複数のＤＢサーバを示す。パラメータClusterServersの値として、ＤＢサーバを識別するサーバＩＤが列挙される。サーバＩＤは、優先度の高いサーバの順に列挙しておく。正常に稼働している（生存している）ＤＢサーバのうち、最も優先度が高いものが現用状態として動作する。
【００８５】
パラメータStartupTimerは、生存確認メッセージに対する応答の最大待ち時間を示す。パラメータStartupTimerの値として、待ち時間の閾値である秒数が与えられる。ＤＢＭＳ１３１が起動すると、ＤＢサーバ１００の状態を決定するため、ＤＢサーバ１００は他のＤＢサーバに生存確認メッセージを送信する。ＤＢサーバ１００は、生存確認メッセージを送信してからStartupTimer秒経過する前に応答があったＤＢサーバを、生存していると判定する。一方、ＤＢサーバ１００は、生存確認メッセージを送信してからStartupTimer秒経過しても応答がないＤＢサーバを、生存していないと判定する。
【００８６】
図１２は、生存サーバリストの例を示す図である。
生存サーバリスト１４３は、ＤＢＭＳ１３１が起動したときに生成され、上記のサーバ情報記憶部１２３に格納される。生存サーバリスト１４３は、サーバＩＤ、ＩＰ（Internet Protocol）アドレス、ポート番号および優先度の項目を含む。
【００８７】
サーバＩＤの項目には、生存を判断できたＤＢサーバ（ＤＢサーバ１００自身を含む）を識別するサーバＩＤが登録される。サーバＩＤは、各ＤＢサーバに対して予め指定されている。例えば、ＤＢサーバ１００のサーバＩＤがＳＶ１、ＤＢサーバ１００ａのサーバＩＤがＳＶ２、ＤＢサーバ１００ｂのサーバＩＤがＳＶ３である。ＩＰアドレスの項目には、生存を判断できたＤＢサーバが使用しているＩＰアドレスが登録される。ポート番号の項目には、生存を判断できたＤＢサーバがＤＢサーバ間のメッセージ通信に使用しているポート番号が登録される。優先度の項目には、生存を判断できたＤＢサーバの優先度が登録される。優先度は、設定ファイル１４２から判断できる。図１２の例では、「１」が最も優先度が高く、「２」「３」はそれよりも優先度が低いことを示している。
【００８８】
図１３は、メッセージの例を示す図である。
メッセージ１４４は、業務サーバ２０からＤＢサーバ１００，１００ａ，１００ｂに送信され得る。メッセージ１４４は、クライアントＩＤ、クライアントＩＰアドレス、クライアントポート番号、クライアントプロセスＩＤ、クライアントスレッドＩＤ、セッションＩＤ、要求時刻、要求種別、対象リソースおよび入力データの項目を含む。
【００８９】
クライアントＩＤの項目には、送信元の業務サーバの識別情報が登録される。クライアントＩＤは、各業務サーバに対して予め指定されている。クライアントＩＰアドレスの項目には、送信元の業務サーバが使用しているＩＰアドレスが登録される。クライアントポート番号の項目には、メッセージ１４４の送信に用いた送信元ポート番号が登録される。クライアントプロセスＩＤの項目には、メッセージ１４４の送信を指示したプロセスを識別するプロセスＩＤが登録される。クライアントスレッドＩＤの項目には、メッセージ１４４の送信を指示したスレッドを識別するスレッドＩＤが登録される。セッションＩＤの項目には、メッセージ１４４の送信に用いるコネクションの識別情報が登録される。
【００９０】
なお、セッションＩＤは、コネクション確立時に、クライアントＩＤ・クライアントＩＰアドレス・クライアントポート番号・クライアントプロセスＩＤ・クライアントスレッドＩＤから、所定のアルゴリズムに従って生成される。このため、同じスレッドがＤＢサーバ１００，１００ａ，１００ｂそれぞれとコネクションを確立した場合、これら３つのコネクションに付与されるセッションＩＤは同一となる。
【００９１】
要求時刻の項目には、送信元の業務サーバが付与するタイムスタンプとして、メッセージ１４４の生成時刻が登録される。要求種別の項目には、処理の種別が登録される。例えば、要求種別として、データ検索を示す「ＳＥＬＥＣＴ」、データ挿入を示す「ＩＮＳＥＲＴ」、データ書換を示す「ＵＰＤＡＴＥ」、データ消去を示す「ＤＥＬＥＴＥ」などが挙げられる。対象リソースの項目には、データベース名・スキーマ名・テーブル名・パーティション名など、処理対象のデータ領域を示す名称が登録される。入力データの項目には、検索条件・カーソル名など、処理対象のデータを特定するための情報が登録される。
【００９２】
ＤＢサーバ１００から業務サーバ２０に返信される結果通知としてのメッセージも、メッセージ１４４と同様の項目を含み得る。ただし、結果通知のメッセージは、入力データの項目に代えて、出力データの項目を含む。出力データの項目には、メッセージ１４４に応じて実行された処理の結果が登録される。検索要求に対する応答の場合、検索されたデータが出力データに含まれる。更新要求に対する応答の場合、更新の成否を示す情報や書換または挿入されたレコードの行を示す情報が出力データに含まれる。
【００９３】
図１４は、トランザクションログの例を示す図である。
トランザクションログ１５１は、トランザクションが発生したときに生成され、上記のログ記憶部１２２に格納される。トランザクションログ１５１は、トランザクションＩＤ、クライアントＩＤ、クライアントＩＰアドレス、クライアントポート番号、セッションＩＤ、開始時刻、トランザクション状態、トランザクション種別、対象リソース、排他競合相手、カーソル状態、カーソル位置および更新データの項目を含む。
【００９４】
トランザクションＩＤの項目には、新たなトランザクションが発生したときに付与される識別情報が登録される。新たなトランザクションは、例えば、何れのトランザクションにも属さない更新要求をＤＢサーバ１００が処理したときに発生し得る。クライアントＩＤ・クライアントＩＰアドレス・クライアントポート番号・セッションＩＤの項目には、トランザクションが発生する契機となったメッセージに記載されたものが登録される。
【００９５】
開始時刻の項目には、ＤＢサーバ１００が付与するタイムスタンプとして、トランザクションの発生時刻が登録される。トランザクション状態の項目には、トランザクションが次の処理要求などを待っているとき、「ＣＯＮＴＩＮＵＥ」が設定される。トランザクション種別の項目には、読み込み専用（ReadOnly）または読み書き可能（ReadWrite）が設定される。トランザクション種別は、トランザクション開始時に業務サーバ２０，２０ａから指定されることがある。対象リソースの項目には、データベース名・スキーマ名・テーブル名・パーティション名などのデータ領域を示す名称が登録される。
【００９６】
排他競合相手の項目には、トランザクションが他のトランザクションと同じリソースにアクセスしようとし、そのリソースの排他ロックが解放されるのを待っているとき、競合する他のトランザクションを特定する情報が登録される。例えば、排他競合相手の情報には、セッションＩＤとクライアントＩＤが含まれる。カーソル状態の項目には、処理対象のデータを特定するためにカーソルが使用されているとき、「ＯＰＥＮ」が設定される。カーソル位置の項目には、テーブル内のカーソルが指している行の番号が登録される。
【００９７】
更新データの項目には、データベース１２１に未反映の更新内容が登録される。更新データには、例えば、テーブル名・更新する列（カラム）の名称・更新前のデータ・更新後のデータが含まれる。ＤＢサーバ１００は、更新要求を受信すると、更新対象の取得などデータベース１２１を更新する直前までの処理を行い、データベース１２１を更新せずに更新データをトランザクションログ１５１に登録しておく。その後、コミット要求を受信すると、ＤＢサーバ１００は、更新データに従ってデータベース１２１を更新する。
【００９８】
図１５は、移行リストの例を示す図である。
移行リスト１４１は、上記の移行リスト記憶部１２４に記憶されている。移行リスト１４１は、トランザクションＩＤ、セッションＩＤ、クライアントＩＤ、ＩＰアドレス、ポート番号および移行状態の項目を含む。トランザクションＩＤの項目には、トランザクション発生時に生成された識別情報が登録される。セッションＩＤ・クライアントＩＤ・ＩＰアドレス・ポート番号の項目には、トランザクションログと同様の情報が登録される。移行状態の項目には、トランザクションが移行されたか否かを示す値として、「０」（未移行）と「１」（移行中）と「２」（移行済）の何れかが登録される。
【００９９】
新たに発生したトランザクションの移行状態の初期値は「０」（未移行）である。ＤＢサーバ１００がスイッチオーバの切替元である場合、トランザクションログを切替先のＤＢサーバに送信すると、そのトランザクションログに対応するトランザクションの移行状態が「１」（移行中）になる。その後、切替先のＤＢサーバから応答があると、移行状態が「２」（移行済）になる。ＤＢサーバ１００がスイッチオーバの切替先である場合、トランザクションログを切替元のＤＢサーバから受信すると、そのトランザクションログに対応するトランザクションの移行状態が「２」（移行済）になる。
【０１００】
図１６は、ＤＢサーバ起動の手順例を示すフローチャートである。
（Ｓ１００）クラスタ制御部１３２は、ＤＢＭＳ１３１が起動すると、ＤＢサーバ１００の初期状態を待機状態に設定する。（Ｓ１０１）クラスタ制御部１３２は、サーバ情報記憶部１２３に記憶された設定ファイル１４２のパラメータClusterServersを参照し、クラスタシステムに参加する他のＤＢサーバに生存確認メッセージを送信する。このとき、クラスタ制御部１３２は、生存確認メッセージの送信時刻を保持しておく。
【０１０１】
（Ｓ１０２）クラスタ制御部１３２は、生存確認メッセージを送信してからの経過時間が、設定ファイル１４２のパラメータStartupTimerの値（閾値）を超えたか判断する。経過時間が閾値を超えた場合はステップＳ１０７に処理が進み、閾値を超えていない場合はステップＳ１０３に処理が進む。（Ｓ１０３）クラスタ制御部１３２は、生存確認メッセージの送信先の何れかのＤＢサーバから、応答メッセージを受信したか確認する。応答メッセージを受信した場合はステップＳ１０５に処理が進み、受信していない場合はステップＳ１０４に処理が進む。（Ｓ１０４）クラスタ制御部１３２は、一定時間（例えば、１００ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、処理がステップＳ１０２に進む。
【０１０２】
（Ｓ１０５）クラスタ制御部１３２は、応答メッセージの送信元のＤＢサーバを生存サーバリスト１４３に登録する。なお、ＤＢサーバ１００自身も生存サーバリスト１４３に登録される。（Ｓ１０６）クラスタ制御部１３２は、生存確認メッセージの送信先のＤＢサーバ全てから応答メッセージを受信したか判断する。全てのＤＢサーバから応答メッセージを受信した場合はステップＳ１０７に処理が進み、応答メッセージを受信していないＤＢサーバがある場合はステップＳ１０２に処理が進む。
【０１０３】
（Ｓ１０７）クラスタ制御部１３２は、生存サーバリスト１４３に登録された生存している（ＤＢＭＳが正常に稼働している）ＤＢサーバの中で、ＤＢサーバ１００の優先度が最も高いか判断する。ＤＢサーバ１００の優先度が最も高い場合はステップＳ１０８に処理が進み、それ以外の場合はステップＳ１０９に処理が進む。（Ｓ１０８）クラスタ制御部１３２は、ＤＢサーバ１００の状態を待機状態から現用状態に遷移させる。
【０１０４】
図１７は、ＤＢサーバ起動の手順例を示すフローチャート（続き）である。
（Ｓ１０９）クラスタ制御部１３２は、生存サーバリスト１４３に登録された生存サーバの数を保持する。また、クラスタ制御部１３２は、カウンタｎ＝１に初期化する。（Ｓ１１０）クラスタ制御部１３２は、生存サーバリスト１４３に登録されたｎ番目のＤＢサーバに対する被監視スレッドを起動する。被監視スレッドの処理は後述する。（Ｓ１１１）クラスタ制御部１３２は、生存サーバリスト１４３に登録されたｎ番目のＤＢサーバに対する監視スレッドを起動する。監視スレッドの処理は後述する。
【０１０５】
（Ｓ１１２）クラスタ制御部１３２は、カウンタｎをインクリメント（１だけ加算）する。（Ｓ１１３）クラスタ制御部１３２は、カウンタｎの値がステップＳ１０９で保持した生存サーバ数より大きいか判断する。条件を満たす場合、生存サーバリスト１４３に登録された全てのＤＢサーバを選択したため、ステップＳ１１４に処理が進む。条件を満たさない場合、生存している未選択のＤＢサーバがあるため、ステップＳ１１０に処理が進む。（Ｓ１１４）クラスタ制御部１３２は、コマンド受信スレッドを起動する。コマンド受信スレッドの処理は後述する。（Ｓ１１５）クラスタ制御部１３２は、メッセージ受信スレッドを起動する。メッセージ受信スレッドの処理は後述する。
【０１０６】
なお、上記の被監視スレッド・監視スレッド・コマンド受信スレッド・メッセージ受信スレッドは、並行して実行することができる。被監視スレッド・監視スレッド・コマンド受信スレッド・メッセージ受信スレッドは、任意の順序で起動してよい。
【０１０７】
図１８は、生存被監視の手順例を示すフローチャートである。
この生存被監視の処理は、上記の被監視スレッドの中で実行される。
（Ｓ１２０）クラスタ制御部１３２は、ＤＢサーバ１００の停止フラグがＯＮであるか判断する。停止フラグは、ＤＢＭＳ１３１が停止しようとしているか否かを示すフラグである。ＤＢＭＳ１３１が起動したときの停止フラグの初期値はＯＦＦであり、後述するタイミングで停止フラグがＯＦＦからＯＮに変化する。停止フラグがＯＮの場合、他のＤＢサーバがＤＢサーバ１００の生存を判断しなくてよいため、生存被監視の処理が終了する。停止フラグがＯＦＦの場合、ステップＳ１２１に処理が進む。
【０１０８】
（Ｓ１２１）クラスタ制御部１３２は、上記のステップＳ１１０で指定された相手のＤＢサーバが現用状態または待機状態に安定しているか判断する。現用状態と待機状態以外の状態としては、例えば、ＤＢＭＳが停止している停止状態が挙げられる。条件を満たす場合はステップＳ１２２に処理が進み、条件を満たさない場合はステップＳ１２３に処理が進む。（Ｓ１２２）クラスタ制御部１３２は、指定された相手のＤＢサーバに対して生存確認メッセージを送信する。生存確認メッセージは、例えば、設定ファイル１４２に記載されたサーバＩＤに基づいて生成される。（Ｓ１２３）クラスタ制御部１３２は、一定時間（例えば、１０００ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、ステップＳ１２０に処理が進む。
【０１０９】
図１９は、生存監視の手順例を示すフローチャートである。
この生存監視の処理は、上記の監視スレッドの中で実行される。
（Ｓ１３０）クラスタ制御部１３２は、無反応カウンタ＝０に初期化する。（Ｓ１３１）クラスタ制御部１３２は、ＤＢサーバ１００の停止フラグがＯＮであるか判断する。停止フラグがＯＮの場合、ＤＢサーバ１００が他のＤＢサーバの生存を判断しなくてよいため、生存監視の処理が終了する。停止フラグがＯＦＦの場合、ステップＳ１３２に処理が進む。（Ｓ１３２）クラスタ制御部１３２は、上記のステップＳ１１１で指定された監視対象のＤＢサーバからの生存確認メッセージの受信状況を参照する。
【０１１０】
（Ｓ１３３）クラスタ制御部１３２は、監視対象のＤＢサーバから生存確認メッセージを受信したか判断する。受信した場合はステップＳ１３０に処理が進み、受信していない場合はステップＳ１３４に処理が進む。（Ｓ１３４）クラスタ制御部１３２は、無反応カウンタが閾値を超えたか、すなわち、連続して生存確認メッセージを受信できなかった回数が閾値を超えたか判断する。閾値は、例えば、３回とする。条件を満たす場合はステップＳ１３７に処理が進み、条件を満たさない場合はステップＳ１３５に処理が進む。
【０１１１】
（Ｓ１３５）クラスタ制御部１３２は、無反応カウンタをインクリメント（１だけ加算）する。（Ｓ１３６）クラスタ制御部１３２は、一定時間（例えば、１０００ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機し、次に生存確認メッセージが受信されると期待されるタイミングを待つ。その後、ステップＳ１３１に処理が進む。（Ｓ１３７）クラスタ制御部１３２は、上記の監視対象のＤＢサーバのＤＢＭＳが正常に動作していないと判断し、後述するクラスタ縮退の処理によって当該ＤＢサーバをクラスタシステムから外す。
【０１１２】
図２０は、コマンド受信の手順例を示すフローチャートである。
このコマンド受信の処理は、上記のコマンド受信スレッドの中で実行される。
（Ｓ１４０）クラスタ制御部１３２は、コマンドの受信状況を参照する。端末装置３１から受信し得るコマンドとしては、縮退命令・組込命令・切替命令・停止命令などが挙げられる。なお、切替命令は、他のＤＢサーバから受信することもある。
【０１１３】
（Ｓ１４１）クラスタ制御部１３２は、縮退命令を受信したか判断する。縮退命令は、クラスタシステムに属するＤＢサーバを減らすことを指示するコマンドであり、除外するＤＢサーバを指定している。縮退命令を受信した場合はステップＳ１４２に処理が進み、縮退命令を受信していない場合はステップＳ１４３に処理が進む。（Ｓ１４２）クラスタ制御部１３２は、後述するクラスタ縮退の処理によって、指定されたＤＢサーバをクラスタシステムから外す。その後、ステップＳ１４０に処理が進む。
【０１１４】
（Ｓ１４３）クラスタ制御部１３２は、組込命令を受信したか判断する。組込命令は、クラスタシステムに属するＤＢサーバを増やすことを指示するコマンドであり、組み込むＤＢサーバを指定している。組込命令を受信した場合はステップＳ１４４に処理が進み、組込命令を受信していない場合はステップＳ１４５に処理が進む。（Ｓ１４４）クラスタ制御部１３２は、後述するサーバ組込の処理によって、指定されたＤＢサーバをクラスタシステムに組み込む。その後、ステップＳ１４０に処理が進む。
【０１１５】
（Ｓ１４５）クラスタ制御部１３２は、切替命令を受信したか判断する。切替命令は、現用状態のＤＢサーバを切り替えるスイッチオーバを指示するコマンドである。切替命令は、端末装置３１から切替元のＤＢサーバに送信され、切替元のＤＢサーバから切替先のＤＢサーバに転送される。切替命令を受信した場合はステップＳ１４６に処理が進み、切替命令を受信していない場合はステップＳ１４７に処理が進む。（Ｓ１４６）切替部１３３は、後述するスイッチオーバの処理を行う。その後、ステップＳ１４０に処理が進む。
【０１１６】
（Ｓ１４７）クラスタ制御部１３２は、停止命令を受信したか判断する。停止命令は、ＤＢＭＳの停止を指示するコマンドである。停止命令を受信した場合はステップＳ１４８に処理が進み、停止命令を受信していない場合はステップＳ１４０に処理が進む。（Ｓ１４８）クラスタ制御部１３２は、停止フラグをＯＮに設定する。（Ｓ１４９）クラスタ制御部１３２は、ＤＢＭＳ１３１を停止させ、ＤＢサーバ１００を停止状態にする。
【０１１７】
なお、上記の縮退命令・組込命令・切替命令・停止命令を判定する順序は一例であり、任意の順序で判定してもよいし、並行して判定するようにしてもよい。
図２１は、クラスタ縮退の手順例を示すフローチャートである。
【０１１８】
このクラスタ縮退の処理は、上記のステップＳ１３７，Ｓ１４２および後述するステップＳ２１０においてそれぞれ実行される。
（Ｓ１５０）クラスタ制御部１３２は、サーバ情報記憶部１２３に記憶された生存サーバリスト１４３から、指定されたＤＢサーバの情報を削除する。（Ｓ１５１）クラスタ制御部１３２は、生存サーバリスト１４３に登録された生存サーバ（今回外すものを除く）の数を保持する。また、クラスタ制御部１３２は、カウンタｎ＝１に初期化する。（Ｓ１５２）クラスタ制御部１３２は、生存サーバリスト１４３に登録されたｎ番目のＤＢサーバに対して縮退メッセージを送信する。縮退メッセージは、クラスタシステムから外すＤＢサーバを示す情報（例えば、当該ＤＢサーバのサーバＩＤ）を含む。
【０１１９】
（Ｓ１５３）クラスタ制御部１３２は、カウンタｎをインクリメントする。（Ｓ１５４）クラスタ制御部１３２は、カウンタｎの値がステップＳ１５１で保持した生存サーバ数より大きいか判断する。条件を満たす場合はステップＳ１５５に処理が進み、条件を満たさない場合はステップＳ１５２に処理が進む。（Ｓ１５５）クラスタ制御部１３２は、指定されたＤＢサーバを外した後の生存しているＤＢサーバの中で、ＤＢサーバ１００の優先度が最も高いか判断する。ＤＢサーバ１００の優先度が最も高い場合はステップＳ１５６に処理が進み、それ以外の場合はクラスタ縮退の処理が終了する。
【０１２０】
（Ｓ１５６）クラスタ制御部１３２は、ＤＢサーバ１００の現在の状態が現用状態であるか判断する。現用状態である場合はクラスタ縮退の処理が終了し、それ以外の場合はステップＳ１５７に処理が進む。（Ｓ１５７）クラスタ制御部１３２は、ＤＢサーバ１００の状態を現用状態に遷移させる。これにより、ＤＢサーバ１００は、外したＤＢサーバに代わって、トランザクションを実行し業務サーバ２０，２０ａに応答することになる。
【０１２１】
図２２は、サーバ組込の手順例を示すフローチャートである。
このサーバ組込の処理は、上記のステップＳ１４４において実行される。
（Ｓ１６０）クラスタ制御部１３２は、生存サーバリスト１４３に登録された生存サーバの数を保持する。また、クラスタ制御部１３２は、カウンタｎ＝１に初期化する。（Ｓ１６１）クラスタ制御部１３２は、生存サーバリスト１４３に登録されたｎ番目のＤＢサーバに対して組込メッセージを送信する。組込メッセージは、クラスタシステムに組み込むＤＢサーバを示す情報（例えば、当該ＤＢサーバのサーバＩＤ）を含む。（Ｓ１６２）クラスタ制御部１３２は、カウンタｎをインクリメントする。
【０１２２】
（Ｓ１６３）クラスタ制御部１３２は、カウンタｎの値がステップＳ１６０で保持した生存サーバ数より大きいか判断する。条件を満たす場合はステップＳ１６４に処理が進み、条件を満たさない場合はステップＳ１６１に処理が進む。（Ｓ１６４）クラスタ制御部１３２は、生存サーバリスト１４３に新たなＤＢサーバを登録する。（Ｓ１６５）クラスタ制御部１３２は、新たなＤＢサーバを加えた後の生存しているＤＢサーバの中で、ＤＢサーバ１００の優先度が最も高いか判断する。ＤＢサーバ１００の優先度が最も高い場合はステップＳ１６６に処理が進み、それ以外の場合はステップＳ１６８に処理が進む。
【０１２３】
（Ｓ１６６）クラスタ制御部１３２は、ＤＢサーバ１００の現在の状態が現用状態であるか判断する。現用状態である場合はサーバ組込の処理が終了し、現用状態でない場合はステップＳ１６７に処理が進む。（Ｓ１６７）クラスタ制御部１３２は、ＤＢサーバの状態を現用状態へ遷移させる。そして、サーバ組込の処理が終了する。
【０１２４】
（Ｓ１６８）クラスタ制御部１３２は、ＤＢサーバ１００の現在の状態が現用状態であるか判断する。現用状態である場合はステップＳ１６９に処理が進み、現用状態でない場合はサーバ組込の処理が終了する。（Ｓ１６９）クラスタ制御部１３２は、ＤＢサーバ１００の状態を現用状態から待機状態に遷移させる。これにより、ＤＢサーバ１００に代わって、追加されたＤＢサーバがトランザクションを実行し業務サーバ２０，２０ａに応答することになる。なお、組み込むＤＢサーバの優先度は、例えば、端末装置３１から指定される。組込命令に優先度を示す情報が含まれていてもよい。
【０１２５】
図２３は、スイッチオーバの手順例を示すフローチャートである。
このスイッチオーバの処理は、切替命令を受信したときに実行される。
（Ｓ２００）切替部１３３は、ＤＢサーバ１００の切替中フラグをＯＮに設定する。切替中フラグは、ＤＢサーバ１００が、切替元または切替先としてスイッチオーバを実行中であるか否かを示すフラグである。ＤＢサーバ１００が現用状態で切替フラグがＯＮであることは、ＤＢサーバ１００から他のＤＢサーバにトランザクションを移行し、ＤＢサーバ１００をクラスタシステムから切り離す途中であることを示す。ＤＢサーバ１００が待機状態で切替フラグがＯＮであることは、他のＤＢサーバからＤＢサーバ１００にトランザクションを移行し、ＤＢサーバ１００を現用状態にする途中であることを示す。
【０１２６】
（Ｓ２０１）切替部１３３は、ＤＢサーバ１００がスイッチオーバの切替先であるか、すなわち、ＤＢサーバ１００が待機状態であるか判断する。切替先である場合はステップＳ２０２に処理が進み、切替元である場合はステップＳ２１２に処理が進む。
【０１２７】
（Ｓ２０２）切替部１３３は、切替元のＤＢサーバから受信した切替命令に付加されている移行リスト１４１を取得し、移行リスト記憶部１２４に格納する。（Ｓ２０３）切替部１３３は、切替元のＤＢサーバに対して、移行リスト１４１を受信したことを示す応答メッセージを返信する。このとき、切替部１３３は、応答メッセージの返信時刻を保持しておく。（Ｓ２０４）切替部１３３は、切替元のＤＢサーバからトランザクションログを受信したか判断する。トランザクションログを受信した場合はステップＳ２０５に処理が進み、受信していない場合はステップＳ２０８に処理が進む。なお、切替元のＤＢサーバから受信されたトランザクションログは、ログ記憶部１２２に格納される。
【０１２８】
（Ｓ２０５）切替部１３３は、切替元のＤＢサーバに対して、トランザクションログを受信したことを示す応答メッセージを返信する。（Ｓ２０６）切替部１３３は、受信したトランザクションログに対応するエントリを移行リスト１４１から検索し、検索したエントリの移行状態を「２」（移行済）に更新する。受信したトランザクションログに対応するエントリは、例えば、トランザクションＩＤを用いて検索できる。（Ｓ２０７）切替部１３３は、移行リスト１４１に移行状態が「０」（未移行）のエントリが存在するか、すなわち、未移行のトランザクションがあるか判断する。未移行のトランザクションがある場合はステップＳ２０４に処理が進み、ない場合はステップＳ２１０に処理が進む。
【０１２９】
（Ｓ２０８）切替部１３３は、ステップＳ２０３で応答メッセージを返信してからの経過時間が閾値を超えたか判断する。この閾値は、設定ファイル１４２にパラメータを追加して、その値を使用してもよい。条件を満たす場合はステップＳ２１０に処理が進み、条件を満たさない場合はステップＳ２０９に処理が進む。（Ｓ２０９）切替部１３３は、一定時間（例えば、１０ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、ステップＳ２０４に処理が進む。
【０１３０】
（Ｓ２１０）クラスタ制御部１３２は、クラスタシステムから外すＤＢサーバとして切替元のＤＢサーバを指定し、図２１に示したクラスタ縮退の処理を実行する。これにより、業務サーバ２０，２０ａと切替元のＤＢサーバとの間のコネクションが切断され、そのＤＢＭＳが停止する。（Ｓ２１１）クラスタ制御部１３２は、移行リスト１４１の全てのエントリの移行状態を「０」（未移行）に更新する。また、クラスタ制御部１３２は、ＤＢサーバ１００の切替中フラグをＯＮからＯＦＦに戻す。
【０１３１】
図２４は、スイッチオーバの手順例を示すフローチャート（続き）である。
（Ｓ２１２）切替部１３３は、サーバ情報記憶部１２３に記憶された生存サーバリスト１４３に登録されたＤＢサーバの中から、優先度が２番目に高い待機状態のＤＢサーバを検索し、検索したＤＢサーバを切替先として特定する。（Ｓ２１３）切替部１３３は、端末装置３１から受信された切替命令に、移行リスト記憶部１２４に記憶された移行リスト１４１を付加し、ステップＳ２１２で特定した切替先のＤＢサーバに送信する。このとき、切替部１３３は、切替命令の送信時刻を保持しておく。
【０１３２】
（Ｓ２１４）切替部１３３は、切替先のＤＢサーバから切替命令に対する応答メッセージを受信したか判断する。応答メッセージを受信した場合はステップＳ２１７に処理が進み、受信していない場合はステップＳ２１５に処理が進む。（Ｓ２１５）切替部１３３は、切替命令を送信してからの経過時間が閾値を超えたか判断する。この閾値は、上記のステップＳ２０８の値と同じでもよい。条件を満たす場合はステップＳ２１０に処理が進み、条件を満たさない場合はステップＳ２１６に処理が進む。（Ｓ２１６）切替部１３３は、一定時間（例えば、１０ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、処理がステップＳ２１４に進む。
【０１３３】
（Ｓ２１７）切替部１３３は、移行状態が「０」（未移行）である移行リスト１４１のエントリの中で最も順位の高いものを選択し、選択したエントリの移行状態を「１」（移行中）に更新する。順位の高いエントリは、移行リスト１４１の中で前方に登録されているものである。原則として、早く発生したトランザクションに対応するエントリほど、移行リスト１４１の前方に存在する。ただし、後述するように、スイッチオーバ中にエントリの順序が入れ替えられることがある。また、切替部１３３は、明示的に順序が繰り上げられたエントリを除き、任意の順序でエントリを選択するようにしてもよい。
【０１３４】
（Ｓ２１８）切替部１３３は、ステップＳ２１７で選択したエントリに対応するトランザクションログをログ記憶部１２２から取得し、切替先のＤＢサーバに送信する。エントリに対応するトランザクションログは、例えば、トランザクションＩＤを用いて検索できる。このとき、切替部１３３は、トランザクションログの送信時刻を保持しておく。（Ｓ２１９）切替部１３３は、切替先のＤＢサーバから、トランザクションログに対する応答メッセージを受信したか判断する。応答メッセージを受信した場合はステップＳ２２２に処理が進み、受信していない場合はステップＳ２２０に処理が進む。
【０１３５】
（Ｓ２２０）切替部１３３は、トランザクションログを送信してからの経過時間が閾値を超えたか判断する。この閾値は、上記のステップＳ２０８またはステップＳ２１５の値と同じでもよい。条件を満たす場合はステップＳ２１０に処理が進み、条件を満たさない場合はステップＳ２２１に処理が進む。（Ｓ２２１）切替部１３３は、一定時間（例えば、１０ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、ステップＳ２１９に処理が進む。
【０１３６】
（Ｓ２２２）切替部１３３は、ステップＳ２１７で選択した移行リスト１４１のエントリの移行状態を「２」（移行済）に更新する。（Ｓ２２３）切替部１３３は、移行リスト１４１に移行状態が「０」（未移行）のエントリが存在するか、すなわち、未移行のトランザクションがあるか判断する。未移行のトランザクションがある場合はステップＳ２１７に処理が進み、ない場合はステップＳ２１０に処理が進む。
【０１３７】
図２５は、メッセージ処理の手順例を示すフローチャート（第１の図）である。
このメッセージ処理は、上記のメッセージ受信スレッドの中で実行される。
（Ｓ２３０）メッセージ処理部１３４は、業務サーバ２０，２０ａからのメッセージの受信状況を参照する。（Ｓ２３１）メッセージ処理部１３４は、何れかの業務サーバからメッセージを受信したか判断する。業務サーバ２０，２０ａから受信し得るメッセージには、コネクション確立を要求するコネクション要求、検索または更新を示す処理要求、コミット要求およびロールバック要求が含まれる。メッセージを受信した場合はステップＳ２３２に処理が進み、受信していない場合はステップＳ２３９に処理が進む。
【０１３８】
（Ｓ２３２）メッセージ処理部１３４は、ＤＢサーバ１００が現用状態であるか判断する。現用状態である場合はステップＳ２３３に処理が進み、現用状態でない場合はステップＳ２５４に処理が進む。（Ｓ２３３）メッセージ処理部１３４は、ＤＢサーバ１００の切替中フラグがＯＮであるか判断する。切替中フラグがＯＮである場合はステップＳ２３６に処理が進み、切替中フラグがＯＦＦである場合はステップＳ２３４に処理が進む。
【０１３９】
（Ｓ２３４）メッセージ処理部１３４は、ＤＢサーバ１００とメッセージの送信元の業務サーバとの間にコネクションが確立済であるか判断する。コネクションが確立されていない場合、受信したメッセージはコネクション要求である可能性がある。コネクションを確立済である場合はステップＳ２４１に処理が進み、コネクションが確立されていない場合はステップＳ２３５に処理が進む。（Ｓ２３５）メッセージ処理部１３４は、ＤＢサーバ１００と送信元の業務サーバとの間にコネクションを確立する。このとき、メッセージ処理部１３４は、コネクションに、クライアントＩＤ・クライアントＩＰアドレス・クライアントポート番号・クライアントプロセスＩＤ・クライアントスレッドＩＤから算出されるセッションＩＤを付与する。その後、ステップＳ２４１に処理が進む。
【０１４０】
（Ｓ２３６）メッセージ処理部１３４は、ＤＢサーバ１００と送信元の業務サーバとの間にコネクションが確立済であるか判断する。コネクションを確立済である場合はステップＳ２３７に処理が進み、コネクションが確立されていない場合はステップＳ２３８に処理が進む。（Ｓ２３７）メッセージ処理部１３４は、メッセージがトランザクションＩＤを含む場合、移行リスト１４１から当該トランザクションＩＤを含むエントリを検索し、検索したエントリの順位を移行リスト１４１の中で繰り上げる。例えば、検索したエントリを、移行状態が「０」（未移行）のエントリのうちの最も前方に移動する。すなわち、メッセージ処理部１３４は、メッセージが属するトランザクションの移行順位を繰り上げる。（Ｓ２３８）メッセージ処理部１３４は、受信したメッセージを、当該メッセージが要求する処理を実行せずに破棄する。その後、ステップＳ２３０に処理が進む。
【０１４１】
（Ｓ２３９）メッセージ処理部１３４は、ＤＢサーバ１００の停止フラグがＯＮであるか判断する。停止フラグがＯＮの場合はメッセージ処理が終了し、停止フラグがＯＦＦの場合はステップＳ２４０に処理が進む。（Ｓ２４０）メッセージ処理部１３４は、一定時間（例えば、１０ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、ステップＳ２３０に処理が進む。
【０１４２】
図２６は、メッセージ処理の手順例を示すフローチャート（第２の図）である。
（Ｓ２４１）メッセージ処理部１３４は、受信したメッセージがコミット要求であるか判断する。コミット要求の場合はステップＳ２４２に処理が進み、コミット要求でない場合はステップＳ２４４に処理が進む。（Ｓ２４２）メッセージ処理部１３４は、コミット要求が指定するトランザクションに対応するトランザクションログをログ記憶部１２２から取得し、当該トランザクションログに含まれる更新データをデータベース１２１に反映させる。データベース１２１は、当該更新データに従って更新される。（Ｓ２４３）メッセージ処理部１３４は、生存サーバリスト１４３を参照して、待機状態のＤＢサーバ（例えば、ＤＢサーバ１００ａ，１００ｂ）を特定し、全ての待機状態のＤＢサーバに上記のトランザクションログを送信する。その後、ステップＳ２５２に処理が進む。
【０１４３】
（Ｓ２４４）メッセージ処理部１３４は、受信したメッセージがロールバック要求であるか判断する。ロールバック要求の場合はステップＳ２５２に処理が進み、ロールバック要求でない場合はステップＳ２４５に処理が進む。後者の場合、主に、メッセージは検索要求や更新要求などの処理要求であることが想定される。（Ｓ２４５）メッセージ処理部１３４は、受信したメッセージに対応するトランザクションが存在するか判断する。例えば、メッセージがトランザクションＩＤを含み、当該トランザクションＩＤが移行リスト１４１に登録されている場合、トランザクションが存在すると判断される。存在する場合はステップＳ２４６に処理が進み、存在しない場合はステップＳ２４８に処理が進む。
【０１４４】
（Ｓ２４６）メッセージ処理部１３４は、メッセージが指定するトランザクションに対応するトランザクションログをログ記憶部１２２から取得し、当該トランザクションログとメッセージに含まれる入力データとに応じてデータ処理を仮実行する。メッセージが検索要求である場合、メッセージ処理部１３４は、データベース１２１からのデータの検索を最後まで実行してよい。メッセージが更新要求である場合、メッセージ処理部１３４は、データベース１２１を更新せずに更新内容をトランザクションログに保存しておく。（Ｓ２４７）メッセージ処理部１３４は、データ処理が成功したか判断する。成功した場合はステップＳ２５３に処理が進み、失敗した場合はステップＳ２５２に処理が進む。
【０１４５】
（Ｓ２４８）メッセージ処理部１３４は、メッセージに含まれる入力データに応じてデータ処理を仮実行する。（Ｓ２４９）メッセージ処理部１３４は、データ処理が成功したか判断する。成功した場合はステップＳ２５０に処理が進み、失敗した場合はステップＳ２５３に処理が進む。（Ｓ２５０）メッセージ処理部１３４は、データ処理によってトランザクションが発生するか判断する。データベース１２１を更新する直前までの更新処理が成功した場合は、トランザクションが発生し得る。参照処理でもトランザクション処理が発生し得るが、データ更新を伴わない。トランザクションが発生する場合はステップＳ２５１に処理が進み、発生しない場合はステップＳ２５３に処理が進む。
【０１４６】
（Ｓ２５１）メッセージ処理部１３４は、新たなトランザクションＩＤやデータベース１２１に未反映の更新内容などを含むトランザクションログを生成し、ログ記憶部１２２に格納する。また、メッセージ処理部１３４は、新たなトランザクションＩＤなどを含むエントリを移行リスト１４１に登録する。その後、ステップＳ２５３に処理が進む。
【０１４７】
（Ｓ２５２）メッセージ処理部１３４は、ステップＳ２４２のトランザクションログをログ記憶部１２２から削除し、移行リスト１４１から当該トランザクションログに対応するエントリを削除する。（Ｓ２５３）メッセージ処理部１３４は、処理結果をメッセージの送信元の業務サーバに通知する。検索要求に対する結果通知には、検索されたデータが含まれ得る。更新要求に対する結果通知には、更新の成否を示す情報が含まれ得る。コミット要求やロールバック要求に対する結果通知には、コミットやロールバックの成否を示す情報が含まれる。その後、ステップＳ２３０に処理が進む。
【０１４８】
図２７は、メッセージ処理の手順例を示すフローチャート（第３の図）である。
（Ｓ２５４）メッセージ処理部１３４は、ＤＢサーバ１００の切替中フラグがＯＮであるか判断する。切替中フラグがＯＮの場合はステップＳ２５５に処理が進み、切替中フラグがＯＦＦの場合はステップＳ２６２に処理が進む。（Ｓ２５５）メッセージ処理部１３４は、受信したメッセージがトランザクションＩＤを含む場合、移行リスト１４１から当該トランザクションＩＤを含むエントリを検索する。すなわち、メッセージ処理部１３４は、メッセージが指定するトランザクションを検索する。（Ｓ２５６）メッセージ処理部１３４は、メッセージがトランザクションを指定しており、かつ、指定されたトランザクションが移行リスト１４１に登録されているか判断する。条件を満たす場合はステップＳ２５７に処理が進み、条件を満たさない場合はステップＳ２６１に処理が進む。
【０１４９】
（Ｓ２５７）メッセージ処理部１３４は、ステップＳ２５５で検索されたエントリの移行状態が「２」（移行済）であるか判断する。トランザクションが移行済の場合はステップＳ２４１に処理が進み、移行済でない場合（未移行の場合）はステップＳ２５８に処理が進む。（Ｓ２５８）スイッチオーバにおける切替元のＤＢサーバが異常なく生存しているか判断する。異常なく生存している場合はステップＳ２５９に処理が進み、それ以外の場合はステップＳ２６０に処理が進む。（Ｓ２５９）メッセージ処理部１３４は、受信したメッセージをメッセージバッファ１２５に保持させておき、一定時間（例えば、１０ｍｓ。または、設定ファイル１４２にパラメータを追加して、その値を使用してもよい）待機する。その後、ステップＳ２５７に処理が進む。
【０１５０】
（Ｓ２６０）メッセージ処理部１３４は、メッセージの送信元の業務サーバに対し、エラーを示す処理結果を通知する。その後、ステップＳ２３０に処理が進む。（Ｓ２６１）メッセージ処理部１３４は、ＤＢサーバ１００とメッセージの送信元の業務サーバとの間にコネクションを確立する。その後、ステップＳ２４１に処理が進む。（Ｓ２６２）メッセージ処理部１３４は、受信したメッセージが要求する処理を実行せずに当該メッセージを破棄する。その後、ステップＳ２３０に処理が進む。
【０１５１】
次に、他のデータベースシステムによるトランザクション処理の例を挙げ、前述のＤＢサーバ１００，１００ａ，１００ｂによるトランザクション処理と比較する。
図２８は、第１の他のトランザクション処理例を示すシーケンス図である。
【０１５２】
第１の他のトランザクション処理例では、データベースシステムは、業務サーバ４１と現用状態のＤＢサーバ４２と待機状態のＤＢサーバ４３を含む。
（Ｓ３００）業務サーバ４１は、処理要求をＤＢサーバ４２に送信する。（Ｓ３０１）ＤＢサーバ４２は、更新内容をデータベースに反映させずトランザクションログに記載しておく。（Ｓ３０２）ＤＢサーバ４２は、処理結果を業務サーバ４１に通知する。
【０１５３】
（Ｓ３０３）業務サーバ４１は、コミット要求をＤＢサーバ４２に送信する。（Ｓ３０４）ＤＢサーバ４２は、トランザクションログを用いてＤＢサーバ４２のデータベースを更新する。（Ｓ３０５）ＤＢサーバ４２は、トランザクションログをＤＢサーバ４３に送信する。（Ｓ３０６）ＤＢサーバ４３は、トランザクションログを用いてＤＢサーバ４３のデータベースを更新する。（Ｓ３０７）ＤＢサーバ４３は、処理結果をＤＢサーバ４２に通知する。（Ｓ３０８）ＤＢサーバ４２は、処理結果を業務サーバ４１に通知する。
【０１５４】
（Ｓ３０９）業務サーバ４１は、処理要求をＤＢサーバ４２に送信する。（Ｓ３１０）ＤＢサーバ４２は、更新内容をトランザクションログに記載しておく。（Ｓ３１１）ＤＢサーバ４２は、処理結果を業務サーバ４１に通知する。（Ｓ３１２）ＤＢサーバ４２，４３に切替命令が入力される。（Ｓ３１３）ＤＢサーバ４２は、実行中のトランザクションをロールバックし、保持しているトランザクションログを破棄する。これにより、ＤＢサーバ４２は停止可能になり、ＤＢサーバ４３は待機状態から現用状態に遷移する。
【０１５５】
（Ｓ３１４）業務サーバ４１は、切替を検知すると、実行中であったトランザクションを最初から実行し直すため、ステップＳ３０９と同じ処理を示す処理要求をＤＢサーバ４３に送信する。（Ｓ３１５）ＤＢサーバ４３は、更新内容をトランザクションログに記載しておく。（Ｓ３１６）ＤＢサーバ４３は、処理結果を業務サーバ４１に通知する。（Ｓ３１７）業務サーバ４１は、コミット要求をＤＢサーバ４３に送信する。（Ｓ３１８）ＤＢサーバ４３は、トランザクションログを用いてＤＢサーバ４３のデータベースを更新する。（Ｓ３１９）ＤＢサーバ４３は、処理結果を業務サーバ４１に通知する。
【０１５６】
このように、第１の他のトランザクション処理例では、ＤＢサーバ４２でトランザクションがコミットされたときに、ＤＢサーバ４３のデータベースがＤＢサーバ４２と同期される。ＤＢサーバ４３は、ＤＢサーバ４２で実行中のトランザクションについてのトランザクションログを保持しない。また、ＤＢサーバ４２からＤＢサーバ４３へのスイッチオーバが指示されると、データベースシステムからＤＢサーバ４２が即時に切り離され、ＤＢサーバ４２で実行中のトランザクションはＤＢサーバ４３に引き継がれない。
【０１５７】
しかし、第１の他のトランザクション処理例では、スイッチオーバ直後に、ロールバックされたトランザクションを最初から実行し直すための処理要求がＤＢサーバ４３に集中することになる。このため、スイッチオーバ直後は、切替先のＤＢサーバ４３の負荷が高くなり、処理要求に対する応答が一時的に遅くなるおそれがある。これに対し、前述のＤＢサーバ１００，１００ａ，１００ｂによるトランザクション処理によれば、スイッチオーバ時にトランザクションが引き継がれ、切替先のＤＢサーバの負荷を低減できる。よって、業務サーバ２０，２０ａを停止させなくても、スイッチオーバを円滑に行える。
【０１５８】
図２９は、第２の他のトランザクション処理例を示すシーケンス図である。
第２の他のトランザクション処理例では、データベースシステムは、業務サーバ５１と現用状態のＤＢサーバ５２と待機状態のＤＢサーバ５３を含む。
【０１５９】
（Ｓ３２０）業務サーバ５１は、処理要求をＤＢサーバ５２に送信する。（Ｓ３２１）ＤＢサーバ５２は、更新内容をデータベースに反映させずトランザクションログに記載しておく。（Ｓ３２２）ＤＢサーバ５２は、トランザクションログの差分をＤＢサーバ５３に通知する。（Ｓ３２３）ＤＢサーバ５３は、通知された差分に基づいてトランザクションログを生成または更新する。（Ｓ３２４）ＤＢサーバ５３は、処理結果をＤＢサーバ５２に通知する。（Ｓ３２５）ＤＢサーバ５２は、処理結果を業務サーバ５１に通知する。
【０１６０】
（Ｓ３２６）業務サーバ５１は、コミット要求をＤＢサーバ５２に送信する。（Ｓ３２７）ＤＢサーバ５２は、トランザクションログを用いてＤＢサーバ５２のデータベースを更新する。（Ｓ３２８）ＤＢサーバ５２は、コミット要求をＤＢサーバ５３に転送する。（Ｓ３２９）ＤＢサーバ５３は、ＤＢサーバ５３が保持するトランザクションログを用いてデータベースを更新する。（Ｓ３３０）ＤＢサーバ５３は、処理結果をＤＢサーバ５２に通知する。（Ｓ３３１）ＤＢサーバ５２は、処理結果を業務サーバ５１に通知する。
【０１６１】
（Ｓ３３２）業務サーバ５１は、処理要求をＤＢサーバ５２に送信する。（Ｓ３３３）ＤＢサーバ５２は、更新内容をトランザクションログに記載しておく。（Ｓ３３４）ＤＢサーバ５２は、トランザクションログの差分をＤＢサーバ５３に通知する。（Ｓ３３５）ＤＢサーバ５３は、通知された差分に基づいてトランザクションログを生成または更新する。（Ｓ３３６）ＤＢサーバ５３は、処理結果をＤＢサーバ５２に通知する。（Ｓ３３７）ＤＢサーバ５２は、処理結果を業務サーバ５１に通知する。
【０１６２】
（Ｓ３３８）ＤＢサーバ５２，５３に切替命令が入力される。（Ｓ３３９）ＤＢサーバ５２は、実行中のトランザクションをロールバックし、保持しているトランザクションログを破棄する。これにより、ＤＢサーバ５２は停止可能になり、ＤＢサーバ５３は待機状態から現用状態に遷移する。（Ｓ３４０）業務サーバ５１は、切替を検知すると、実行中のトランザクションの状態がＤＢサーバ５２，５３間で同期されていたため、トランザクションの続きとしてコミット要求をＤＢサーバ５３に送信する。（Ｓ３４１）ＤＢサーバ５３は、トランザクションログを用いてＤＢサーバ５３のデータベースを更新する。（Ｓ３４２）ＤＢサーバ５３は、処理結果を業務サーバ５１に通知する。
【０１６３】
このように、第２の他のトランザクション処理例では、ＤＢサーバ５２でトランザクションログが更新されると、これと同期してＤＢサーバ５３でもトランザクションログが更新される。よって、データベースシステムからＤＢサーバ５２を即時に切り離しても、切替先のＤＢサーバ５３がトランザクションを引き継ぐことができる。
【０１６４】
しかし、第２の他のトランザクション処理例では、ＤＢサーバ５２，５３間でトランザクションログを継続的に同期しているため、待機状態であってもＤＢサーバ５３の負荷が高くなるおそれがある。このため、ＤＢサーバ５３をデータ検索に利用するなどＤＢサーバ５３の計算リソースをトランザクション以外の処理に活用することが難しくなる。また、ＤＢサーバ５２，５３間で継続的に通信が発生するため、業務サーバ５１への応答が遅くなるおそれがある。これに対し、前述のＤＢサーバ１００，１００ａ，１００ｂによるトランザクション処理によれば、通常時では、待機状態のＤＢサーバは現用状態のＤＢサーバで実行中のトランザクションについてトランザクションログを保持しない。よって、待機状態のＤＢサーバの負荷を低減でき、また、応答速度が向上する。
【０１６５】
図３０は、第３の他のトランザクション処理例を示すシーケンス図である。
第３の他のトランザクション処理例では、データベースシステムは、業務サーバ６１と現用状態のＤＢサーバ６２と待機状態のＤＢサーバ６３を含む。
【０１６６】
（Ｓ３５０）業務サーバ６１は、処理要求をＤＢサーバ６２，６３の両方に送信する。（Ｓ３５１）ＤＢサーバ６２は、更新内容をデータベースに反映させずトランザクションログに記載しておく。（Ｓ３５２）ＤＢサーバ６３は、ＤＢサーバ６２と同様に、トランザクションログの生成または更新を行う。（Ｓ３５３）ＤＢサーバ６２は、処理結果を業務サーバ６１に通知する。ＤＢサーバ６３は、処理結果を業務サーバ６１に通知する。
【０１６７】
（Ｓ３５４）業務サーバ６１は、コミット要求をＤＢサーバ６２，６３の両方に送信する。（Ｓ３５５）ＤＢサーバ６２は、ＤＢサーバ６２が保持するトランザクションを用いてＤＢサーバ６２のデータベースを更新する。（Ｓ３５６）ＤＢサーバ６３は、ＤＢサーバ６２とは独立に、ＤＢサーバ６３が保持するトランザクションを用いてＤＢサーバ６３のデータベースを更新する。（Ｓ３５７）ＤＢサーバ６２は、処理結果を業務サーバ６１に通知する。ＤＢサーバ６３は、処理結果を業務サーバ６１に通知する。
【０１６８】
（Ｓ３５８）業務サーバ６１は、処理要求をＤＢサーバ６２，６３の両方に送信する。（Ｓ３５９）ＤＢサーバ６２は、更新内容をトランザクションログに記載しておく。（Ｓ３６０）ＤＢサーバ６３は、ＤＢサーバ６２と同様に、トランザクションログの生成または更新を行う。（Ｓ３６１）ＤＢサーバ６２は、処理結果を業務サーバ６１に通知する。ＤＢサーバ６３は、処理結果を業務サーバ６１に通知する。
【０１６９】
（Ｓ３６２）ＤＢサーバ６２，６３に切替命令が入力される。（Ｓ３６３）ＤＢサーバ６２は、実行中のトランザクションをロールバックし、保持しているトランザクションログを破棄する。これにより、ＤＢサーバ６２は停止可能になり、ＤＢサーバ６３は待機状態から現用状態に遷移する。（Ｓ３６４）業務サーバ６１は、切替を検知すると、ＤＢサーバ６２，６３それぞれで独立にトランザクションが実行されていたため、トランザクションの続きとしてコミット要求をＤＢサーバ６３に送信する。（Ｓ３６５）ＤＢサーバ６３は、トランザクションログを用いてＤＢサーバ６３のデータベースを更新する。（Ｓ３６６）ＤＢサーバ６３は、処理結果を業務サーバ６１に通知する。
【０１７０】
このように、第３の他のトランザクション処理例では、業務サーバ６１からＤＢサーバ６２，６３の両方に処理要求が送信され、ＤＢサーバ６２，６３の両方から業務サーバ６１に処理結果が通知される。ＤＢサーバ６２，６３の両方で、同様のトランザクションが実行される。よって、データベースシステムからＤＢサーバ６２を即時に切り離しても、切替先のＤＢサーバ６３がトランザクションの続きを実行することができる。
【０１７１】
しかし、第３の他のトランザクション処理例では、待機状態のＤＢサーバ６３が現用状態とＤＢサーバ６２と同様のトランザクションを継続的に実行するため、ＤＢサーバ６３の負荷が高くなるおそれがある。このため、ＤＢサーバ６３の計算リソースをトランザクション以外の処理に活用することが難しくなる。これに対し、前述のＤＢサーバ１００，１００ａ，１００ｂによるトランザクション処理によれば、通常時では、待機状態のＤＢサーバはトランザクションを直接は実行しないため、その負荷を低減できる。
【０１７２】
図３１は、第４の他のトランザクション処理例を示すシーケンス図である。
第４の他のトランザクション処理例では、データベースシステムは、業務サーバ７１と現用状態のＤＢサーバ７２と待機状態のＤＢサーバ７３を含む。また、このデータベースシステムは、業務サーバ７１とＤＢサーバ７２，７３が共通にアクセス可能なキュー７４と、ＤＢサーバ７２，７３が共通にアクセス可能なキュー７５とを含む。キュー７４，７５は、業務サーバ７１やＤＢサーバ７２，７３と異なる装置に実装されてもよい。
【０１７３】
（Ｓ３７０）業務サーバ７１は、処理要求＃１−１をキュー７４に格納する。（Ｓ３７１）業務サーバ７１は、処理要求＃１−２をキュー７４に格納する。（Ｓ３７２）業務サーバ７１は、コミット要求＃１をキュー７４に格納する。（Ｓ３７３）業務サーバ７１は、処理要求＃２−１をキュー７４に格納する。（Ｓ３７４）業務サーバ７１は、コミット要求＃２をキュー７４に格納する。キュー７４はＦＩＦＯ（First In First Out）型の記憶領域であり、上記のメッセージを到着順に並べて保持している。
【０１７４】
（Ｓ３７５）ＤＢサーバ７２は、キュー７４の先頭から処理要求＃１−１を取り出す。（Ｓ３７６）ＤＢサーバ７２は、更新内容をデータベースに反映させずにトランザクションログに記載しておく。（Ｓ３７７）ＤＢサーバ７２は、処理結果を業務サーバ７１に通知する。（Ｓ３７８）ＤＢサーバ７２，７３に切替命令が入力される。
【０１７５】
（Ｓ３７９）ＤＢサーバ７２は、ＤＢサーバ７２で実行中のトランザクションを完了させるため、キュー７４の先頭から処理要求＃１−２を取り出す。（Ｓ３８０）ＤＢサーバ７２は、更新内容をトランザクションログに記載しておく。（Ｓ３８１）ＤＢサーバ７２は、処理結果を業務サーバ７１に通知する。（Ｓ３８２）ＤＢサーバ７２は、キュー７４の先頭からコミット要求＃１を取り出す。（Ｓ３８３）ＤＢサーバ７２は、トランザクションログを用いてデータベースを更新する。（Ｓ３８４）ＤＢサーバ７２は、トランザクションログをキュー７５に格納する。（Ｓ３８５）ＤＢサーバ７２は、処理結果を業務サーバ７１に送信する。そして、ＤＢサーバ７２は、実行中のトランザクションがなくなったことを検知すると、キュー７４からメッセージを取り出すことを停止する。
【０１７６】
（Ｓ３８６）ＤＢサーバ７３は、キュー７５の先頭からトランザクションログを取り出す。（Ｓ３８７）ＤＢサーバ７３は、トランザクションログを用いてＤＢサーバ７３のデータベースを更新する。（Ｓ３８８）ＤＢサーバ７３は、ＤＢサーバ７２で実行中のトランザクションがなくなると、新たなトランザクションを開始するため、キュー７４の先頭から処理要求＃２−１を取り出す。（Ｓ３８９）ＤＢサーバ７３は、更新内容をトランザクションログに記載しておく。（Ｓ３９０）ＤＢサーバ７３は、処理結果を業務サーバ７１に通知する。（Ｓ３９１）ＤＢサーバ７３は、キュー７４の先頭からコミット要求＃２を取り出す。（Ｓ３９２）ＤＢサーバ７３は、トランザクションログを用いてデータベースを更新する。（Ｓ３９３）ＤＢサーバ７３は、業務サーバ７１に処理結果を通知する。
【０１７７】
このように、第４の他のトランザクション処理例では、ＤＢサーバ７２からＤＢサーバ７３へのスイッチオーバが指示されると、ＤＢサーバ７２で実行中のトランザクションが完了するまで、そのトランザクションに属する処理要求が取り出される。その間に到着した新たなトランザクションを発生させる処理要求は、キュー７４に蓄積される。実行中のトランザクションがなくなると、ＤＢサーバ７３が処理要求を取り出し始める。
【０１７８】
しかし、第４の他のトランザクション処理例では、切替元のＤＢサーバ７２で実行中のトランザクションが全て完了するまで、切替先のＤＢサーバ７３は処理を開始しない。このため、ＤＢサーバ７３が処理を開始する時点でキュー７４には多くの処理要求が蓄積されているおそれがあり、ＤＢサーバ７３の負荷が大きくなるおそれがある。これに対し、前述のＤＢサーバ１００，１００ａ，１００ｂによるトランザクション処理によれば、実行中の複数のトランザクションが切替先のＤＢサーバに順次引き継がれ、切替先のＤＢサーバでは引き継がれたトランザクションから順に処理を再開できる。よって、切替先のＤＢサーバの負荷を低減でき、スイッチオーバを円滑に行える。
【０１７９】
第２の実施の形態のデータベースシステムによれば、トランザクションを実行する現用状態のＤＢサーバが切り替わるとき、実行中のトランザクションを示す移行リスト１４１が切替元のＤＢサーバと切替先のＤＢサーバで共有される。そして、移行リスト１４１に基づいて、実行中のトランザクションに対応するトランザクションログが切替先のＤＢサーバに移行される。このため、実行中のトランザクションを一旦ロールバックして切替先のＤＢサーバに引き継がない場合と比べて、スイッチオーバ直後の切替先のＤＢサーバの負荷を低減できる。よって、データベースシステムの応答時間の悪化を抑え、業務サーバ２０，２０ａを停止させずにスイッチオーバを行うことが可能となる。
【０１８０】
また、コミット前のトランザクションに対応するトランザクションログをＤＢサーバ間で継続的に同期する場合と比べて、待機状態のＤＢサーバの負荷を低減できる。よって、待機状態のＤＢサーバの計算リソースを、データベースの検索などデータベースを更新するトランザクション以外の処理に利用でき、計算リソースを有効活用できる。また、切替元のＤＢサーバに、あるトランザクションに属するメッセージが到着すると、そのトランザクションの移行が他のトランザクションよりも早くなるように移行順位が繰り上がる。これにより、業務サーバ２０，２０ａへの応答時間を短縮することができる。
【０１８１】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０，１０ａにプログラムを実行させることで実現することができる。第２の実施の形態の情報処理は、業務サーバ２０，２０ａ、端末装置３１およびＤＢサーバ１００，１００ａ，１００ｂにプログラムを実行させることで実現することができる。
【０１８２】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムを複製して（インストールして）実行してもよい。
【符号の説明】
【０１８３】
１０，１０ａ  情報処理装置
１１  データベース
１２  記憶部
１３  制御部
１４−１，１４−２  トランザクション
１５−１，１５−２  更新データ
１６  リスト
【図１】
2015191451.tif 000003
【図２】
2015191451.tif 000004
【図３】
2015191451.tif 000005
【図４】
2015191451.tif 000006
【図５】
2015191451.tif 000007
【図６】
2015191451.tif 000008
【図７】
2015191451.tif 000009
【図８】
2015191451.tif 000010
【図９】
2015191451.tif 000011
【図１０】
2015191451.tif 000012
【図１１】
2015191451.tif 000013
【図１２】
2015191451.tif 000014
【図１３】
2015191451.tif 000015
【図１４】
2015191451.tif 000016
【図１５】
2015191451.tif 000017
【図１６】
2015191451.tif 000018
【図１７】
2015191451.tif 000019
【図１８】
2015191451.tif 000020
【図１９】
2015191451.tif 000021
【図２０】
2015191451.tif 000022
【図２１】
2015191451.tif 000023
【図２２】
2015191451.tif 000024
【図２３】
2015191451.tif 000025
【図２４】
2015191451.tif 000026
【図２５】
2015191451.tif 000027
【図２６】
2015191451.tif 000028
【図２７】
2015191451.tif 000029
【図２８】
2015191451.tif 000030
【図２９】
2015191451.tif 000031
【図３０】
2015191451.tif 000032
【図３１】
2015191451.tif 000033