(57)【特許請求の範囲】
【請求項１】
各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記処理実行装置に応答する実行応答部と、
自装置が正常動作している際に、前記操作命令を確定させる確定命令が前記処理実行装置から送信された場合に、前記実行応答部によって応答された実行結果を自装置に反映させるとともに、前記自装置を複製した複製装置であって、前記自装置から前記実行結果を受信した場合は該実行結果を反映して前記自装置に反映結果を通知し、前記自装置が異常動作中であることを示す異常通知を受信した場合は該複製装置が前記処理実行装置から受信した操作命令を実行して得た実行結果を反映して前記処理実行装置に反映結果を通知する、前記複製装置に対して、前記実行応答部が前記操作命令を実行して得られた前記実行結果を送信する第１結果反映部と、
前記自装置が異常動作している際に、前記確定命令が前記処理実行装置から送信された場合に、前記自装置が異常動作中であることを示す異常通知を前記複製装置に送信する第２結果反映部と、
前記第１結果反映部によって実行結果が送信された前記複製装置から、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記処理実行装置に送信する確定送信部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記確定送信部は、前記処理実行装置から前記確定命令を受信できない異常状態であることを前記複製装置から受信した場合に、前記自装置を停止させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記自装置に障害が発生した場合に、前記複製装置が複製元装置に昇格する昇格順序を記憶する昇格順序記憶部をさらに有し、
前記第２結果反映部は、さらに、前記昇格順序記憶部に記憶される昇格順序に従って、次に複製元装置に昇格する複製装置に対して、前記異常通知を送信することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する結果生成部と、
自装置の複製元である複製元装置が生成した実行結果を前記複製元装置から受信した場合に、前記結果生成部によって生成された実行結果を破棄して、受信した実行結果を自装置に反映させる第１結果反映部と、
前記複製元装置が異常動作していることを示す異常通知を前記複製元装置から受信した場合に、前記結果生成部によって生成された実行結果を自装置に反映させる第２結果反映部と、
前記第１結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記複製元装置に通知する第１結果通知部と、
前記第２結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記処理実行装置に通知する第２結果通知部と
を有することを特徴とする情報処理装置。
【請求項５】
前記第２結果反映部は、前記複製元装置の異常を検出した場合に、前記複製元装置に異常が発生したことを通知するとともに、前記結果生成部によって生成された実行結果を自装置に反映させることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記複製元装置を複製した複製装置が複製元装置に昇格する昇格順序を記憶する昇格順序記憶部と、
前記複製元装置が異常動作していることが検出された場合に、前記昇格順序記憶部に記憶される昇格順序に従って、自装置が複製元装置に昇格すべきか否かを判定する判定部と、
前記判定部によって自装置が複製元装置に昇格すべきと判定された場合に、自装置を複製元装置に昇格させる昇格部とをさらに有することを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
アプリケーションサーバと、複製元データベースサーバと、前記複製元データベースサーバを複製した複製先データベースサーバとを有するデータベースシステムに適したデータ管理方法であって、
前記アプリケーションサーバが、
前記複製元データベースサーバと複製先データベースサーバに、データベースに対する操作命令をマルチキャストで送信し、
送信された操作命令を確定させる場合に、前記複製元データベースサーバと複製先データベースサーバに、前記操作命令を確定させる確定命令をマルチキャストで送信し、
前記複製元データベースサーバが、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記アプリケーションサーバに応答し、
自装置が正常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、応答された前記実行結果を前記自装置に反映させるとともに、当該実行結果を前記複製先データベースサーバに送信し、
前記自装置が異常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、前記自装置が異常動作中であることを示す異常通知を前記複製先データベースサーバに送信し、
前記実行結果の送信先である前記複製先データベースサーバから、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記アプリケーションサーバに送信し、
前記複製先データベースサーバが、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行して実行結果を生成し、
前記複製元データベースサーバから実行結果を受信した場合に、生成した実行結果を破棄して、前記複製先データベースサーバから受信した実行結果を自装置に反映させ、
前記複製元データベースサーバから異常通知を受信した場合に、前記自装置で生成した実行結果を前記自装置に反映させ、
前記複製先データベースサーバから受信した実行結果を反映した場合に、当該実行結果を反映したことを前記複製元データベースサーバに通知し、
前記自装置で生成した実行結果を反映した場合に、当該実行結果を反映したことを前記アプリケーションサーバに通知する
処理を含んだことを特徴とするデータ管理方法。
【請求項８】
アプリケーションサーバと、複製元データベースサーバと、前記複製元データベースサーバを複製した複製先データベースサーバとを有するデータベースシステムであって、
前記アプリケーションサーバは、
前記複製元データベースサーバと複製先データベースサーバに、データベースに対する操作命令をマルチキャストで送信する操作命令送信部と、
前記操作命令送信部によって送信された操作命令を確定させる場合に、前記複製元データベースサーバと複製先データベースサーバに、前記操作命令を確定させる確定命令をマルチキャストで送信する確定命令送信部と、
前記複製元データベースサーバは、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記アプリケーションサーバに応答する実行応答部と、
自装置が正常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、前記実行応答部によって応答された実行結果を自装置に反映させるとともに、当該実行結果を前記複製先データベースサーバに送信する第１結果反映部と、
自装置が異常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、自装置が異常動作中であることを示す異常通知を前記複製先データベースサーバに送信する第２結果反映部と、
前記第１結果反映部によって実行結果が送信された前記複製先データベースサーバから、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記アプリケーションサーバに送信する確定送信部と、
前記複製先データベースサーバは、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する結果生成部と、
前記複製元データベースサーバから実行結果を受信した場合に、前記結果生成部によって生成された実行結果を破棄して、受信した実行結果を自装置に反映させる第１結果反映部と、
前記複製元データベースサーバから異常通知を受信した場合に、前記結果生成部によって生成された実行結果を自装置に反映させる第２結果反映部と、
前記第１結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記複製元データベースサーバに通知する第１結果通知部と、
前記第２結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記アプリケーションサーバに通知する第２結果通知部と
を有することを特徴とするデータベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびデータベースシステムに関する。
【背景技術】
【０００２】
従来、トランザクションは、ＡＣＩＤ（Atomicity  Consistency  Isolation  Durability）特性にもあるように、アプリケーション（Application）とデータベース（Database）との間で一貫している必要がある。このため、データベースでは、トランザクション（Transaction）の確定を行うコミット処理で一貫性、整合性を高めている。このコミット処理によって、トランザクションが途中で終了するなどの異常終了が防止でき、トランザクション処理におけるデータベースの信頼性も高まる。
【０００３】
また、トランザクション処理におけるデータベースの信頼性を高める手法としては、データベースを正副構成とする手法も利用されている。具体的には、トランザクションを実行する正データベースと、正データベースを複製した副データベースとの正副構成とする。そして、トランザクションのコミット時には、正データベースの更新差分を副データベースに送信して同期する。正データベースに異常が発生した場合やトランザクションの実行によって不整合が発生した場合には、副データベースを正データベースとして使用する。
【０００４】
また、コミット処理によって一度確定されたトランザクションは取り消すことができない。このため、複数のデータベースサーバ間に跨って実行される分散トランザクションの場合には、データベースサーバ間でコミットするタイミングの合意を取ることとなる。なお、複数のデータベース間を関連付ける手法としては、データベースリンク等などが利用される。
【０００５】
このような分散トランザクションをコミットする手法としては、２フェーズコミット制御や２相コミット制御などと呼ばれる手法が開示されている。かかる２フェーズコミット制御では、「コミット要求フェーズ」と「コミットフェーズ」の２段階フェーズでコミット処理が実行される。
【０００６】
１段階目の「コミット要求フェーズ」では、各データベースサーバのトランザクションに対して、コミットできる状態を示すコミット準備状態に遷移する指示を送信して、その結果を受け取る。２段階目の「コミットフェーズ」では、各データベースサーバのトランザクションがコミット準備状態に遷移した場合に、各トランザクションに対してコミットの指示を送信する。なお、「コミットフェーズ」では、トランザクションが１つでもコミット準備状態に遷移しない場合には、各トランザクションにロールバックの指示を送信する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第５６４０５６１号明細書
【特許文献２】特開平３−２５０２５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来の２フェーズコミット制御では、トランザクションなどの操作命令を１フェーズで確定することができないという課題があった。
【０００９】
例えば、２フェーズコミット制御では、分散トランザクションを構成するトランザクションが１つでも失敗すると、分散トランザクション全体がロールバックする。したがって、分散トランザクションをコミットするためには、各トランザクションが全部成功するまで再実行することとなる。つまり、２フェーズコミット制御では、「コミット要求フェーズ」によって全トランザクションがコミットできる状態に遷移したことが確認できるまで、「コミットフェーズ」を実行することができない。これに伴い、分散トランザクションでは通信回数が通常トランザクションの倍になるため性能が悪くなるという問題がある。また、分散トランザクションを構成するうちの１つのトランザクションでも失敗すると、トランザクション全体をロールバックする。この段階的な動作の実行中にサーバダウンなどが発生すると、データベースはインダウトな状態となり、アプリケーションは復旧時に結果を確認する必要がある。
【００１０】
一つの側面では、トランザクションなどの操作命令を１フェーズで確定することができる情報処理装置およびデータベースシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
一観点によれば、情報処理装置は、各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記処理実行装置に応答する実行応答部を有する。情報処理装置は、自装置が正常動作している際に、前記操作命令を確定させる確定命令が前記処理実行装置から送信された場合に、前記実行応答部によって応答された実行結果を自装置に反映させる。そして、情報処理装置は、自装置を複製した複製装置に当該実行結果を送信する第１結果反映部を有する。また、情報処理装置は、自装置が異常動作している際に、前記確定命令が前記処理実行装置から送信された場合に、自装置が異常動作中であることを示す異常通知を前記複製装置に送信する第２結果反映部を有する。また、情報処理装置は、前記第１結果反映部によって実行結果が送信された前記複製装置から、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記処理実行装置に送信する確定送信部を有する。
【発明の効果】
【００１２】
開示の装置は、トランザクションなどの操作命令を１フェーズで確定する効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るデータベースシステムの全体構成を示す図である。
【図２】図２は、実施例２に係るアプリケーションサーバの構成を示すブロック図である。
【図３】図３は、マルチキャスト記憶部に記憶される情報の例を示す図である。
【図４】図４は、実施例２に係るＤＢサーバの構成を示すブロック図である。
【図５】図５は、正副関係記憶部に記憶される自装置よりも昇格順序が前のサーバを判断するためのデータ構造例を示す図である。
【図６】図６は、正副関係記憶部に記憶される自装置よりも昇格順序が後のサーバを判断するためのデータ構造例を示す図である。
【図７】図７は、操作命令記憶部に記憶される情報の例を示す図である。
【図８】図８は、操作結果ログ記憶部に記憶される情報の例を示す図である。
【図９】図９は、正ＤＢサーバから副ＤＢサーバに送信される更新ログの例を示す図である。
【図１０】図１０は、実施例２に係るコミット処理の流れを示すシーケンス図である。
【図１１】図１１は、実施例２に係るコミット処理中に異常が発生した場合の処理の流れを示すシーケンス図である。
【図１２】図１２は、実施例２に係る通信異常が発生した場合のコミット処理の流れを示すシーケンス図である。
【図１３】図１３は、２フェーズコミット制御の処理の流れを示すシーケンス図である。
【図１４】図１４は、アプリケーションサーバ制御プログラムを実行するコンピュータシステムの例を示す図である。
【図１５】図１５は、データベースサーバ制御プログラムを実行するコンピュータシステムの例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する情報処理装置およびデータベースシステムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１５】
図１は、実施例１に係るデータベースシステムの全体構成を示す図である。図１に示すように、このシステムは、アプリケーションサーバ１０と、正ＤＢ（Database）サーバ１と副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂと、正ＤＢサーバ２と副ＤＢサーバ２Ａと副ＤＢサーバ２Ｂと、正ＤＢサーバ３と副ＤＢサーバ３Ａと副ＤＢサーバ３Ｂとを有する。このシステムでは、アプリケーションサーバ１０と各ＤＢサーバとが、インターネットやＬＡＮ（Local  Area  Network）などのネットワークなどによって、相互に通信可能に接続される。
【００１６】
アプリケーションサーバ１０は、各ＤＢサーバにトランザクションを実行したり、複数のＤＢサーバを跨った分散トランザクションを実行したりするアプリケーションを実行制御するサーバ装置である。
【００１７】
正ＤＢサーバ１は、アプリケーションサーバ１０の処理対象となるデータを記憶するデータベースサーバ装置である。副ＤＢサーバ１Ａと１Ｂは、正ＤＢサーバ１が記憶するデータを複製して記憶するデータベースサーバ装置である。この正ＤＢサーバ１と副ＤＢサーバ１Ａまたは副ＤＢサーバ１Ｂは、冗長構成における現用装置と待機装置とに相当する。すなわち、正ＤＢサーバ１で障害が発生した場合に、副ＤＢサーバ１Ａが正ＤＢサーバとして機能し、障害発生以降の処理を継続する。
【００１８】
なお、正ＤＢサーバ２と副ＤＢサーバ２Ａと副ＤＢサーバ２Ｂとの関係も、正ＤＢサーバ３と副ＤＢサーバ３Ａと副ＤＢサーバ３Ｂとの関係も、正ＤＢサーバ１と副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂとの関係と同様なので、ここでは省略する。
【００１９】
このような状態において、アプリケーションサーバ１０は、ＤＢサーバ１に対する操作命令を送信する場合、正ＤＢサーバ１、副ＤＢサーバ１Ａ、１Ｂにマルチキャストで送信する。同様に、ＤＢサーバ２に対する操作命令を送信する場合、正ＤＢサーバ２、副ＤＢサーバ２Ａ、２Ｂにマルチキャストで送信する。アプリケーションサーバ１０は、操作命令を確定させる場合に、トランザクションに参加している各データベースサーバに、操作命令を確定させる確定命令をマルチキャストで送信する。
【００２０】
そして、正ＤＢサーバ１と正ＤＢサーバ２と正ＤＢサーバ３は、アプリケーションサーバ１０から操作命令を受信した場合に、当該操作命令を実行し、実行結果をアプリケーションサーバ１０に応答する。また、正ＤＢサーバ１と正ＤＢサーバ２と正ＤＢサーバ３は、自装置が正常に動作している際に、確定命令を受信した場合に、実行結果を自装置に反映させるとともに、当該実行結果を各副サーバに送信する。その後、正ＤＢサーバ１と正ＤＢサーバ２と正ＤＢサーバ３は、各副ＤＢサーバから、実行結果が反映されたことが通知された場合に、操作命令を確定させたことをアプリケーションサーバ１０に送信する。一方、正ＤＢサーバ１と正ＤＢサーバ２と正ＤＢサーバ３は、自装置が異常動作している際に、確定命令を受信した場合に、異常通知を各副サーバに送信する。
【００２１】
そして、副ＤＢサーバ１Ａと１Ｂ、副ＤＢサーバ２Ａと２Ｂ、副ＤＢサーバ３Ａと３Ｂは、アプリケーションサーバ１０から操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する。続いて、副ＤＢサーバ１Ａと１Ｂ、副ＤＢサーバ２Ａと２Ｂ、副ＤＢサーバ３Ａと３Ｂは、各正ＤＢサーバから実行結果を受信した場合に、自装置で生成された実行結果を破棄して、受信した実行結果を自装置に反映させる。その後、副ＤＢサーバ１Ａと１Ｂ、副ＤＢサーバ２Ａと２Ｂ、副ＤＢサーバ３Ａと３Ｂは、当該実行結果を反映したことを各正ＤＢサーバに通知する。一方、副ＤＢサーバ１Ａ、副ＤＢサーバ２Ａ、副ＤＢサーバ３Ａは、各正ＤＢサーバから異常通知を受信した場合に、自装置で生成された実行結果を自装置に反映させる。その後、副ＤＢサーバ１Ａ、副ＤＢサーバ２Ａ、副ＤＢサーバ３Ａは、副ＤＢサーバ１Ｂ、副ＤＢサーバ２Ｂ、副ＤＢサーバ３Ｂに当該実行結果を送信する。その後、実行結果を反映したことをアプリケーションサーバ１０に通知する。
【００２２】
このように、図１に示したシステムは、１つのデータを正副となる複数のサーバに複製として持たせ、データベース操作命令をそれら複数サーバに送信し、独立して処理を行う。そして、システムは、コミット処理中に正ＤＢで異常が発生した場合、副ＤＢの処理結果を正式採用することで、処理を継続し、コミットを完了に導く。つまり、コミット処理は、常に正常に完了するため、２フェーズコミットのように「コミット可能かどうか」を問い合わせるフェーズは不要となる。この結果、トランザクションなどの操作命令を１フェーズで確定することができる。
【実施例２】
【００２３】
次に、本実施例の開示するアプリケーションサーバとＤＢサーバの一例について説明する。実施例２では、アプリケーションサーバおよびＤＢサーバの構成、処理の流れ、実施例２による効果について順に説明する。
【００２４】
［アプリケーションサーバの構成］
図２は、実施例２に係るアプリケーションサーバの構成を示すブロック図である。図２に示すように、アプリケーションサーバ１０は、通信制御Ｉ／Ｆ部１１と入力部１２と表示出力部１３と記憶部１４と制御部１５とを有する。
【００２５】
通信制御Ｉ／Ｆ部１１は、各ＤＢサーバとの間の通信を制御するインタフェースである。例えば、通信制御Ｉ／Ｆ部１１は、各ＤＢサーバにトランザクションやコミット命令を送信する。また、通信制御Ｉ／Ｆ部１１は、操作命令の実行結果やコミット結果を各ＤＢサーバから受信する。
【００２６】
入力部１２は、例えばキーボードやマウスなどであり、トランザクションの内容、トランザクションの開始指示、トランザクションのコミット指示などを管理者等から受け付けて、制御部１５に出力する。表示出力部１３は、例えばモニタやスピーカーなどであり、トランザクションの実行結果やコミット結果などを表示する。
【００２７】
記憶部１４は、制御部１５が実行するプログラムや各種データを記憶する半導体素子やハードディスクなどの記憶装置であり、例えばアプリケーション１４ａとマルチキャスト記憶部１４ｂとを有する。
【００２８】
アプリケーション１４ａは、制御部１５のアプリケーション実行部１５ａによって読み出されて実行されるソフトウエアである。このアプリケーション１４ａは、アプリケーション実行部１５ａによって実行されると、データの更新や読み出しなど各種処理を実行するトランザクションを実行する。
【００２９】
マルチキャスト記憶部１４ｂは、アプリケーションサーバ１０がトランザクションを送信する先を記憶する。図３は、マルチキャスト記憶部に記憶される情報の例を示す図である。図３に示すように、マルチキャスト記憶部１４ｂは、「マルチキャストグループＩＤ、送信宛先」を記憶する。ここで記憶する「マルチキャストグループＩＤ」は、マルチキャストで送信する際のグループを示す識別子であり、「送信宛先」は、送信先のＩＰ（InternetProtocol）アドレスなどである。
【００３０】
例えば、図３の場合、「マルチキャストグループＩＤ＝Ｇｒｏｕｐ１」には、「xxx.xxx.xxx.101」と「xxx.xxx.xxx.102」と「xxx.xxx.xxx.103」とが属していることが示される。また、「マルチキャストグループＩＤ＝Ｇｒｏｕｐ２」には、「xxx.xxx.xxx.101」と「xxx.xxx.xxx.102」とが属していることが示される。なお、図３に示した文字列や数字の羅列などに特段の意味はなく、任意に設定することができる。
【００３１】
制御部１５は、トランザクションの実行要求やコミットの実行要求を送信する処理部であり、例えばＣＰＵ（Central  Processing  Unit）などの電子回路である。また、制御部１５は、ミドルウエアなどで実現されていてもよい。かかる制御部１５は、アプリケーション実行部１５ａと操作命令送信部１５ｂとコミット命令送信部１５ｃとを有する。
【００３２】
アプリケーション実行部１５ａは、アプリケーションを実行してトランザクションを発行する。例えば、アプリケーション実行部１５ａは、入力部１２によってアプリケーションの実行依頼を受信した場合に、該当するアプリケーション１４ａを記憶部１４から読み出す。そして、アプリケーション実行部１５ａは、読み出したアプリケーション１４ａを実行する。このようにして実行されたアプリケーション１４ａは、分散トランザクションなどの様々なトランザクションの実行を操作命令送信部１５ｂに依頼する。
【００３３】
操作命令送信部１５ｂは、各種データを記憶する正ＤＢサーバと正ＤＢサーバを複製した副ＤＢサーバに、各種データを操作する操作命令をマルチキャストで送信する。例えば、操作命令送信部１５ｂは、アプリケーション実行部１５ａによって実行されたアプリケーションから分散トランザクションの実行依頼を受信する。そして、操作命令送信部１５ｂは、実行依頼された分散トランザクションの実行依頼に含まれる「マルチキャストグループＩＤ」に対応する「送信宛先」をマルチキャスト記憶部１４ｂから特定する。その後、操作命令送信部１５ｂは、特定した「送信宛先」各々に、分散トランザクションの実行命令を送信する。
【００３４】
一例として、図１の場合、操作命令送信部１５ｂは、正ＤＢサーバ１と副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂのそれぞれに、レコードＡのデータを１にするトランザクションＡの実行命令をマルチキャストで送信する。同様に、操作命令送信部１５ｂは、正ＤＢサーバ２と副ＤＢサー２Ａと副ＤＢサーバ２Ｂのそれぞれに、レコードＢのデータを２にするトランザクションＢの実行命令をマルチキャストで送信する。
【００３５】
コミット命令送信部１５ｃは、操作命令送信部１５ｂによって送信された操作命令を確定させる場合に、正ＤＢサーバと副ＤＢサーバそれぞれに、操作命令を確定させるコミット命令をマルチキャストで送信する。例えば、コミット命令送信部１５ｃは、操作命令送信部１５ｂによって送信された操作命令の実行結果を正ＤＢサーバから受信する。すると、コミット命令送信部１５ｃは、正ＤＢサーバと副ＤＢサーバそれぞれに、実行したトランザクションを確定させるコミット命令を送信する。
【００３６】
一例として、図１の場合、コミット命令送信部１５ｃは、正ＤＢサーバ１からトランザクションＡの実行結果を受信する。すると、コミット命令送信部１５ｃは、正ＤＢサーバ１と副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂのそれぞれに、トランザクションＡを確定させるコミット命令をマルチキャストで送信する。また、コミット命令送信部１５ｃは、正ＤＢサーバ２からトランザクションＢの実行結果を受信する。すると、コミット命令送信部１５ｃは、正ＤＢサーバ２と副ＤＢサーバ２Ａと副ＤＢサーバ２Ｂのそれぞれに、トランザクションＢを確定させるコミット命令をマルチキャストで送信する。
【００３７】
［ＤＢサーバの構成］
図４は、実施例２に係るＤＢサーバの構成を示すブロック図である。正ＤＢサーバと副ＤＢサーバは、同様の機能を有するので、ここでは両方をまとめたＤＢサーバとして説明する。図４に示すように、ＤＢサーバ２０は、通信制御Ｉ／Ｆ部２１と入力部２２と表示出力部２３とストレージ部２４と正副関係記憶部２５と操作命令記憶部２６と操作結果ログ記憶部２７と制御部３０とを有する。
【００３８】
通信制御Ｉ／Ｆ部２１は、他のＤＢサーバやアプリケーションサーバ１０との間の通信を制御するインタフェースである。例えば、通信制御Ｉ／Ｆ部２１は、トランザクションの実行命令やコミット命令をアプリケーションサーバ１０から受信する。また、通信制御Ｉ／Ｆ部２１は、トランザクションの実行結果やコミット結果をアプリケーションサーバ１０に送信する。
【００３９】
入力部２２は、例えばキーボードやマウスなどであり、ストレージ部２４への各種実行命令、正副切り替え指示などの管理者による操作を受け付けて、制御部３０に出力する。表示出力部２３は、例えばモニタやスピーカーなどであり、トランザクションの実行結果やコミット結果などを表示する。
【００４０】
ストレージ部２４は、アプリケーションサーバ１０の操作対象となるデータ、言い換えると、トランザクションの実行対象となるデータを記憶するデータベースであり、例えば半導体素子やハードディスクなどの記憶装置である。
【００４１】
正副関係記憶部２５は、自装置が正ＤＢサーバか副ＤＢサーバかを判定する際に用いる情報を記憶する。図５は、正副関係記憶部に記憶される自装置よりも昇格順序が前のサーバを判断するためのデータ構造例を示す図であり、図６は、正副関係記憶部に記憶される自装置よりも昇格順序が後のサーバを判断するためのデータ構造例を示す図である。なお、図５や図６に示した文字列や数字の羅列などに特段の意味はなく、任意に設定することができる。
【００４２】
図５や図６に示すように、正副関係記憶部２５は、「前ＤＢ情報、ステータス、Ｎｅｘｔポインタ」を対応付けて記憶する。図５に示される「前ＤＢ情報」は、ＤＢサーバを示す情報であり、「ステータス」は、前ＤＢ情報に示されるＤＢサーバが「正」ＤＢサーバか「副」ＤＢサーバかを示す情報である。「Ｎｅｘｔポインタ」は、前ＤＢ情報に示されるＤＢサーバよりも昇格順序が早いＤＢサーバの情報を示すポインタである。
【００４３】
また、図６に示される「後ＤＢ情報」は、ＤＢサーバを示す情報であり、「ステータス」は、後ＤＢ情報に示されるＤＢサーバが「正」ＤＢサーバか「副」ＤＢサーバかを示す情報である。「Ｎｅｘｔポインタ」は、後ＤＢ情報に示されるＤＢサーバよりも昇格順序が遅いＤＢサーバの情報を示すポインタである。
【００４４】
図５の場合、ＩＰアドレス「xxx.xxx.xxx.101」のサーバが、「正」ＤＢサーバである。現在「副」ＤＢサーバであるＩＰアドレス「xxx.xxx.xxx.102」のＤＢサーバが、「xxx.xxx.xxx.101」のＤＢサーバが異常になった場合に、次に「正」ＤＢサーバに昇格するＤＢサーバある。また、現在「副」ＤＢサーバであるＩＰアドレス「xxx.xxx.xxx.103」のＤＢサーバが、「正」に昇格した「xxx.xxx.xxx.102」のサーバが異常になった場合に、次に「正」サーバに昇格するＤＢサーバである。そして、このＩＰアドレス「xxx.xxx.xxx.103」のサーバが自装置である「ＤＢサーバ２０」であることを示している。
【００４５】
図６の場合、現在「副サーバ」であるＩＰアドレス「xxx.xxx.xxx.104」のＤＢサーバが、自装置であるＩＰアドレス「xxx.xxx.xxx.103」のＤＢサーバが「正」ＤＢサーバに昇格した後に異常になった場合に、次に「正」ＤＢサーバに昇格するＤＢサーバである。現在「副サーバ」であるＩＰアドレス「xxx.xxx.xxx.105」のＤＢサーバが、「正」ＤＢサーバに昇格した「xxx.xxx.xxx.104」のＤＢサーバが異常になった場合に、次に「正」ＤＢサーバに昇格するサーバである。
【００４６】
図４に戻り、操作命令記憶部２６は、アプリケーションサーバ１０から受信した分散トランザクションを記憶する。図７は、操作命令記憶部に記憶される情報の例を示す図である。図７に示すように、操作命令記憶部２６は、「クライアントＩＤ、トランザクションＩＤ、操作命令」を対応付けて記憶する。なお、図７に示した文字列や数字の羅列などに特段の意味はなく、任意に設定することができる。
【００４７】
ここで記憶される「クライアントＩＤ」は、分散トランザクションなどの操作命令を発行した装置を示す情報である。「トランザクションＩＤ」は、アプリケーションサーバ１０やＤＢサーバによって付与され、トランザクションなどの操作命令を一意に識別する識別子である。「操作命令」は、操作するための情報が入ったデータ（構造体）の先頭アドレスを示す。
【００４８】
図７の場合、トランザクションＩＤ＝１とするトランザクションであって、操作命令アドレス（０ｘ００００００２０）に示される、操作情報データをアプリケーション１から受信したことを示す。また、トランザクションＩＤ＝２とするトランザクションであって、操作命令アドレス（０ｘ００００００８０）に示される、操作情報データをアプリケーション２から受信したことを示す。
【００４９】
操作結果ログ記憶部２７は、トランザクションの実行結果を記憶する半導体素子やハードディスクなどの記憶装置である。図８は、操作結果ログ記憶部に記憶される情報の例を示す図である。図８に示すように、操作結果ログ記憶部２７は、「クライアントＩＤ、トランザクションＩＤ、操作ログ」を対応付けて記憶する。なお、図８に示した文字列や数字の羅列などに特段の意味はなく、任意に設定することができる。
【００５０】
ここで記憶される「クライアントＩＤ」は、分散トランザクションなどの操作命令を発行した装置を示す情報である。「トランザクションＩＤ」は、実行されたトランザクションなどの操作命令を一意に識別する識別子である。「操作ログ」は、トランザクションの実行結果ログの一時格納アドレスである。なお、操作ログは、アドレス情報である場合に限られず、データそのものであってもよい。つまり、インメモリＤＢやＲＤＢ（Relational  Database）など、サーバで使用するＤＢ種別によって任意に設定変更できる。
【００５１】
図８の場合、アプリケーション１から受信したトランザクションＩＤ＝１とするトランザクションを実行した結果、データが「０ｘ２０００００２０」に示すアドレスの値となったことを示す。また、アプリケーション２から受信したトランザクションＩＤ＝２とするトランザクションを実行した結果、データが「０ｘ２０００００８０」に示すアドレスの値となったことを示す。
【００５２】
制御部３０は、トランザクションの実行やコミットを実行する処理部であり、例えばＣＰＵなどの電子回路である。また、制御部３０は、ミドルウエアなどで実現されていてもよい。かかる制御部３０は、生存監視部３１とミラーリング制御部３２と命令実行部３３とコミット部３４と結果通知部３５とを有する。
【００５３】
生存監視部３１は、例えばＰＩＮＧやＳＮＭＰ（Simple  Network  Management  Protocol）等を用いて、自装置と接続される各ＤＢサーバの生存監視を実行する。そして、生存監視部３１は、障害が発生しているＤＢサーバを検出した場合に、障害を検出したことを制御部３０の他の制御部に通知する。一例として、図１の場合、正ＤＢサーバ１の生存監視部３１は、副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂの生存監視を実施する。また、副ＤＢサーバ１Ａの生存監視部３１は、正ＤＢサーバ１と副ＤＢサーバ１Ｂの生存監視を実施する。副ＤＢサーバ１Ｂの生存監視部３１は、正ＤＢサーバ１と副ＤＢサーバ１Ａの生存監視を実施する。
【００５４】
ミラーリング制御部３２は、正副関係記憶部２５を参照し、自装置が正ＤＢサーバか副ＤＢサーバかを判定してデータの複製処理を行う。例えば、図５や図６の場合、ミラーリング制御部３２は、自装置の「ステータス」が「副」となっていることから、自装置が副ＤＢサーバとして動作していると判定する。また、後述する命令実行部３３とコミット部３４と結果通知部３５は、正ＤＢサーバである場合と副ＤＢサーバである場合とで制御が異なる。したがって、命令実行部３３とコミット部３４と結果通知部３５については、正ＤＢサーバとして機能する場合と副ＤＢサーバとして機能する場合とのそれぞれについて説明する。
【００５５】
命令実行部３３は、アプリケーションサーバ１０から操作命令を受信した場合に、当該操作命令を実行し、実行結果をアプリケーションサーバ１０に応答する。
【００５６】
（正ＤＢサーバの場合）
例えば、命令実行部３３は、アプリケーションサーバ１０からトランザクションを受信した場合に、受信したトランザクションに関する情報を操作命令記憶部２６に格納する。そして、命令実行部３３は、受信したトランザクションを実行し、実行した結果を操作結果ログ記憶部２７に格納する。また、命令実行部３３は、受信したトランザクションを実行したことをアプリケーションサーバ１０に送信する。
【００５７】
（副ＤＢサーバの場合）
例えば、命令実行部３３は、アプリケーションサーバ１０からトランザクションを受信した場合に、受信したトランザクションに関する情報を操作命令記憶部２６に格納する。そして、命令実行部３３は、受信したトランザクションを実行し、実行した結果を操作結果ログ記憶部２７に格納する。
【００５８】
図４に戻り、コミット部３４は、操作命令を確定させるコミット命令がアプリケーションサーバ１０から送信された場合に、当該操作命令をコミットする。
【００５９】
（正ＤＢサーバの場合）
例えば、コミット部３４は、自装置が正常動作している際に、トランザクションをコミットさせるコミット命令がアプリケーションサーバ１０から送信された場合に、命令実行部３３によって応答された実行結果を自装置に反映させる。そして、コミット部３４は、各副ＤＢサーバに当該実行結果を送信する。
【００６０】
一例として、コミット部３４は、自装置が正常動作している際に、トランザクションＩＤ＝１のコミット命令をアプリケーションサーバ１０から受信したとする。この場合、コミット部３４は、操作命令記憶部２６に記憶される「トランザクションＩＤ＝１」の操作命令と操作結果ログ記憶部２７に記憶される「トランザクションＩＤ＝１」の操作ログを抽出する。その後、コミット部３４は、ストレージ部２４上の「アドレスポインタ」が示す操作情報に従った位置に、操作ログにおける「操作ログ」が示す値を反映する。そして、コミット部３４は、更新したログを示す更新ログ、言い換えると、反映した操作ログを各副ＤＢサーバに送信する。
【００６１】
コミット部３４が送信する更新ログの例としては、図９に示す操作ログがある。図９は、正ＤＢサーバから副ＤＢサーバに送信される更新ログの例を示す図である。図９に示すように、更新ログは、「クライアントＩＤ、トランザクションＩＤ、更新ログ」が対応付けられている。「クライアントＩＤ」は、コミット対象のトランザクションの発行元装置を示す情報である。「トランザクションＩＤ」は、コミット対象のトランザクションなどを一意に識別する識別子である。「更新ログ」は、コミットすべき実行結果である。すなわち、図９の場合、アプリケーション１から発行されたトランザクションＩＤ＝１は、データを２に更新してコミットすることが示されている。
【００６２】
また、コミット部３４は、自装置が異常動作している際に、コミット命令がアプリケーションサーバ１０から送信された場合に、自装置が異常動作中であることを示す異常通知を各副ＤＢサーバに送信する。一例として、コミット部３４は、トランザクションＩＤ＝１のコミット命令をアプリケーションサーバ１０から受信した後に、障害の発生を検出する。この場合、コミット部３４は、自装置でコミット処理を実行することができないので、自装置が異常動作中であることを示す異常通知を各副ＤＢサーバに送信する。図１の場合、正ＤＢサーバ１のコミット部３４は、副ＤＢサーバ１Ａと副ＤＢサーバ１Ｂに異常通知を送信する。
【００６３】
（副ＤＢサーバの場合）
例えば、コミット部３４は、自装置の複製元である正ＤＢサーバが生成した実行結果を正ＤＢサーバから受信した場合に、自装置で生成された実行結果を破棄して、受信した実行結果を自装置に反映させる。また、コミット部３４は、正ＤＢサーバが異常動作していることを示す異常通知を正ＤＢサーバから受信した場合に、自装置で生成された実行結果を自装置に反映させる。
【００６４】
一例として、コミット部３４は、図９に示した更新ログを正ＤＢサーバから受信した場合、受信した更新ログを正式な結果であると判定する。したがって、コミット部３４は、アプリケーション１から発行されたトランザクションＩＤ＝１については、自装置のストレージ部２４上の該当アドレスポインタが示す操作情報の指す位置を、操作ログが示すデータで更新する。そして、コミット部３４は、自装置の操作結果ログ記憶部２７と操作命令記憶部２６とのそれぞれにおいて、「アプリケーション１、トランザクションＩＤ＝１」が対応付けられた情報を削除する。
【００６５】
また、コミット部３４は、正ＤＢサーバから異常通知を受信した場合に、アプリケーションサーバ１０から受信したコミット命令から「クライアントＩＤ＝アプリケーション１」と「トランザクションＩＤ＝１」を抽出する。そして、コミット部３４は、抽出した「アプリケーション１、トランザクションＩＤ＝１」に対応する操作命令を操作命令記憶部２６から特定し、さらに、対応する操作ログを操作結果ログ記憶部２７から特定する。その後、コミット部３４は、特定した操作命令の「アドレスポインタ」が示す操作情報の位置に格納されるデータを、特定した操作ログのデータで更新する。また、コミット部３４は、自装置の操作結果ログ記憶部２７と操作命令記憶部２６とのそれぞれにおいて、「アプリケーション１、トランザクションＩＤ＝１」が対応付けられた情報を削除する。この時、副ＤＢサーバにコミット対象レコードに対する別アプリケーションからの操作ログが残っていた場合、新しいデータのレコードに対して更新ログを作成する。
【００６６】
図４に戻り、結果通知部３５は、トランザクションのコミットが終了したことをアプリケーションサーバ１０に送信する。
【００６７】
（正ＤＢサーバの場合）
例えば、結果通知部３５は、コミット部３４によって実行結果が送信された各副ＤＢサーバから、当該実行結果が反映されたことが通知された場合に、コミット完了をアプリケーションサーバ１０に送信する。具体的には、結果通知部３５は、正ＤＢサーバである自装置の実行結果で自装置のストレージ部２４を更新する。さらに、結果通知部３５は、正ＤＢサーバである自装置の実行結果で各副ＤＢサーバのストレージ部２４を更新されたことを示す通知を受信する。つまり、結果通知部３５は、自装置で生成した実行結果で自装置および各副ＤＢサーバが更新された場合に、コミット完了をアプリケーションサーバ１０に送信する。
【００６８】
（副ＤＢサーバの場合）
また、結果通知部３５は、正ＤＢサーバから受信した実行結果が反映された場合に、当該実行結果を反映したことを正ＤＢサーバに通知する。また、結果通知部３５は、自装置で生成した実行結果が反映された場合に、当該コミット完了をアプリケーションサーバ１０に送信する。
【００６９】
つまり、結果通知部３５は、正ＤＢサーバが正常に動作している場合には、コミット結果を正ＤＢサーバに通知する。また、結果通知部３５は、正ＤＢサーバが正常に動作していない場合には、正ＤＢサーバに代わって、コミット完了通知をアプリケーションサーバ１０に送信する。なお、副ＤＢサーバは、正ＤＢサーバとのデータの同一性を保証するために、データ反映後に複製処理完了を通知するが、副ＤＢサーバが複数ある場合、２つ目以降の副ＤＢサーバは性能を考慮して非同期に反映してもよい。
【００７０】
［処理の流れ］
次に、図１０〜図１３を用いて、実施例２に係るデータベースシステムにおける処理の流れを説明する。図１０は、実施例２に係るコミット処理の流れを示すシーケンス図である。図１１は、実施例２に係るコミット処理中に異常が発生した場合の処理の流れを示すシーケンス図である。図１２は、実施例２に係る通信異常が発生した場合のコミット処理の流れを示すシーケンス図である。
【００７１】
ここでは、アプリケーションサーバ１０が、正ＤＢサーバＡと副ＤＢサーバＡとを有するサーバ群Ａと、正ＤＢサーバＢと副ＤＢサーバＢとを有するサーバ群Ｂとのそれぞれに、操作命令やコミット命令を送信する例について説明する。なお、ここで示した正ＤＢサーバと副ＤＢサーバは、図４に示した構成を有している。
【００７２】
（コミット処理の流れ）
図１０に示すように、アプリケーションサーバ１０のアプリケーション実行部１５ａは、記憶部１４から読み出したアプリケーションを実行して、分散トランザクションを実行する（ステップＳ１０１）。すると、操作命令送信部１５ｂは、サーバ群Ａの正ＤＢサーバＡと副ＤＢサーバＡとのそれぞれに、トランザクションを発行する（ステップＳ１０２〜ステップＳ１０３）。
【００７３】
続いて、正ＤＢサーバＡの命令実行部３３は、トランザクションを受信して操作命令記憶部２６に格納する（ステップＳ１０４）。また、正ＤＢサーバＡの命令実行部３３は、受信したトランザクションを実行して、実行した結果である操作ログ１を操作結果ログ記憶部２７に格納する（ステップＳ１０５）。その後、正ＤＢサーバＡの命令実行部３３は、受信したトランザクションを実行したことをアプリケーションサーバ１０に送信する（ステップＳ１０６とステップＳ１０７）。
【００７４】
この間、副ＤＢサーバＡにおいても、副ＤＢサーバＡの命令実行部３３は、トランザクションを受信して操作命令記憶部２６に格納する（ステップＳ１０８）。そして、副ＤＢサーバＡの命令実行部３３は、受信したトランザクションを実行して、実行した結果である操作ログ２を操作結果ログ記憶部２７に格納する（ステップＳ１０９）。
【００７５】
続いて、操作命令送信部１５ｂは、サーバ群Ｂの正ＤＢサーバＢと副ＤＢサーバＢとのそれぞれに、トランザクションを発行する（ステップＳ１１０〜ステップＳ１１１）。そして、正ＤＢサーバＢの命令実行部３３は、トランザクションを受信して操作命令記憶部２６に格納する（ステップＳ１１２）。また、正ＤＢサーバＢの命令実行部３３は、受信したトランザクションを実行して、実行した結果である操作ログ３を操作結果ログ記憶部２７に格納する（ステップＳ１１３）。その後、正ＤＢサーバＢの命令実行部３３は、受信したトランザクションを実行したことをアプリケーションサーバ１０に送信する（ステップＳ１１４とステップＳ１１５）。
【００７６】
この間、副ＤＢサーバＢにおいても、副ＤＢサーバＢの命令実行部３３は、トランザクションを受信して操作命令記憶部２６に格納する（ステップＳ１１６）。そして、副ＤＢサーバＢの命令実行部３３は、受信したトランザクションを実行して、実行した結果である操作ログ４を操作結果ログ記憶部２７に格納する（ステップＳ１１７）。
【００７７】
そして、アプリケーションサーバ１０のコミット命令送信部１５ｃは、正ＤＢサーバＡと正ＤＢサーバＢのそれぞれから、トランザクションが実行されたことを受信すると、コミット命令をマルチキャストで送信する（ステップＳ１１８〜ステップＳ１２３）。
【００７８】
すなわち、コミット命令送信部１５ｃは、正ＤＢサーバの数だけ、トランザクションが実行されたことが通知されると、正ＤＢサーバＡと副ＤＢサーバＡと正ＤＢサーバＢと副ＤＢサーバＢのそれぞれに、当該トランザクションに対するコミット命令を送信する。
【００７９】
続いて、正ＤＢサーバＡのコミット部３４は、コミット命令を受信し（ステップＳ１２４）、トランザクション処理を実行する（ステップＳ１２５）。すなわち、コミット部３４は、ステップＳ１０７で生成した操作ログ１でストレージ部２４のデータを更新して、該当するトランザクションを確定させる。その後、コミット部３４は、ステップＳ１０５で生成した操作ログ１を更新ログとして、副ＤＢサーバＡに送信する（ステップＳ１２６とステップＳ１２７）。
【００８０】
この間、副ＤＢサーバＡのコミット部３４は、コミット命令を受信し（ステップＳ１２８）、正ＤＢサーバのコミット待ちとなる（ステップＳ１２９）。その後、更新ログを受信した副ＤＢサーバＡのコミット部３４は、ステップＳ１０９で生成した操作ログ２を破棄する（ステップＳ１３０）。そして、コミット部３４は、正ＤＢサーバから受信した更新ログ（操作ログ１）を自装置のストレージ部２４に反映させて、該当するトランザクションを確定させる（ステップＳ１３１）。その後、結果通知部３５は、データを反映させたことを正ＤＢサーバＡに通知する（ステップＳ１３２）。
【００８１】
正ＤＢサーバＡの結果通知部３５は、各副ＤＢサーバから、当該実行結果が反映されたことが通知された場合に、トランザクションの完了を示すコミット完了をアプリケーションサーバ１０に送信する（ステップＳ１３３〜ステップＳ１３６）。
【００８２】
また、サーバ群Ｂにおいても同様に、正ＤＢサーバＢのコミット部３４は、コミット命令を受信し（ステップＳ１３７）、トランザクション処理を実行する（ステップＳ１３８）。すなわち、コミット部３４は、ステップＳ１１３で生成した操作ログ３でストレージ部２４のデータを更新して、該当するトランザクションを確定させる。その後、コミット部３４は、ステップＳ１１３で生成した操作ログ３を更新ログとして、副ＤＢサーバＢに送信する（ステップＳ１３９とステップＳ１４０）。
【００８３】
この間、副ＤＢサーバＢのコミット部３４は、コミット命令を受信し（ステップＳ１４１）、正ＤＢサーバＢのコミット待ちとなる（ステップＳ１４２）。その後、更新ログを受信した副ＤＢサーバＢのコミット部３４は、ステップＳ１１７で生成した操作ログ４を破棄する（ステップＳ１４３）。そして、コミット部３４は、正ＤＢサーバから受信した更新ログ（操作ログ３）を自装置のストレージ部２４に反映させて、該当するトランザクションを確定させる（ステップＳ１４４）。その後、結果通知部３５は、データを反映させたことを正ＤＢサーバＢに通知する（ステップＳ１４５）。
【００８４】
正ＤＢサーバＢの結果通知部３５は、各副ＤＢサーバから、当該実行結果が反映されたことが通知された場合に、トランザクションの完了を示すコミット完了をアプリケーションサーバ１０に送信する（ステップＳ１４６〜ステップＳ１４９）。
【００８５】
このように、アプリケーションサーバ１０は、サーバ群Ａおよびサーバ群Ｂの両方から、コミット完了を受信した場合に、分散トランザクションの実行を完了する（ステップＳ１５０）。
【００８６】
（コミット処理中に異常が発生した場合の流れ）
次に、図１１を用いて、コミット処理中に異常が発生した場合の流れを説明する。図１１におけるステップＳ２０１〜ステップＳ２２３は、図１０で説明したステップＳ１０１〜ステップＳ１２３と同様の処理なので、ここでは省略する。
【００８７】
正ＤＢサーバＡのコミット部３４は、コミット命令を受信した後（ステップＳ２２４）、例えばハードウェアの異常などの異常発生を検出する。すると、コミット部３４は、正ＤＢサーバＡに異常が発生したことを示す異常通知を副ＤＢサーバＡに送信する（ステップＳ２２５とステップＳ２２６）。
【００８８】
この間、副ＤＢサーバＡのコミット部３４は、コミット命令を受信し（ステップＳ２２７）、正ＤＢサーバのコミット待ちとなる（ステップＳ２２８）。その後、副ＤＢサーバＡのコミット部３４は、異常通知を正ＤＢサーバＡから受信する（ステップＳ２２９）。すると、コミット部３４は、更新ログを選定する（ステップＳ２３０）。すなわち、コミット部３４は、ステップＳ２０９で生成した操作ログ２を自装置のストレージ部２４に反映させて、該当するトランザクションを確定させる（ステップＳ２３１）。その後、結果通知部３５は、データを反映させたことをアプリケーションサーバ１０に通知する（ステップＳ２３２とステップＳ２３３）。
【００８９】
更新ログの選定において、副ＤＢサーバＡは、コミット対象のレコードに対し別のアプリケーションの操作ログが存在した場合、それらコミット処理対象以外の仕掛かり中の操作について、最新のデータに対し再度操作を実行する。仕掛かり中の操作はコミット処理を依頼していたアプリケーションにより排他待ち状態になっていると判断できるため、可能ならば排他待ちを解除する。
【００９０】
また、図１１のステップＳ２３４〜ステップＳ２４６の処理は、図１０のステップＳ１３７〜ステップＳ１４９までの処理と同様なので、ここでは省略する。
【００９１】
このように、アプリケーションサーバ１０は、正ＤＢサーバＡで障害が発生した場合でも、サーバ群Ａおよびサーバ群Ｂの両方から、コミット完了を受信して分散トランザクションの実行を完了する（ステップＳ２４７）。
【００９２】
（通信異常が発生した場合の流れ）
次に、図１２を用いて、通信異常が発生した場合の流れを説明する。図１２におけるステップＳ３０１〜ステップＳ３１９は、図１０で説明したステップＳ１０１〜ステップＳ１１９と同様の処理なので、ここでは省略する。同様に、図１２におけるステップＳ３２０とステップＳ３２１は、図１０で説明したステップＳ１２０とステップＳ１２１と同様の処理なので、ここでは省略する。同様に、図１２におけるステップＳ３２２〜ステップＳ３３５は、図１０で説明したステップＳ１２３〜ステップＳ１３６と同様の処理なので、ここでは省略する。
【００９３】
図１２の場合、アプリケーションサーバ１０のコミット命令送信部１５ｃからマルチキャストで送信されたコミット命令が、正ＤＢサーバＢとアプリケーションサーバ１０との間の通信障害により、正ＤＢサーバＢに届かない。
【００９４】
この場合、副ＤＢサーバＢのコミット部３４は、コミット命令を受信し（ステップＳ３３６）、正ＤＢサーバＢのコミット待ちとなる（ステップＳ３３７）。その後、副ＤＢサーバＢのコミット部３４は、正ＤＢサーバＢから更新ログも異常通知も受信しないまま、ステップＳ３３６から所定時間が経過すると、タイムアウトを検出する（ステップＳ３３８）。すると、コミット部３４は、正ＤＢサーバＢに対して、異常通知を送信する（ステップＳ３３９）。
【００９５】
この異常通知を受信した正ＤＢサーバＢの結果通知部３５は、バックアップを取るなど、データベースシステムとしての各種処理を終了させる（ステップＳ３４１）。そして、正ＤＢサーバＢの結果通知部３５は、自律的に停止し（ステップＳ３４２）、システムが停止したことを副ＤＢサーバＢに通知する（ステップＳ３４３）。なお、ステップＳ３４０〜ステップＳ３４６の処理の順番はこれに限定されるものではなく、任意に変更できる。
【００９６】
その後、副ＤＢサーバＢのコミット部３４は、更新ログを選定する（ステップＳ３４４）。すなわち、コミット部３４は、ステップＳ３１７で生成した操作ログ４を自装置のストレージ部２４に反映させて、該当するトランザクションを確定させる（ステップＳ３４５）。その後、結果通知部３５は、データを反映させたことをアプリケーションサーバ１０に通知する（ステップＳ３４６とステップＳ３４７）。
【００９７】
このように、アプリケーションサーバ１０は、正ＤＢサーバＢで通信障害が発生した場合でも、サーバ群Ａおよびサーバ群Ｂの両方から、コミット完了を受信して分散トランザクションの実行を完了する（ステップＳ３４８）。
【００９８】
［実施例２による効果］
このように、実施例２によれば、分散トランザクションを構成するトランザクションがネットワーク異常やサーバ異常によって失敗しても、予備データベースで処理を継続し、トランザクションを成功させる。これにより、利用者は分散トランザクションを再実行しなくてもよい。さらには、ＤＢのインダウト状態防止、アプリケーションに対するＤＢサーバダウンの隠蔽を実現できる。また、データベースサーバを正副構成とすることで、データの複製処理により、システムの可用性が向上する。また、正ＤＢサーバで異常が発生した場合に、副ＤＢサーバが自動的に正ＤＢサーバに昇格するので、システム停止を伴うことなく、システム全体の影響を小さくすることができる。さらに、昇格順序を自動的に更新することができるので、システムの性能を向上させることができる。また、コミット処理の性能を向上させることができる。
【００９９】
また、一般的な２フェーズコミット制御と比較しても、分散している各トランザクションに対する通信回数が、サーバ間をまたがないトランザクションのコミット処理と同じになり、制御方式が単純化され性能が向上する。また、分散トランザクションのコミット確定処理の性能向上とともに、データベースのインダクト状態を防止できる。
【０１００】
（２フェーズコミット制御の処理の流れ）
ここで、図１３を用いて、一般的な２フェーズコミット制御を簡単に説明する。図１３は、２フェーズコミット制御の処理の流れを示すシーケンス図である。図１３に示すように、アプリケーションサーバは、レコードＡの操作命令をライブラリ装置に送信する（ステップＳ１とステップＳ２）。すると、ライブラリ装置は、レコードＡを有するＤＢサーバＡに転送する（ステップＳ３とステップＳ４）。その後、ライブラリ装置は、ＤＢサーバＡから実行結果を受信して、アプリケーションサーバに応答する（ステップＳ５とステップＳ６）。
【０１０１】
同様に、アプリケーションサーバは、レコードＢの操作命令をライブラリ装置に送信する（ステップＳ７とステップＳ８）。すると、ライブラリ装置は、レコードＡを有するＤＢサーバＢに転送する（ステップＳ９とステップＳ１０）。その後、ライブラリ装置は、ＤＢサーバＢから実行結果を受信して、アプリケーションサーバに応答する（ステップＳ１１とステップＳ１２）。
【０１０２】
その後、アプリケーションサーバは、レコードＡとＢを更新したトランザクションをコミットする指示をライブラリ装置に送信する（ステップＳ１３とステップＳ１４）。続いて、ライブラリ装置は、ＤＢサーバＡとＤＢサーバＢのそれぞれにコミット要求を送信し、コミット準備状態に遷移させる（ステップＳ１５〜ステップＳ２１）。その後、ライブラリ装置は、ＤＢサーバＡとＢからコミット準備状態に遷移した通知を受信すると、ＤＢサーバＡとＢのそれぞれにコミット指示を送信する（ステップＳ２２〜ステップＳ２４）。続いて、ＤＢサーバＡおよびＤＢサーバＢ各々は、コミット処理を実行して、コミット結果をライブラリ装置に送信する（ステップＳ２５〜ステップＳ２８）。そして、ライブラリ装置は、ＤＢサーバＡとＢからコミット終了結果を受信すると、アプリケーションサーバにコミット終了を送信する（ステップＳ２９とステップＳ３０）。
【０１０３】
（比較結果）
このように、実施例２の図１０は、図１３と比較しても、分散している各トランザクションに対する通信回数が少ない。すなわち、分散トランザクションのコミット確定にかかる通信処理回数が削減され、性能を向上させることができる。また、図１３の場合、トランザクションマネージャーでライブラリ装置あるが単一障害点であるため、トランザクション情報を持ったマネージャーで異常が発生すると、複数サーバ間のロック状況が解消されない可能性がある。実施例２では、これを防止することもできる。
【実施例３】
【０１０４】
さて、これまで実施例について説明したが、上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【０１０５】
（他サーバへの適用）
実施例１と２では、アプリケーションサーバとデータベースサーバとを有するデータベースシステムに適用した例について説明したが、これに限定されるものではない。例えば、アプリケーションサーバの代わりに、電子回路等を設計するＣＡＤ（Computer  Aided  Design）装置を適用し、データベースサーバの代わりに、ＣＡＤ装置から指示を受け付けて実際に基板等を生成する生成装置を適用することもできる。すなわち、実施例１や２で説明した１フェーズコミットの制御手法は、現在２フェーズコミットで実施されている様々なシステムに適用することができる。
【０１０６】
（生死確認）
例えば、実施例２では、自装置に接続される他の装置それぞれの生死を確認する例について説明したが、これに限定されるものではない。例えば、各ＤＢサーバは、正副関係記憶部を参照し、正副の昇格順序が自装置の前後に設定されているＤＢサーバについて生死確認を実施するようにしてもよい。
【０１０７】
（システム）
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、例えば図３、図５〜図９等に示した各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１０８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。例えば、命令実行部３３とコミット部３４とを統合するなど、その全部または一部を各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され得る。
【０１０９】
（プログラム）
ところで、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
【０１１０】
図１４は、アプリケーションサーバ制御プログラムを実行するコンピュータシステムの例を示す図である。図１４に示すように、コンピュータシステム１００は、バスを介して、ネットワークインターフェース１０１とＨＤＤ１０２とＲＯＭ１０３とＲＡＭ１０４とＣＰＵ１０５とを有する。ここで、ネットワークインターフェース１０１は、図２に示した通信制御Ｉ／Ｆ部１１に対応する。
【０１１１】
また、ＲＯＭ１０３には、上記実施例と同様の機能を発揮するプログラムが予め記憶されている。つまり、図１４に示すように、ＲＯＭ１０３は、アプリケーション実行プログラム１０３ａと操作命令送信プログラム１０３ｂとコミット命令送信プログラム１０３ｃとが予め記憶されている。
【０１１２】
そして、ＣＰＵ１０５は、アプリケーション実行プログラム１０３ａと操作命令送信プログラム１０３ｂとコミット命令送信プログラム１０３ｃとを読み出してＲＡＭ１０４に展開する。つまり、ＣＰＵ１０５は、アプリケーション実行プログラム１０３ａをアプリケーション実行プロセス１０５ａとして実行する。また、ＣＰＵ１０５は、操作命令送信プログラム１０３ｂを操作命令送信プロセス１０５ｂとして実行する。また、ＣＰＵ１０５は、コミット命令送信プログラム１０３ｃをコミット命令送信プロセス１０５ｃとして実行する。
【０１１３】
なお、アプリケーション実行プロセス１０５ａは、図２に示したアプリケーション実行部１５ａに対応する。また、操作命令送信プロセス１０５ｂは、操作命令送信部１５ｂに対応する。また、コミット命令送信プロセス１０５ｃは、コミット命令送信部１５ｃに対応する。また、ＨＤＤ１０２には、図２に示したアプリケーション１４ａに対応するアプリケーション１０２ａと、マルチキャスト記憶部１４ｂに対応するマルチキャストテーブル１０２ｂが設けられる。
【０１１４】
ところで、上記したプログラム１０３ａ〜１０３ｃは、必ずしもＲＯＭ１０３に記憶させておく必要はない。例えば、コンピュータシステム１００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させておくようにしてもよい。また、コンピュータシステム１００の内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」に記憶させておいてもよい。さらに、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）などを介してコンピュータシステム１００に接続される「他のコンピュータシステム」に記憶させておいてもよい。そして、コンピュータシステム１００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１１５】
すなわち、このプログラムは、上記した「可搬用の物理媒体」、「固定用の物理媒体」、「通信媒体」などの記録媒体に、コンピュータ読み取り可能に記憶されるものである。そして、コンピュータシステム１００は、このような記録媒体からプログラムを読み出して実行することで上記した実施例と同様の機能を実現する。なお、この他の実施例でいうプログラムは、コンピュータシステム１００によって実行されることに限定されるものではない。例えば、他のコンピュータシステムまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【０１１６】
図１５は、データベースサーバ制御プログラムを実行するコンピュータシステムの例を示す図である。図１５に示すように、コンピュータシステム２００は、バスを介して、ネットワークインターフェース２０１とＨＤＤ２０２とＲＯＭ２０３とＲＡＭ２０４とＣＰＵ２０５とを有する。ここで、ネットワークインターフェース２０１は、図４に示した通信制御Ｉ／Ｆ部２１に対応する。
【０１１７】
また、ＲＯＭ２０３には、上記実施例と同様の機能を発揮するプログラムが予め記憶されている。つまり、図１５に示すように、ＲＯＭ２０３は、生存監視プログラム２０３ａとミラーリング制御プログラム２０３ｂと命令実行プログラム２０３ｃとコミットプログラム２０３ｄと結果通知プログラム２０３ｅとが予め記憶されている。
【０１１８】
そして、ＣＰＵ２０５は、各プログラム２０３ａ〜２０３ｅを読み出してＲＡＭ２０４に展開する。つまり、ＣＰＵ２０５は、生存監視プログラム２０３ａを生存監視プロセス２０５ａとして実行する。また、ＣＰＵ２０５は、ミラーリング制御プログラム２０３ｂをミラーリング制御プロセス２０５ｂとして実行する。また、ＣＰＵ２０５は、命令実行プログラム２０３ｃを命令実行プロセス２０５ｃとして実行する。また、ＣＰＵ２０５は、コミットプログラム２０３ｄをコミットプロセス２０５ｄとして実行する。また、ＣＰＵ２０５は、結果通知プログラム２０３ｅを結果通知プロセス２０５ｅとして実行する。
【０１１９】
なお、生存監視プロセス２０５ａは、図４に示した生存監視部３１に対応する。また、ミラーリング制御プロセス２０５ｂは、ミラーリング制御部３２に対応する。また、命令実行プロセス２０５ｃは、命令実行部３３に対応する。また、コミットプロセス２０５ｄは、コミット部３４に対応する。また、結果通知プロセス２０５ｅは、結果通知部３５に対応する。
【０１２０】
また、ＨＤＤ２０２には、図４に示した正副関係記憶部２５に対応する正副関係テーブル２０２ａが設けられる。同様に、ＨＤＤ２０２には、操作命令記憶部２６に対応する操作命令テーブル２０２ｂが設けられる。同様に、ＨＤＤ２０２には、操作結果ログ記憶部２７に対応する操作結果ログテーブル２０２ｃが設けられる。
【０１２１】
ところで、上記したプログラム２０３ａ〜２０３ｅは、必ずしもＲＯＭ２０３に記憶させておく必要はない。例えば、コンピュータシステム２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させておくようにしてもよい。また、コンピュータシステム１００の内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」に記憶させておいてもよい。さらに、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータシステム２００に接続される「他のコンピュータシステム」に記憶させておいてもよい。そして、コンピュータシステム２００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１２２】
すなわち、このプログラムは、上記した「可搬用の物理媒体」、「固定用の物理媒体」、「通信媒体」などの記録媒体に、コンピュータ読み取り可能に記憶されるものである。そして、コンピュータシステム２００は、このような記録媒体からプログラムを読み出して実行することで上記した実施例と同様の機能を実現する。なお、この他の実施例でいうプログラムは、コンピュータシステム２００によって実行されることに限定されるものではない。例えば、他のコンピュータシステムまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【０１２３】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２４】
（付記１）各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記処理実行装置に応答する実行応答部と、
自装置が正常動作している際に、前記操作命令を確定させる確定命令が前記処理実行装置から送信された場合に、前記実行応答部によって応答された実行結果を自装置に反映させるとともに、自装置を複製した複製装置に当該実行結果を送信する第１結果反映部と、
自装置が異常動作している際に、前記確定命令が前記処理実行装置から送信された場合に、自装置が異常動作中であることを示す異常通知を前記複製装置に送信する第２結果反映部と、
前記第１結果反映部によって実行結果が送信された前記複製装置から、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記処理実行装置に送信する確定送信部と、
を有することを特徴とする情報処理装置。
【０１２５】
（付記２）前記確定送信部は、前記処理実行装置から前記確定命令を受信できない異常状態であることを前記複製装置から受信した場合に、自装置を停止させることを特徴とする付記１に記載の情報処理装置。
【０１２６】
（付記３）自装置に障害が発生した場合に、前記複製装置が複製元装置に昇格する昇格順序を記憶する昇格順序記憶部をさらに有し、
前記第２結果反映部は、さらに、前記昇格順序記憶部に記憶される昇格順序に従って、次に複製元装置に昇格する複製装置に対して、前記障害通知を送信することを特徴とする付記１または２に記載の情報処理装置。
【０１２７】
（付記４）各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する結果生成部と
自装置の複製元である複製元装置が生成した実行結果を前記複製元装置から受信した場合に、前記結果生成部によって生成された実行結果を破棄して、受信した実行結果を自装置に反映させる第１結果反映部と、
前記複製元装置が異常動作していることを示す異常通知を前記複製元装置から受信した場合に、前記結果生成部によって生成された実行結果を自装置に反映させる第２結果反映部と、
前記第１結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記複製元装置に通知する第１結果通知部と、
前記第２結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記処理実行装置に通知する第２結果通知部と
を有することを特徴とする情報処理装置。
【０１２８】
（付記５）前記第２結果反映部は、前記複製元装置の異常を検出した場合に、前記複製元装置に異常が発生したことを通知するとともに、前記結果生成部によって生成された実行結果を自装置に反映させることを特徴とする付記４に記載の情報処理装置。
【０１２９】
（付記６）前記複製装置が複製元装置に昇格する昇格順序を記憶する昇格順序記憶部と、
前記複製元装置が異常動作していることが検出された場合に、前記昇格順序記憶部に記憶される昇格順序に従って、自装置が複製元装置に昇格すべきか否かを判定する判定部と、
前記判定部によって自装置が複製元装置に昇格すべきと判定された場合に、自装置を複製元装置に昇格させる昇格部とをさらに有することを特徴とする付記４または５に記載の情報処理装置。
【０１３０】
（付記７）各種データを記憶する記憶制御装置と前記記憶制御装置を複製した複製装置に、前記各種データを操作する操作命令をマルチキャストで送信する操作命令送信部と、
前記操作命令送信部によって送信された操作命令を確定させる場合に、前記記憶制御装置と複製装置に、前記操作命令を確定させる確定命令をマルチキャストで送信する確定命令送信部と、
を有することを特徴とする情報処理装置。
【０１３１】
（付記８）アプリケーションサーバと、複製元データベースサーバと、前記複製元データベースサーバを複製した複製先データベースサーバとを有するデータベースシステムであって、
前記アプリケーションサーバは、
前記複製元データベースサーバと複製先データベースサーバに、データベースに対する操作命令をマルチキャストで送信する操作命令送信部と、
前記操作命令送信部によって送信された操作命令を確定させる場合に、前記複製元データベースサーバと複製先データベースサーバに、前記操作命令を確定させる確定命令をマルチキャストで送信する確定命令送信部と、
前記複製元データベースサーバは、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記アプリケーションサーバに応答する実行応答部と、
自装置が正常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、前記実行応答部によって応答された実行結果を自装置に反映させるとともに、当該実行結果を前記複製先データベースサーバに送信する第１結果反映部と、
自装置が異常動作している際に、前記アプリケーションサーバから確定命令が送信された場合には、自装置が異常動作中であることを示す異常通知を前記複製先データベースサーバに送信する第２結果反映部と、
前記第１結果反映部によって実行結果が送信された前記複製先データベースサーバから、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記アプリケーションサーバに送信する確定送信部と、
前記複製先データベースサーバは、
前記アプリケーションサーバから操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する結果生成部と、
前記複製元データベースサーバから実行結果を受信した場合に、前記結果生成部によって生成された実行結果を破棄して、受信した実行結果を自装置に反映させる第１結果反映部と、
前記複製元データベースサーバから異常通知を受信した場合に、前記結果生成部によって生成された実行結果を自装置に反映させる第２結果反映部と、
前記第１結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記複製元データベースサーバに通知する第１結果通知部と、
前記第２結果反映部によって実行結果が反映された場合に、当該実行結果を反映したことを前記アプリケーションサーバに通知する第２結果通知部と
を有することを特徴とするデータベースシステム。
【０１３２】
（付記９）前記複製先データベースサーバは、
前記第２結果通知部によって、前記実行結果を反映したことが前記アプリケーションサーバに通知された場合に、自装置を複製元データベースサーバに昇格させる昇格部をさらに有することを特徴とする付記８に記載のデータベースシステム。
【０１３３】
（付記１０）コンピュータに、
各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行し、実行結果を前記処理実行装置に応答する実行応答手順と、
自装置が正常動作している際に、前記操作命令を確定させる確定命令が前記処理実行装置から送信された場合に、前記実行応答手順によって応答された実行結果を自装置に反映させるとともに、自装置を複製した複製装置に当該実行結果を送信する第１結果反映手順と、
自装置が異常動作している際に、前記確定命令が前記処理実行装置から送信された場合に、自装置が異常動作中であることを示す異常通知を前記複製装置に送信する第２結果反映手順と、
前記第１結果反映手順によって実行結果が送信された前記複製装置から、当該実行結果が反映されたことが通知された場合に、前記操作命令を確定させたことを前記処理実行装置に送信する確定送信手順と、
を実行させることを特徴とする情報処理プログラム。
【０１３４】
（付記１１）コンピュータに、
各種処理を実行する処理実行装置から操作命令を受信した場合に、当該操作命令を実行して実行結果を生成する結果生成手順と
自装置の複製元である複製元装置が生成した実行結果を前記複製元装置から受信した場合に、前記結果生成手順によって生成された実行結果を破棄して、受信した実行結果を自装置に反映させる第１結果反映手順と、
前記複製元装置が異常動作していることを示す異常通知を前記複製元装置から受信した場合に、前記結果生成手順によって生成された実行結果を自装置に反映させる第２結果反映手順と、
前記第１結果反映手順によって実行結果が反映された場合に、当該実行結果を反映したことを前記複製元装置に通知する第１結果通知手順と、
前記第２結果反映手順によって実行結果が反映された場合に、当該実行結果を反映したことを前記処理実行装置に通知する第２結果通知手順と
を実行させることを特徴とする情報処理プログラム。
【０１３５】
（付記１２）コンピュータに、
各種データを記憶する記憶制御装置と前記記憶制御装置を複製した複製装置に、前記各種データを操作する操作命令をマルチキャストで送信する操作命令送信手順と、
前記操作命令送信手順によって送信された操作命令を確定させる場合に、前記記憶制御装置と複製装置に、前記操作命令を確定させる確定命令をマルチキャストで送信する確定命令送信手順と、
を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【０１３６】
１０  アプリケーションサーバ
１１  通信制御Ｉ／Ｆ部
１２  入力部
１３  表示出力部
１４  記憶部
１４ａ  アプリケーション
１４ｂ  マルチキャスト記憶部
１５  制御部
１５ａ  アプリケーション実行部
１５ｂ  操作命令送信部
１５ｃ  コミット命令送信部
２０  ＤＢサーバ
２１  通信制御Ｉ／Ｆ部
２２  入力部
２３  表示出力部
２４  ストレージ部
２５  正副関係記憶部
２６  操作命令記憶部
２７  操作結果ログ記憶部
３０  制御部
３１  生存監視部
３２  ミラーリング制御部
３３  命令実行部
３４  コミット部
３５  結果通知部
【図１】
0005640767.tif 000002
【図２】
0005640767.tif 000003
【図３】
0005640767.tif 000004
【図４】
0005640767.tif 000005
【図５】
0005640767.tif 000006
【図６】
0005640767.tif 000007
【図７】
0005640767.tif 000008
【図８】
0005640767.tif 000009
【図９】
0005640767.tif 000010
【図１０】
0005640767.tif 000011
【図１１】
0005640767.tif 000012
【図１２】
0005640767.tif 000013
【図１３】
0005640767.tif 000014
【図１４】
0005640767.tif 000015
【図１５】
0005640767.tif 000016