(57)【要約】【課題】データベースの更新内容の連続性を保障して、データベースの二重化を継続できるデータベース二重化システム、記憶装置及びデータベース二重化方法を提供する。【解決手段】データベース１ａを更新した場合に、運用ノード１は、更新に係るログブロックを、一意の連続する値を付して複数のログ本体データ１０２ａの一つに書き込み、書き込みに失敗した他のログ本体データ１０２ａに再書き込みを行なう。待機ノード２は、ログ本体データ１０２ａを受信し、ログブロックに付された値の順に従い、ログ本体データ２０２ａからログブロックを読み出し、読み出した順にデータベース２ａを更新する。【選択図】図３
2011248678.tif 000002
【特許請求の範囲】
【請求項１】
接続している第１及び第２記憶装置がそれぞれデータベースを有し、前記第１記憶装置が有するデータベースが更新された場合、前記データベースの更新内容を、前記第２記憶装置が有するデータベースに反映するデータベース二重化システムにおいて、
前記第１記憶装置は、
データベースを更新した場合に、更新に係るログを生成するログ生成部と、
複数のログが書き込み可能なログファイルを複数記憶する記憶部と、
前記ログ生成部がログを生成する都度、前記記憶部に記憶された一のログファイルに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部と、
該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部と、
該判定部が失敗と判定した場合、前記記憶部に記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部と、
前記書き込み部によりログが書き込まれたログファイルを、前記第２記憶装置へ送信する送信部と
を有しており、
前記第２記憶装置は、
前記送信部が送信したログファイルを受信する受信部と、
該受信部が受信したログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部と、
該読み出し部が読み出したログに基づいて、読み出した順にデータベースを更新する更新部と
を有する
データベース二重化システム。
【請求項２】
前記第１記憶装置は、
前記送信部による送信を停止する停止部と、
該停止部により停止された送信の再開指示を受け付ける受付部と
をさらに有し、
前記送信部は、
前記受付部が再開指示を受け付けた場合、前記停止部が送信を停止してから、前記書き込み部にログが書き込まれたログファイルを送信するようにしてある
請求項１に記載のデータベース二重化システム。
【請求項３】
データベースを有し、該データベースを更新した場合、前記データベースの更新内容を、接続する外部装置が有するデータベースに反映させる記憶装置において、
データベースを更新した場合に、更新に係るログを生成するログ生成部と、
複数のログが書き込み可能なログファイルを複数記憶する記憶部と、
前記ログ生成部がログを生成する都度、前記記憶部に記憶された一のログファイルに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部と、
該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部と、
該判定部が失敗と判定した場合、前記記憶部に記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部と、
前記書き込み部によりログが書き込まれたログファイルを、前記外部装置へ送信する送信部と
を備える記憶装置。
【請求項４】
データベースを有する外部装置と接続し、前記外部装置でデータベースが更新された場合、前記データベースの更新内容を、自身が有するデータベースに反映する記憶装置において、
前記外部装置が有するデータベースの更新に係るログが、読み出し順序を関連付けて書き込まれた複数のログファイルを受信する受信部と、
該受信部が受信した複数のログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部と、
該読み出し部が読み出したログに基づいて、読み出した順序に従ってデータベースを変更する変更部と
を備える記憶装置。
【請求項５】
接続している第１及び第２記憶装置がそれぞれデータベースを有し、前記第１記憶装置が有するデータベースが更新された場合、前記データベースの更新内容を、前記第２記憶装置が有するデータベースに反映するデータベース二重化方法において、
前記第１記憶装置が有するデータベースを更新した場合に、更新に係るログを生成し、
複数のログが書き込み可能なログファイルを複数記憶し、
ログを生成する都度、記憶された一のログファイルに、生成した順序を関連付けて前記ログを書き込み、
書き込みする都度、書き込みに失敗したか否かを判定し、
失敗と判定した場合、記憶された他のログファイルに、前記ログを再書き込し、
ログが書き込まれたログファイルを、前記第２記憶装置へ送信し、
前記第１記憶装置が送信したログファイルを前記第２記憶装置が受信し、
受信したログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出し、
読み出したログに基づいて、読み出した順に前記第２記憶装置が有するデータベースを更新する
データベース二重化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、互いに独立し、それぞれのデータベースの一方が更新された場合、その更新内容を、他方のデータベースに反映させるデータベース二重化システム、記憶装置及びデータベース二重化方法に関する。
【背景技術】
【０００２】
近年、膨大なデジタル情報を処理するため、データベースシステムを有効利用している。このデータベースシステムの信頼性を向上させるために、データベースを二重化する構成が採用される場合がある。例えば、特許文献１には、第１のサーバ内のデータベースの内容と、そのサーバと接続された第２のサーバ内のデータベースの内容とを一致させることにより、データベースの二重化を実現するシステムが開示されている。特許文献１のシステムは、第１及び第２のサーバ間が通信異常により、一方から他方へ情報のコピーに失敗した場合、その情報を差分ファイルへ保存し、復旧した場合に、差分ファイルを他方のサーバへ転送することで、コピーできなかった情報を反映させる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−２０２９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、二つのデータベースの整合性を保障するためには、一方のデータベースが更新された順序に従って、他方のデータベースも更新させる必要がある。ところが、記憶領域の故障又はファイル欠損等のエラーが発生し、後にエラーが復旧した場合、エラー発生前に行われた更新と、エラー復旧後に行なわれた更新との順序が入れ替わるなど、データベースの更新内容の連続性が損なわれるおそれがある。かかる問題は、引用文献１では解決できない。
【０００５】
本発明はかかる事情に鑑みてなされたものであり、その目的とするところは、データベースの更新内容の連続性を保障して、データベースの二重化を継続できるデータベース二重化システム、記憶装置及びデータベース二重化方法を提供することにある。
【課題を解決するための手段】
【０００６】
本願に開示するデータベース二重化システムは、接続している第１及び第２記憶装置がそれぞれデータベースを有し、前記第１記憶装置が有するデータベースが更新された場合、前記データベースの更新内容を、前記第２記憶装置が有するデータベースに反映するデータベース二重化システムにおいて、前記第１記憶装置は、データベースを更新した場合に、更新に係るログを生成するログ生成部と、複数のログが書き込み可能なログファイルを複数記憶する記憶部と、前記ログ生成部がログを生成する都度、前記記憶部に記憶された一のログファイルに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部と、該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部と、該判定部が失敗と判定した場合、前記記憶部に記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部と、前記書き込み部によりログが書き込まれたログファイルを、前記第２記憶装置へ送信する送信部とを有しており、前記第２記憶装置は、前記送信部が送信したログファイルを受信する受信部と、該受信部が受信したログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部と、該読み出し部が読み出したログに基づいて、読み出した順にデータベースを更新する更新部とを有する。
【発明の効果】
【０００７】
本願に開示するデータベース二重化システムの一観点によれば、データベースの更新に係るログの連続性を保障することができるため、二つのデータベースを正確に整合させることができる。
【図面の簡単な説明】
【０００８】
【図１】データベース二重化システム全体を模式的に示す図である。
【図２】運用ノード及び待機ノードが有するハードウェア構成を模式的に示すブロック図である。
【図３】運用ノード及び待機ノードにおいて実現される機能を模式的に示すブロック図である。
【図４】ログ本体データのデータ構造を模式的に示す図である。
【図５】ログ制御データのデータ構造を模式的に示す図である。
【図６】Ｉ／Ｏエラーが発生した場合に、ログ本体データ及びログ制御データに書き込まれるデータを説明するための模式図である。
【図７】ログ本体データへのログブロックの書き込み処理の手順を示すフローチャートである。
【図８】ログ本体データへのログブロックの書き込み処理の手順を示すフローチャートである。
【図９】ログ本体データ及びログ制御データを待機ノードへ送信する処理の手順を示すフローチャートである。
【図１０】運用ノードのデータベースの更新を待機ノードのデータベースに反映する処理の手順を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に、本願に開示するデータベース二重化システム、記憶装置及びデータベース二重化方法について、好適な実施の形態を示す図面に基づいて詳述する。以下では、物理的に独立した二つのデータベースの一方の更新内容を他方へ反映（ミラーコピー）させるデータベースの二重化構成を実現するためのデータベース二重化システムについて説明する。
【００１０】
図１は、データベース二重化システム全体を模式的に示す図である。データベース二重化システムは、データベース１ａ，２ａを有する記憶装置としての運用ノード１及び待機ノード２と、アプリケーションサーバ装置（以下、ＡＰサーバ装置という）３とがネットワークＮを介して接続する構成である。ネットワークＮは、Local Area Network（ＬＡＮ）又はWide Area Network（ＷＡＮ）等である。運用ノード１及び待機ノード２は、ネットワークＮとは異なるデータ搬送路４により接続している。なお、本実施の形態では、運用ノード１及び待機ノード２は、サーバ装置として説明するが、通信機能を備えたパーソナルコンピュータであってもよい。また、ＡＰサーバ装置は、パーソナルコンピュータ、Personal Digital Assistant（ＰＤＡ）又は携帯電話機等であってもよい。
【００１１】
ＡＰサーバ装置３は、各種アプリケーションを実行しており、ネットワークＮを介して運用ノード１又は待機ノード２に各種のトランザクションの実行要求を送信するための装置である。ＡＰサーバ装置３は、トランザクションに基づいて、通常、運用ノード１に対してデータの追加、削除又は変更等のデータベース１ａの更新を要求する。運用ノード１は、ＡＰサーバ装置３の要求に応じてデータベース１ａを更新する。このとき、運用ノード１は、データベース１ａの更新内容を示す更新ログを生成し、生成した更新ログを、データ搬送路４を通じて待機ノード２へ送信する。待機ノード２は、受信した更新ログに基づいて、更新ログが生成された順に、データベース２ａを更新する。これにより、データベース２ａは、データベース１ａとの整合性が保たれる。運用ノード１は、待機ノード２に更新ログを送信した後、トランザクションの終了を報告するコミットを、ＡＰサーバ装置３へ返却する。
【００１２】
このシステムにおいて、運用ノード１に物理的又は論理的な障害が発生することで、ＡＰサーバ装置３からデータベース１ａの更新ができなくなる場合がある。この場合、ＡＰサーバ装置３は、アクセス先を運用ノード１から待機ノード２へ切り替える。上述のように、待機ノード２のデータベース２ａは、運用ノード１のデータベース１ａの更新が反映されている。このため、運用ノード１に障害が発生した場合であっても、ＡＰサーバ装置３は、アクセス先を待機ノード２へ切り替えることで、システム全体を停止することなく、データベース１ａと整合性のあるデータベース２ａの更新を継続できる。
【００１３】
また、データベース二重化システムは、待機ノード２又はデータ搬送路４に障害が発生することで、ミラーコピーが行えない場合がある。この場合、ミラーコピーが停止され、運用ノード１は、更新ログを自装置に蓄積する。待機ノード２又はデータ搬送路４が復旧したときに、運用ノード１は、ミラーコピーの停止以降に蓄積した更新ログを待機ノード２へ送信する。これにより、待機ノード２又はデータ搬送路４の復旧と同時に、データベース１ａの更新内容を、データベース２ａへ反映させることができる。また、運用ノード１は、ミラーコピーの停止中に生成した更新ログのみを待機ノード２へ送信するため、全ての更新ログを送信する場合との対比において、処理時間の短縮化、及び、通信する容量の軽減が可能となる。
【００１４】
以下に、運用ノード１及び待機ノード２の具体的な構成及び動作について詳述する。
【００１５】
図２は、運用ノード１及び待機ノード２が有するハードウェア構成を模式的に示すブロック図である。運用ノード１及び待機ノード２は、同様のハードウェア構成を有しているため、以下の説明では、運用ノード１について説明し、待機ノード２については対応する符号を括弧書きにより示して説明を省略する。
【００１６】
運用ノード１（待機ノード２）は、Central Processing Unit（ＣＰＵ）１１（２１）、Read Only Memory（ＲＯＭ）１２（２２）、Random Access Memory（ＲＡＭ）１３（２３）、通信部１４（２４）、及び大容量記憶装置１５（２５）等のハードウェア各部を備える。これらのハードウェア各部はバスを介して相互に接続されている。なお、ＡＰサーバ装置３は、運用ノード１又は待機ノード２と同様に、ＣＰＵ及びＲＯＭ等を備えたコンピュータで構成されており、説明は省略する。
【００１７】
ＣＰＵ１１（２１）は、ＲＯＭ１２（２２）又は大容量記憶装置１５（２５）に予め格納されている制御プログラムを適宜ＲＡＭ１３（２３）に読み出して実行すると共に、上述したハードウェア各部の動作を制御する。ＲＯＭ１２（２２）は、運用ノード１（待機ノード２）に必要な動作をさせるための種々の制御プログラム１２ａ（２２ａ）を予め格納している。ＲＡＭ１３（２３）は、例えばStatic ＲＡＭ（ＳＲＡＭ）、Dynamic ＲＡＭ（ＤＲＡＭ）、フラッシュメモリ等である。ＲＡＭ１３（２３）は、ＣＰＵ１１（２１）による制御プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１８】
通信部１４（２４）は、データ搬送路４を介して運用ノード１及び待機ノード２を接続し、データ通信を可能にする。なお、通信部１４（２４）は、データ搬送路４とは異なるネットワークＮを介して、ＡＰサーバ装置３との接続も可能にする。大容量記憶装置１５（２５）は、例えばハードディスクドライブであり、データベース１ａ（２ａ）又は更新ログ等の必要な各種データ、及び必要な種々の制御プログラムを格納している。なお、プログラム１２ａ（２２ａ）は、Compact Disc-ROM（ＣＤ−ＲＯＭ）、Digital Versatile Disc-ROM（ＤＶＤ−ＲＯＭ）、又はMagneto-Optical disk（ＭＯ）等の記録媒体５（６）により大容量記憶装置１５（２５）にインストールし、又はネットワークからダウンロードして使用する形態でもよい。
【００１９】
以下に、運用ノード１及び待機ノード２において実現される機能及びその動作について説明する。図３は、運用ノード１及び待機ノード２において実現される機能を模式的に示すブロック図である。
【００２０】
まず、運用ノード１で実現される機能について説明する。図３に示す各機能は、ＣＰＵ１１がＲＯＭ１２に格納されるプログラム１２ａを実行することで実現される。運用ノード１は、制御部１０１、ミラー用ログ格納部１０２及び送受信部１０３等の機能を有する。
【００２１】
制御部１０１は、Relational DataBase Management System（ＲＤＢＭＳ）が実行され、ＡＰサーバ装置３からの要求を受け付け、その要求に従って、データベース１ａに対して、例えばデータの格納又は読み出し等、データベース１ａの更新処理を行う。制御部１０１は、データベース１ａの更新内容の更新ログを生成する。更新ログとは、例えば、更新前後のデータの内容、又はデータの記憶位置情報等である。ミラー用ログ格納部１０２は、データベース１ａを格納する大容量記憶装置１５であり、複数のログ本体データ１０２ａ及びログ制御データ１０２ｂを格納している。制御部１０１は、生成した更新ログを、複数のログ本体データ１０２ａの一つへ書き込むと共に、ログ本体データ１０２ａへの書き込み情報をログ制御データ１０２ｂに書き込む。
【００２２】
図４は、ログ本体データ１０２ａのデータ構造を模式的に示す図である。複数のログ本体データ１０２ａは、「００１」、「００２」等の連続的な一意の番号（以下、本体番号という）が割り当てられている。各ログ本体データ１０２ａには、制御部１０１により生成された更新ログを複数書き込み可能な容量を有している。更新ログは、識別するための情報を格納するヘッダと、更新ログの終端を識別する情報を格納する終端部と付加したログブロックとしてログ本体データ１０２ａに書き込まれる。ヘッダには、ログブロック毎に連続した一意の番号が格納され、以下、この番号をブロック番号という。例えば、最初にログ本体データ１０２ａに書き込まれたログブロックのブロック番号は、「０１」となり、次に書き込まれたログブロックのブロック番号は、「０２」となる。ログ本体データ１０２ａは、ログブロックが書き込まれた時点で、送受信部１０３によりデータ搬送路４を通じて待機ノード２へ送信される。待機ノード２は、ログブロックのブロック番号を確認することで、ログブロックの連続性を確認できる。すなわち、待機ノード２では、データベース１ａのデータが更新された順に、データベース２ａのデータを更新され、正確なミラーコピーが可能となる。
【００２３】
図５は、ログ制御データ１０２ｂのデータ構造を模式的に示す図である。ログ制御データ１０２ｂには、「本体番号」、「ログ本体データ状態」、「書込完了ブロック位置」及び「読出完了ブロック位置」等の各情報が書き込まれる。ログ制御データ１０２ｂは、制御部１０１がログ本体データ１０２ａへログブロックを書き込んだ場合、書き込み情報として、制御部１０１により各情報が書き込まれる。「本体番号」には、制御部１０１がログブロックを書き込もうとしたログ本体データ１０２ａの本体番号が書き込まれる。「ログ本体データ状態」には、制御部１０１がログブロックの書き込みを行なったログ本体データ１０２ａの状態が書き込まれる。例えば、ログブロックの書き込みが正常に完了した場合には、「ログ本体データ状態」には「正常」が書き込まれる。また、Ｉ／Ｏエラーが発生し、ログブロックの書き込みに失敗した場合には、「ログ本体データ状態」には「異常」が書き込まれる。なお、Ｉ／Ｏエラーは、例えば、ミラー用ログ格納部１０２の故障、ログ本体データ１０２ａの破損、又は、ログブロックの書き込み可能な容量の不足等の場合に発生する。「書込完了ブロック位置」には、制御部１０１がログ本体データ１０２ａに書き込んだログブロックのブロック番号が書き込まれる。なお、「ログ本体データ状態」に「異常」が書き込まれた場合には、「書込完了ブロック位置」には、情報が書き込まれない。「読出完了ブロック位置」には、待機ノード２において読み出されたログブロックのブロック番号が書き込まれる。すなわち、運用ノード１においては「読出完了ブロック位置」には、情報が書き込まれない。
【００２４】
次に、制御部１０１がログブロックを一のログ本体データ１０２ａに書き込む際にＩ／Ｏエラーが発生した場合について説明する。
【００２５】
図６は、Ｉ／Ｏエラーが発生した場合に、ログ本体データ１０２ａ及びログ制御データ１０２ｂに書き込まれるデータを説明するための模式図である。ログブロックが一のログ本体データ１０２ａに書き込まれる際にＩ／Ｏエラーが発生した場合、制御部１０１は、連続する本体番号の順序に従い、他のログ本体データ１０２ａへログブロックの書き込みを行なう。例えば、制御部１０１は、データベース１ａを更新した場合、ログブロックを、本体番号「００１」のログ本体データ１０２ａに書き込みを開始する。このとき、制御部１０１は、ログ制御データ１０２ｂの「本体番号」に「００１」を書き込む。Ｉ／Ｏエラーが発生し、本体番号「００１」のログ本体データ１０２ａに書き込めない場合、制御部１０１は、本体番号「００１」のログ本体データ１０２ａへの書き込みをスキップすると共に、ログ制御データ１０２ｂの「ログ本体データ状態」に「異常」を書き込む。次に、制御部１０１は、本体番号「００２」のログ本体データ１０２ａにログブロックを書き込み、ログ制御データ１０２ｂの「本体番号」に「００２」を書き込む。本体番号「００２」のログ本体データ１０２ａへの書き込みが正常に行なわれた場合、制御部１０１は、ログ制御データ１０２ｂの「ログ本体データ状態」に「正常」を書き込み、「書込完了ブロック位置」に、書き込んだログブロックのブロック番号「０１」を書き込む。
【００２６】
なお、Ｉ／Ｏエラーが発生した場合に、制御部１０１は、一のログ制御データ１０２ｂに、時系列に情報を書き込んでもよいし、異なるログ制御データ１０２ｂに情報を書き込んでもよい。異なるログ制御データ１０２ｂに情報を書き込む場合、待機ノード２におけるログ制御データ１０２ｂの参照順序を決めるため、連続する番号を割り当てるようにしてもよい。
【００２７】
制御部１０１は、ログ本体データ１０２ａ及びログ制御データ１０２ｂに各情報が書き込まれる都度、送受信部１０３にデータ搬送路４を介して待機ノード２へ送信させる。また、待機ノード２又はデータ搬送路４に異常が発生した場合、制御部１０１は、送受信部１０３に対して、ログ本体データ１０２ａ及びログ制御データ１０２ｂの送信、すなわち、ミラーコピーを停止させる。待機ノード２又はデータ搬送路４に異常が発生したか否かは、運用ノード１が検知してもよいし、ＡＰサーバ装置３から通知されてもよい。異常が復旧した場合、制御部１０１は、ミラーコピーを再開する。このとき、制御部１０１は、送信の停止前後の差分、すなわち、ミラーコピー停止中に各情報が書き込まれたログ本体データ１０２ａ及びログ制御データ１０２ｂを送信する。ミラーコピー停止中に情報が書き込まれたログ本体データ１０２ａ等を判別するために、例えばフラグを立ててもよいし、ミラー用ログ格納部１０２の他の記憶領域に記憶してもよい。これにより、運用ノード１は、差分を送信するため、復旧後のミラーコピーにかかる処理時間の短縮化、及び、通信する容量を軽減することができる。なお、異常が復旧し、送信を再開する場合、例えば、制御部１０１が、キーボード等からコマンド入力を受け付けて再開してもよいし、ＡＰサーバ装置３からの運用ノード１への指示を受信して再開してもよい。
【００２８】
次に、待機ノード２で実現される機能について説明する。図３に示す待機ノード２の各機能は、ＣＰＵ２１がＲＯＭ２２に格納されるプログラム２２ａを実行することで実現される。待機ノード２は、制御部２０１、ミラー用ログ格納部２０２及び送受信部２０３等の機能を有する。
【００２９】
待機ノード２の送受信部２０３は、運用ノード１から送信されたログ本体データ１０２ａ及びログ制御データ１０２ｂを受信する。ミラー用ログ格納部２０２は、データベース２ａを格納する大容量記憶装置２５であり、送受信部２０３が受信したログ本体データ１０２ａ及びログ制御データ１０２ｂを格納する。以下、ミラー用ログ格納部２０２に格納されたログ本体データ１０２ａ及びログ制御データ１０２ｂは、ログ本体データ２０２ａ及びログ制御データ２０２ｂという。
【００３０】
制御部２０１は、制御部１０１と同様に、ＲＤＢＭＳが実行されている。制御部２０１は、ミラー用ログ格納部２０２に格納されたログ本体データ２０２ａに書き込まれたログブロックのブロック番号から、ログブロックの連続性をチェックする。上述のように、ブロック番号は連続的な一意の値であるため、ブロック番号が連続している場合には、データベース１ａの更新が、待機ノード２に時系列に反映されることになる。この場合、制御部２０１は、ログ本体データ２０２ａ及びログ制御データ２０２ｂに基づいて、ミラーコピーを行なう。なお、待機ノード２において、ブロック番号が連続しないと判定された場合には、待機ノード２は、データベース２ａを使用不可能にする。これにより、データベース２ａがデータベース１ａと不整合の状態で、ＡＰサーバ装置３からデータベース２ａが更新されることを防止できる。
【００３１】
制御部２０１は、ミラーコピーを行なう場合、ログ制御データ２０２ｂの「本体番号」及び「ログ本体データ状態」の情報を読み出す。例えば図６の場合、制御部２０１は、ログ制御データ２０２ｂの「本体番号」及び「ログ本体データ状態」の情報に基づいて、本体番号「００１」のログ本体データ２０２ａは異常であると判定する。このため、制御部２０１は、本体番号「００１」のログ本体データ２０２ａからのログブロックの読み出しをスキップする。次に、制御部２０１は、本体番号「００２」のログ本体データ２０２ａから、ブロック番号「０１」のログブロックを読み出し、データベース２ａへ反映させる。このとき、制御部２０１は、「読出完了ブロック位置」に、読み出したログブロックのブロック番号「０１」を書き込む。これにより、データベース２ａに、データベース２ａの更新内容が反映される。「読出完了ブロック位置」が書き込まれたログ制御データ２０２ｂは、送受信部２０３により運用ノード１へ送信され、運用ノード１において、ログブロックが読み出され、データベース２ａにデータベース１ａの更新が反映されたことが通知される。
【００３２】
以下に、運用ノード１及び待機ノード２それぞれで実行される処理について説明する。
【００３３】
まず、運用ノード１で実行される処理について説明する。図７及び図８は、ログ本体データ１０２ａへのログブロックの書き込み処理の手順を示すフローチャートである。
【００３４】
制御部１０１は、ＡＰサーバ装置３からデータベース１ａの更新要求を受け付けたか否かを判定する（Ｓ１０）。更新要求を受け付けていない場合（Ｓ１０：ＮＯ）、制御部１０１は、受け付けるまで待機する。更新要求を受け付けた場合（Ｓ１０：ＹＥＳ）、制御部１０１は、データベース１ａを更新する（Ｓ１１）。次に、制御部１０１は、Ｓ１１での更新内容に従って、連続する本体番号の順序に従って、一のログ本体データ１０２ａへログブロックを書き込む（Ｓ１２）。例えば、制御部１０１は、最初に更新ログを書き込む場合、本体番号「００１」のログ本体データ１０２ａへログブロックを書き込む。
【００３５】
制御部１０１は、ログブロックの書き込み時にＩ／Ｏエラーが発生したか否かを判定する（Ｓ１３）。Ｉ／Ｏエラーが発生していない場合（Ｓ１３：ＮＯ）、制御部１０１は、ログ制御データ１０２ｂへ必要な情報を書き込む（Ｓ２６）。具体的には、制御部１０１は、ログ制御データ１０２ｂの「本体番号」に、ログブロックを書き込んだログ本体データ１０２ａの本体番号、「ログ本体データ状態」に「正常」を書き込む。また、制御部１０１は、「書込完了ブロック位置」に、ログ本体データ１０２ａに書き込んだログブロックのブロック番号を書き込む。そして、制御部１０１は、本処理を終了する。
【００３６】
Ｉ／Ｏエラーが発生した場合（Ｓ１３：ＹＥＳ）、制御部１０１は、待機ノード２へ通知するために、ログ制御データ１０２ｂへＩ／Ｏエラーの書き込みを行なう（Ｓ１４）。例えば、本体番号「００１」のログ本体データ１０２ａへの更新ログの書き込みにＩ／Ｏエラーが発生した場合、制御部１０１は、ログ制御データ１０２ｂの「本体番号」に「００１」を書き込み、「ログ本体データ状態」に「異常」を書き込む。次に、制御部１０１は、ログブロックを書き込むべきログ本体データ１０２ａを、本体番号の順序に従い変更する（Ｓ１５）。例えば、本体番号「００１」のログ本体データ１０２ａへの書き込み時にＩ／Ｏエラーが発生した場合、制御部１０１は、ログブロックの書き込み先を本体番号「００２」のログ本体データ１０２ａへ変更する。変更後、制御部１０１は、Ｓ１１での更新内容に従って、ログブロックを変更後のログ本体データ１０２ａへ書き込む（Ｓ１６）。
【００３７】
制御部１０１は、ログ本体データ１０２ａへの書き込み時に再びＩ／Ｏエラーが発生したか否かを判定する（Ｓ１７）。Ｉ／Ｏエラーが発生していない場合（Ｓ１７：ＮＯ）、制御部１０１は、Ｓ２６の処理へ移行し、上述したようにログ制御データ１０２ｂへ必要な情報を書き込む。再度Ｉ／Ｏエラーが発生した場合（Ｓ１７：ＹＥＳ）、制御部１０１は、Ｓ１４と同様に、待機ノード２へ通知するために、ログ制御データ１０２ｂへＩ／Ｏエラーの書き込みを行なう（Ｓ１８）。そして、制御部１０１は、待機ノード２へのミラーコピーを停止する（Ｓ１９）。すなわち、ログ本体データ１０２ａ及びログ制御データ１０２ｂは、待機ノード２へ送信されなくなり、運用ノード１のみに蓄積される。
【００３８】
制御部１０１は、Ｓ１５と同様に、ログブロックを書き込むログ本体データ１０２ａを、本体番号の順序に従い変更する（Ｓ２０）。変更後、制御部１０１は、Ｓ１１での更新内容に従って、変更後のログ本体データ１０２ａへログブロックを書き込む（Ｓ２１）。制御部１０１は、ログ本体データ１０２ａへの書き込み時にＩ／Ｏエラーが発生したか否かを判定する（Ｓ２２）。Ｉ／Ｏエラーが発生していない場合（Ｓ２２：ＮＯ）、制御部１０１は、Ｓ２６の処理へ移行し、上述したようにログ制御データ１０２ｂへ必要な情報を書き込む。再度Ｉ／Ｏエラーが発生した場合（Ｓ２２：ＹＥＳ）、制御部１０１は、Ｓ１４と同様に、待機ノード２へ通知するために、ログ制御データ１０２ｂへＩ／Ｏエラーの書き込みを行なう（Ｓ２３）。
【００３９】
次に、制御部１０１は、ミラー用ログ格納部１０２にログブロックが書き込み可能な空きのログ本体データ１０２ａがあるか否かを判定する（Ｓ２４）。空きのログ本体データ１０２ａがある場合（Ｓ２４：ＹＥＳ）、制御部１０１は、Ｓ２０の処理へ戻り、他のログ本体データ１０２ａにログブロックの書き込みが成功するまで、上記処理を繰り返す。空きのログ本体データ１０２ａがない場合（Ｓ２４：ＮＯ）、制御部１０１は、ログ本体データ１０２ａへのログブロックの書き込みを停止し（Ｓ２５）、本処理を終了する。なお、ログ本体データ１０２ａへのログブロックの書き込みを停止した場合であっても、運用ノード１は、ＡＰサーバ装置３からの要求に応じて、データベース１ａの更新処理を行う。
【００４０】
図９は、ログ本体データ１０２ａ及びログ制御データ１０２ｂを待機ノード２へ送信する処理の手順を示すフローチャートである。図９に示す処理は、運用ノード１の制御部１０１により実行される。
【００４１】
制御部１０１は、ログ本体データ１０２ａにログブロックが書き込まれたか否かを判定する（Ｓ３０）。ログブロックが書き込まれていない場合（Ｓ３０：ＮＯ）、制御部１０１は、本処理を終了する。ログブロックが書き込まれた場合（Ｓ３０：ＹＥＳ）、制御部１０１は、例えば、待機ノード２又はデータ搬送路４等に異常が発生したために、ミラーコピーが停止しているか否かを判定する（Ｓ３１）。ミラーコピーを停止している場合（Ｓ３１：ＹＥＳ）、制御部１０１は、ミラーコピーを再開させるか否かを判定する（Ｓ３２）。例えば、キーボード等から運用ノード１へ復帰コマンドを入力し、又は、ＡＰサーバ装置３から指示されることで、制御部１０１は、ミラーコピーを再開する。ミラーコピーを再開させない場合（Ｓ３２：ＮＯ）、制御部１０１は、再開させるまで待機する。なお、ミラーコピーが停止している間は、ログ本体データ１０２ａ及びログ制御データ１０２ｂは、新たな情報が書き込まれても、待機ノード２には送信されない。
【００４２】
ミラーコピーが停止していない場合（Ｓ３１：ＮＯ）、又は、ミラーコピーを再開させる場合（Ｓ３２：ＹＥＳ）、制御部１０１は、ログブロックの書き込み時にＩ／Ｏエラーが発生したか否かを判定する（Ｓ３３）。Ｉ／Ｏエラーが発生していない場合（Ｓ３３：ＮＯ）、すなわち、ログブロックの書き込みは正常に行なわれたため、制御部１０１は、ログブロックが書き込まれたログ本体データ１０２ａを待機ノード２へ送信し（Ｓ３４）、ログ制御データ１０２ｂを送信する（Ｓ３５）。そして、制御部１０１は、本処理を終了する。一方、ログブロックの書き込み時にＩ／Ｏエラーが発生した場合（Ｓ３３：ＹＥＳ）、制御部１０１は、Ｉ／Ｏエラーの発生が書き込まれたログ制御データ１０２ｂのみを待機ノード２へ送信し（Ｓ３５）、本処理を終了する。なお、停止していたミラーコピーを再開させた後に、ログ本体データ１０２ａ等を送信する場合、制御部１０１は、ミラーコピーが停止している間に情報が書き込まれたログ本体データ１０２ａ等を送信する。
【００４３】
次に、待機ノード２で実行される処理について説明する。図１０は、運用ノード１のデータベース１ａの更新を待機ノード２のデータベース２ａに反映する処理の手順を示すフローチャートである。
【００４４】
制御部２０１は、運用ノード１から受信し、ミラー用ログ格納部２０２に格納されたログ制御データ２０２ｂを読み出し、ログ制御データ２０２ｂから「本体番号」を取得する（Ｓ４０）。次に、制御部２０１は、ログ制御データ２０２ｂの「ログ本体データ状態」の情報に基づいて、取得した本体番号のログ本体データ２０２ａが正常であるか否かを判定する（Ｓ４１）。正常でない場合（Ｓ４１：ＮＯ）、制御部２０１は、Ｓ４０の処理へ戻り、ログ制御データ２０２ｂから他の「本体番号」を取得する。
【００４５】
取得した本体番号のログ本体データ２０２ａが正常の場合（Ｓ４１：ＹＥＳ）、制御部２０１は、ログ制御データ２０２ｂの「書込完了ブロック位置」からブロック番号を取得し（Ｓ４２）、該当するログブロックが、既に読み出し済みであるか否かを判定する（Ｓ４３）。既に読み出し済みの場合とは、該当するログブロックがデータベース２ａに反映済みの場合である。既に読み出し済みの場合（Ｓ４３：ＹＥＳ）、制御部２０１は、Ｓ４０の処理に戻る。
【００４６】
読み出し済みでない場合（Ｓ４３：ＮＯ）、制御部２０１は、Ｓ４０で取得した本体番号のログ本体データ２０２ａから、Ｓ４２で取得したブロック番号のログブロックを読み出す（Ｓ４４）。制御部２０１は、読み出し時にＩ／Ｏエラーが発生したか否かを判定する（Ｓ４５）。Ｉ／Ｏエラーが発生していない場合（Ｓ４５：ＮＯ）、制御部２０１は、Ｓ４４で読み出したログブロックに含まれる更新ログを反映させて、データベース２ａを更新する（Ｓ４６）。そして、制御部２０１は、Ｓ４４で読み出したログブロックのブロック番号を、ログ制御データ２０２ｂの「読出完了ブロック位置」に書き込み（Ｓ４７）、本処理を終了する。なお、「読出完了ブロック位置」に書き込まれたログ制御データ２０２ｂは、待機ノード２から運用ノード１へ送信される。
【００４７】
読み出し時にＩ／Ｏエラーが発生した場合（Ｓ４５：ＹＥＳ）、制御部２０１は、ミラーコピーが停止されているか否かを判定する（Ｓ４８）。停止されていない場合（Ｓ４８：ＮＯ）、制御部２０１は、ミラーコピーを停止する（Ｓ４９）。運用ノード１側でミラーコピーがエラーサスペンド状態になっている場合、システム全体がデータへのアクセス禁止となるため、待機ノード２においてミラーコピーを停止して、Ｓ４４で読み出したログブロックと同じログブロックの読み出しをリトライする（Ｓ５０）。その後、制御部２０１は、Ｓ４５の処理に戻る。ミラーコピーが停止されている場合（Ｓ４８：ＹＥＳ）、制御部２０１は、本処理を終了し、データベースの二重化を停止する。この後、待機ノード２のエラーが復旧された後に、制御部２０１は、図１０に示す処理を再開する。
【００４８】
なお、制御部２０１は、ログ本体データ２０２ａがミラー用ログ格納部２０２に一定容量蓄積されたとき、又はＡＰサーバ装置３からの要求を受け付けたとき等に、図１０の処理を実行し、データベース２ａを更新するようにしてもよい。制御部２０１が図１０を実行するタイミングは、適宜変更可能である。
【００４９】
以上説明したように、本実施の形態では、ミラー用ログ格納部１０２に、ログブロックを書き込むログ本体データ１０２ａが連続性を有して複数格納されており、書き込み時にＩ／Ｏエラーが発生した場合には、ログ本体データ１０２ａを切り替えることで、確実にログブロックの書き込みを行なえる。この結果、ログブロックの連続性を保障することができるため、データベース１ａ，２ａ間のミラーコピーを正確に行うことができる。また、待機ノード２にエラーが発生した場合、運用ノード１にログ本体データ１０２ａを蓄積しておき、エラー復旧後、運用ノード１に蓄積したログ本体データ１０２ａを待機ノード２へ送信する。すなわち、エラー復旧後、エラー復旧前後のログ本体データ１０２ａの差分を送信することで、短時間で、データベース１ａ，２ａ間のミラーコピーを完了させることができる。
【００５０】
以上、本発明の実施の形態について、具体的に説明したが、各構成及び動作等は適宜変更可能であって、上述の実施形態に限定されることはない。例えば、運用ノード１が故障してＡＰサーバ装置３がアクセス先を待機ノード２とした後、運用ノード１の故障の復旧後、ＡＰサーバ装置３は、待機ノード２を運用ノードとしてアクセスし続けてもよい。この場合、運用ノード１は、上述した待機ノードとして機能する。あるいは、運用ノード１の故障の復旧後、ＡＰサーバ装置３は、アクセス先を運用ノード１へ再び切り替えて、故障前の状態に戻すようにしてもよい。
【００５１】
以下に、上述の実施形態を含む実施形態に関し、更に付記を開示する。
【００５２】
（付記１）
接続している第１及び第２記憶装置がそれぞれデータベースを有し、前記第１記憶装置が有するデータベースが更新された場合、前記データベースの更新内容を、前記第２記憶装置が有するデータベースに反映するデータベース二重化システムにおいて、
前記第１記憶装置は、
データベースを更新した場合に、更新に係るログを生成するログ生成部と、
複数のログが書き込み可能なログファイルを複数記憶する記憶部と、
前記ログ生成部がログを生成する都度、前記記憶部に記憶された一のログファイルに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部と、
該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部と、
該判定部が失敗と判定した場合、前記記憶部に記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部と、
前記書き込み部によりログが書き込まれたログファイルを、前記第２記憶装置へ送信する送信部と
を有しており、
前記第２記憶装置は、
前記送信部が送信したログファイルを受信する受信部と、
該受信部が受信したログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部と、
該読み出し部が読み出したログに基づいて、読み出した順にデータベースを更新する更新部と
を有する
データベース二重化システム。
【００５３】
（付記２）
前記第１記憶装置は、
前記送信部による送信を停止する停止部と、
該停止部により停止された送信の再開指示を受け付ける受付部と
をさらに有し、
前記送信部は、
前記受付部が再開指示を受け付けた場合、前記停止部が送信を停止してから、前記書き込み部にログが書き込まれたログファイルを送信するようにしてある
付記１に記載のデータベース二重化システム。
【００５４】
（付記３）
前記第２記憶装置は、
前記受信部が受信したログファイルを記憶するログファイル記憶部
をさらに有し、
前記読み出し部は、
任意のタイミングで、前記ログファイル記憶部に記憶されたログファイルからログを読み出すようにしてある
付記１又は２に記載のデータベース二重化システム。
【００５５】
（付記４）
データベースを有し、該データベースを更新した場合、前記データベースの更新内容を、接続する外部装置が有するデータベースに反映させる記憶装置において、
データベースを更新した場合に、更新に係るログを生成するログ生成部と、
複数のログが書き込み可能なログファイルを複数記憶する記憶部と、
前記ログ生成部がログを生成する都度、前記記憶部に記憶された一のログファイルに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部と、
該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部と、
該判定部が失敗と判定した場合、前記記憶部に記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部と、
前記書き込み部によりログが書き込まれたログファイルを、前記外部装置へ送信する送信部と
を備える記憶装置。
【００５６】
（付記５）
前記送信部による送信を停止する停止部と、
該停止部により停止された送信の再開指示を受け付ける受付部と
をさらに有し、
前記送信部は、
前記受付部が再開指示を受け付けた場合、前記停止部が送信を停止してから、前記書き込み部にログが書き込まれたログファイルを送信するようにしてある
付記４に記載の記憶装置。
【００５７】
（付記６）
データベースを有する外部装置と接続し、前記外部装置でデータベースが更新された場合、前記データベースの更新内容を、自身が有するデータベースに反映する記憶装置において、
前記外部装置が有するデータベースの更新に係るログが、読み出し順序を関連付けて書き込まれた複数のログファイルを受信する受信部と、
該受信部が受信した複数のログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部と、
該読み出し部が読み出したログに基づいて、読み出した順序に従ってデータベースを変更する変更部と
を備える記憶装置。
【００５８】
（付記７）
前記受信部が受信したログファイルを記憶するログファイル記憶部
をさらに備え、
前記読み出し部は、
任意のタイミングで、前記ログファイル記憶部に記憶されたログファイルからログを読み出すようにしてある
付記６に記載の記憶装置。
【００５９】
（付記８）
データベースを有するコンピュータに、前記データベースを更新した場合、前記データベースの更新内容を、接続する外部装置が有するデータベースに反映させるプログラムにおいて、
コンピュータを、
データベースを更新した場合に、更新に係るログを生成するログ生成部、
前記ログ生成部がログを生成する都度、複数のログが書き込み可能な記憶された複数のログファイルの一つに、前記ログ生成部が生成した順序を関連付けて前記ログを書き込む書き込み部、
該書き込み部が書き込みする都度、書き込みに失敗したか否かを判定する判定部、
該判定部が失敗と判定した場合、記憶された他のログファイルに、前記書き込み部に前記ログを再書き込みさせる再書き込み部
として機能させるプログラム。
【００６０】
（付記９）
データベースを有する外部装置と接続コンピュータに、前記外部装置でデータベースが更新された場合、前記データベースの更新内容を、自身が有するデータベースに反映させるプログラムにおいて、
コンピュータを、
前記外部装置が有するデータベースの更新に係るログが、読み出し順序を関連付けて書き込まれたログファイルを受信した複数のログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出す読み出し部、及び、
該読み出し部が読み出したログに基づいて、読み出した順序に従ってデータベースを変更する変更部
として機能させるプログラム。
【００６１】
（付記１０）
付記８又は付記９に記載されたプログラムが記録されており、コンピュータでの読み取りが可能な記録媒体。
【００６２】
（付記１１）
接続している第１及び第２記憶装置がそれぞれデータベースを有し、前記第１記憶装置が有するデータベースが更新された場合、前記データベースの更新内容を、前記第２記憶装置が有するデータベースに反映するデータベース二重化方法において、
前記第１記憶装置が有するデータベースを更新した場合に、更新に係るログを生成し、
複数のログが書き込み可能なログファイルを複数記憶し、
ログを生成する都度、記憶された一のログファイルに、生成した順序を関連付けて前記ログを書き込み、
書き込みする都度、書き込みに失敗したか否かを判定し、
失敗と判定した場合、記憶された他のログファイルに、前記ログを再書き込し、
ログが書き込まれたログファイルを、前記第２記憶装置へ送信し、
前記第１記憶装置が送信したログファイルを前記第２記憶装置が受信し、
受信したログファイルから、該ログファイルに書き込まれたログを、関連付けられた順序に従って読み出し、
読み出したログに基づいて、読み出した順に前記第２記憶装置が有するデータベースを更新する
データベース二重化方法。
【符号の説明】
【００６３】
１  運用ノード（第１記憶装置）
２  待機ノード（第２記憶装置）
３  ＡＰサーバ装置
４  データ搬送路
１ａ,２ａ  データベース
１０１  制御部（ログ生成部、書き込み部、判定部、再書き込み部、停止部、受付部）
１０２  ミラー用ログ格納部（記憶部）
１０２ａ  ログ本体データ（ログファイル）
１０３  送受信部（送信部）
２０１  制御部（読み出し部、更新部）
２０３  送受信部（受信部）
【図１】
2011248678.tif 000003
【図２】
2011248678.tif 000004
【図３】
2011248678.tif 000005
【図４】
2011248678.tif 000006
【図５】
2011248678.tif 000007
【図６】
2011248678.tif 000008
【図７】
2011248678.tif 000009
【図８】
2011248678.tif 000010
【図９】
2011248678.tif 000011
【図１０】
2011248678.tif 000012