(57)【要約】  クライアント装置から同一の操作情報が再送信された場合に重複実行を無くす。実施形態のデータベースシステムは、それぞれがデータベースを記憶し、１つがマスターとして動作し、少なくとも１つがマスターをバックアップするスレーブとして動作する複数のサーバ装置と、データベースに対する操作を指示する操作情報をマスターのサーバ装置に送信するクライアント装置と、を備えるデータベースシステムであって、クライアント装置は、操作情報に、操作情報を識別する識別子を付加し、複数のサーバ装置のそれぞれは、データベースを記憶するデータ保存部と、クライアント装置から受信した操作情報に応じて、データ保存部に記憶されているデータベースを変更する操作部と、操作情報に応じたデータベースの変更のログに、操作情報の識別子を付加するログ処理部と、を備える。
2017042890.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがデータベースを記憶し、１つがマスターとして動作し、少なくとも１つが前記マスターをバックアップするスレーブとして動作する複数のサーバ装置と、
前記データベースに対する操作を指示する操作情報を前記マスターのサーバ装置に送信するクライアント装置と、
を備えるデータベースシステムであって、
前記クライアント装置は、前記操作情報に、前記操作情報を識別する識別子を付加し、
前記複数のサーバ装置のそれぞれは、
前記データベースを記憶するデータ保存部と、
前記識別子のリストを記憶する識別子記憶部と、
前記データベースの変更のログを記憶するログ保存部と、
前記クライアント装置から受信した前記操作情報に応じて、前記データ保存部に記憶されている前記データベースを変更し、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を前記識別子記憶部に記憶させる操作部と、
前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を付加したログを前記ログ保存部に記憶させるログ処理部と、
再起動がされた場合、前記ログ保存部に記憶されたログに基づき、前記データ保存部に記憶された前記データベースを復元するとともに、前記ログ保存部に記憶されたログに付加された前記識別子に基づき、前記識別子記憶部に記憶された前記識別子のリストを復元するリカバリ部と、
を備え、
前記操作部は、前記クライアント装置から受信した前記操作情報の前記識別子が、前記識別子記憶部に記憶されている場合、受信した前記操作情報に応じた前記データベースの変更を実行しない
データベースシステム。
【請求項２】
前記複数のサーバ装置のそれぞれは、
前記識別子が付加された前記ログを前記スレーブのサーバ装置に送信する第１レプリケーション部と、
前記マスターのサーバ装置から前記識別子が付加された前記ログを受信し、前記マスターのサーバ装置から受信した前記ログに応じて、前記データ保存部に記憶されている前記データベースを変更する第２レプリケーション部と、
をさらに有し、
前記第２レプリケーション部は、前記ログに応じて前記データベースを変更する場合、前記ログの前記識別子を前記識別子記憶部に記憶させる
請求項１に記載のデータベースシステム。
【請求項３】
前記クライアント装置は、同一の前記操作情報を前記マスターのサーバ装置に再送信する場合、同一の前記識別子を前記操作情報に付加する
請求項１または２に記載のデータベースシステム。
【請求項４】
前記操作部は、現時点から一定時間前の時点より前に受信した前記操作情報の前記識別子を、前記識別子記憶部から削除する
請求項３に記載のデータベースシステム。
【請求項５】
前記クライアント装置は、送信した前記操作情報に応じた前記データベースの変更が成功しなかった場合、前記操作情報を送信してから前記一定時間を経過していないことを条件として、同一の前記操作情報を前記マスターのサーバ装置に再送信する
請求項４に記載のデータベースシステム。
【請求項６】
前記複数のサーバ装置のうちの１つを前記マスターのサーバ装置に設定する調停装置をさらに備え、
前記クライアント装置は、送信した前記操作情報に応じた変更が成功しなかった場合、前記調停装置から通知された前記マスターのサーバ装置に同一の前記操作情報を再送信する
請求項５に記載のデータベースシステム。
【請求項７】
前記ログ保存部は、前記マスターのサーバ装置から受信した前記ログを記憶する
請求項２から６の何れか１項に記載のデータベースシステム。
【請求項８】
前記複数のサーバ装置のそれぞれは、前記クライアント装置から受信した前記操作情報の前記識別子が、前記識別子記憶部に記憶されている場合、受信した前記操作情報に応じた処理が成功したことを表す結果を前記クライアント装置に送信する結果送信部をさらに有する
請求項２から７の何れか１項に記載のデータベースシステム。
【請求項９】
前記クライアント装置は、前記操作情報を生成する毎にユニークな前記識別子を生成する
請求項１から８の何れか１項に記載のデータベースシステム。
【請求項１０】
前記クライアント装置は、他の装置から受信した情報に基づく前記識別子を前記操作情報に付加する
請求項１から８の何れか１項に記載のデータベースシステム。
【請求項１１】
それぞれがデータベースを記憶し、１つがマスターとして動作し、少なくとも１つが前記マスターをバックアップするスレーブとして動作する複数のサーバ装置と、
前記データベースに対する操作を指示する操作情報を前記マスターのサーバ装置に送信するクライアント装置と、
を備えるデータベースシステムにおいて用いられる前記サーバ装置であって、
前記クライアント装置は、前記操作情報に、前記操作情報を識別する識別子を付加し、
前記サーバ装置は、
前記データベースを記憶するデータ保存部と、
前記識別子のリストを記憶する識別子記憶部と、
前記データベースの変更のログを記憶するログ保存部と、
前記クライアント装置から受信した前記操作情報に応じて、前記データ保存部に記憶されている前記データベースを変更し、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を前記識別子記憶部に記憶させる操作部と、
前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を付加したログを前記ログ保存部に記憶させるログ処理部と、
再起動がされた場合、前記ログ保存部に記憶されたログに基づき、前記データ保存部に記憶された前記データベースを復元するとともに、前記ログ保存部に記憶されたログに付加された前記識別子に基づき、前記識別子記憶部に記憶された前記識別子のリストを復元するリカバリ部と、
を備え、
前記操作部は、前記クライアント装置から受信した前記操作情報の前記識別子が、前記識別子記憶部に記憶されている場合、受信した前記操作情報に応じた前記データベースの変更を実行しない
サーバ装置。
【請求項１２】
情報処理装置を、請求項１１に記載の前記サーバ装置として機能させるためのプログラム。
【請求項１３】
それぞれがデータベースを記憶し、１つがマスターとして動作し、少なくとも１つが前記マスターをバックアップするスレーブとして動作する複数のサーバ装置と、
前記データベースに対する操作を指示する操作情報を前記マスターのサーバ装置に送信するクライアント装置と、
を備えるデータベースシステムにおいて実行される情報処理方法であって、
前記クライアント装置が、前記操作情報に、前記操作情報を識別する識別子を付加し、
前記サーバ装置が、前記クライアント装置から受信した前記操作情報に応じて、データ保存部に記憶されている前記データベースを変更し、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を識別子記憶部に記憶させ、
前記サーバ装置が、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を付加したログをログ保存部に記憶させ、
前記サーバ装置が、再起動がされた場合、前記ログ保存部に記憶されたログに基づき、前記データ保存部に記憶された前記データベースを復元するとともに、前記ログ保存部に記憶されたログに付加された前記識別子に基づき、前記識別子記憶部に記憶された前記識別子のリストを復元し、
前記サーバ装置が、前記クライアント装置から受信した前記操作情報の前記識別子が、前記識別子記憶部に記憶されている場合、受信した前記操作情報に応じた前記データベースの変更を実行しない
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベースシステム、サーバ装置、プログラムおよび情報処理方法に関する。
【背景技術】
【０００２】
近年、２４時間、３６５日、運用を停止できないサービス等に、データベースを多重化することにより高可用化したデータベースシステムが利用されている。高可用化したデータベースシステムとして、例えば、複数のサーバ装置のそれぞれが別個のデータベースを有するシステムが知られている。このシステムでは、１つのサーバ装置がマスターとして動作し、他のサーバ装置がスレーブとして動作する。【０００３】
マスターは、クライアント装置から直接データベースの更新を受け付けるサーバ装置である。スレーブは、マスターの複製のデータベースを有するサーバ装置である。マスターのサーバ装置がデータベースを更新した場合、スレーブのサーバ装置は、マスターと同一の更新処理を実行する。これにより、データベースシステムでは、マスターとスレーブとの間でデータベースを同期させて、データの整合性を保つことができる。マスターとスレーブとの間でデータの同期を取る処理をレプリケーションと呼ぶ。【０００４】
また、スレーブは、マスターのバックアップとして機能する。マスターのサーバ装置に障害が発生した場合、何れかのスレーブがマスターに変更される。これにより、データベースシステムは、一部のサーバ装置が故障しても、サービスを停止することなく、サービスを継続することができる。マスターのサーバが故障した場合に、スレーブのサーバ装置をマスターに変更する処理をフェイルオーバと呼ぶ。【０００５】
また、フェイルオーバが発生した場合、クライアント装置は、マスターのサーバ装置との接続にエラーが発生するので、フェイルオーバの完了後に新たなマスターのサーバ装置と再接続しなければならない。この場合、クライアント装置は、上位階層のアプリケーションに対して、接続のエラーを隠ぺいしたり、中断を最小限にしたりする処理を実行する。これにより、クライアント装置は、再接続のための処理をアプリケーションに実行させなくてよいので、アプリケーションの開発負担を軽減させることができる。【０００６】
フェイルオーバが発生した場合、クライアント装置は、新たなマスターのサーバ装置に自動的に再接続する。自動的に再接続する方法として、トランザクション毎にＩＤを付加し、マスターおよびスレーブのそれぞれが実行済みのトランザクションのＩＤをキャッシュする方法が知られている。この方法では、フェイルオーバによりトランザクションが中断された場合、クライアント装置は、フェイルオーバ完了後において、中断したトランザクションの実行要求を新しいマスターのサーバ装置に同一のＩＤを付加して再送信する。新たなマスターのサーバ装置は、同一のＩＤをキャッシュしている場合には、再送信された要求を無視し、同一のＩＤをキャッシュしていない場合には、再送信された要求に応じてトランザクションを実行する。これにより、データベースシステムでは、フェイルオーバが発生した場合に、同一のトランザクションの重複実行を無くすことができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０８−２４９２８１号公報
【非特許文献】
【０００８】
【非特許文献１】HornetQ,  a  multi-protocol,  embeddable,  very  high  performance,  clustered,  asynchronous  messaging  system.  ［online］.  ［retrieved  on  2015-05-13］.  Retrieved  from  the  Internet：<URL：  http:hornetq.jboss.org/>.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、このようなデータベースシステムでは、マスターのサーバ装置が、例えばネットワークのエラー等により再起動した場合、再起動後に、同一のサーバ装置が再度マスターに選択される場合がある。この場合、マスターのサーバ装置は、キャッシュしていたＩＤがクリアされる。従って、この場合、マスターのサーバ装置は、クライアント装置から同一の要求が再送信された場合、要求を無視できずにトランザクションを重複実行してしまう。【００１０】
特に、近年、サーバ装置の仮想化の技術が進んでいる。仮想化されたサーバ装置は、物理サーバの負荷の増大またはメンテナンス等により、再起動が生じやすい。従って、データベースシステムのサーバ装置に仮想化されたサーバ装置を用いた場合には、操作情報を重複実行してしまう可能性がより高い。
【課題を解決するための手段】
【００１１】
実施形態のデータベースシステムは、それぞれがデータベースを記憶し、１つがマスターとして動作し、少なくとも１つが前記マスターをバックアップするスレーブとして動作する複数のサーバ装置と、前記データベースに対する操作を指示する操作情報を前記マスターのサーバ装置に送信するクライアント装置と、を備えるデータベースシステムであって、前記クライアント装置は、前記操作情報に、前記操作情報を識別する識別子を付加し、前記複数のサーバ装置のそれぞれは、前記データベースを記憶するデータ保存部と、前記識別子のリストを記憶する識別子記憶部と、前記データベースの変更のログを記憶するログ保存部と、前記クライアント装置から受信した前記操作情報に応じて、前記データ保存部に記憶されている前記データベースを変更し、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を前記識別子記憶部に記憶させる操作部と、前記操作情報に応じて前記データベースを変更する場合、前記操作情報の前記識別子を付加したログを前記ログ保存部に記憶させるログ処理部と、再起動がされた場合、前記ログ保存部に記憶されたログに基づき、前記データ保存部に記憶された前記データベースを復元するとともに、前記ログ保存部に記憶されたログに付加された前記識別子に基づき、前記識別子記憶部に記憶された前記識別子のリストを復元するリカバリ部と、を備え、前記操作部は、前記クライアント装置から受信した前記操作情報の前記識別子が、前記識別子記憶部に記憶されている場合、受信した前記操作情報に応じた前記データベースの変更を実行しない。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施形態に係るデータベースシステムの構成を示す図である。
【図２】図２は、調停装置によるマスターおよびスレーブの設定の処理の流れを示す図である。
【図３】図３は、クライアント装置によるデータベースの操作およびレプリケーションの処理の流れを示す図である。
【図４】図４は、マスターのサーバ装置が故障した状態を示す図である。
【図５】図５は、マスターのサーバ装置が故障した後の処理の流れを示す図である。
【図６】図６は、クライアント装置の構成を示す図である。
【図７】図７は、サーバ装置の構成を示す図である。
【図８】図８は、クライアント装置の処理を示すフローチャートである。
【図９】図９は、マスターのサーバ装置の処理を示すフローチャートである。
【図１０】図１０は、スレーブのサーバ装置の処理を示すフローチャートである。
【図１１】図１１は、リカバリ時のサーバ装置の処理を示すフローチャートである。
【図１２】図１２は、データベースの操作時の処理の流れを示す図である。
【図１３】図１３は、故障時の処理の流れを示す図である。
【図１４】図１４は、未処理の操作情報をスレーブからマスターに変更されたサーバ装置に再送信した場合の処理の流れを示す図である。
【図１５】図１５は、処理済みの操作情報をスレーブからマスターに変更されたサーバ装置に再送信した場合の処理の流れを示す図である。
【図１６】図１６は、マスターのサーバ装置が再起動して、再度マスターに設定された場合の処理の流れを示す図である。
【図１７】図１７は、処理済みの操作情報を、再起動後に再度マスターに設定されたサーバ装置に再送信した場合の処理の流れを示す図である。
【図１８】図１８は、情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら実施形態に係るデータベースシステムについて詳細に説明する。本実施形態に係るデータベースシステムは、クライアント装置から同一の操作情報が再送信された場合に重複実行を無くすことを目的とする。
【００１４】
図１は、実施形態に係るデータベースシステムの構成を示す図である。データベースシステム１０は、複数のサーバ装置３０と、調停装置４０と、クライアント装置５０とを備える。複数のサーバ装置３０、調停装置４０およびクライアント装置５０は、それぞれが情報処理装置であって、ネットワークを介して互いに接続可能である。
【００１５】
複数のサーバ装置３０は、それぞれがデータベースを記憶する。複数のサーバ装置３０は、１つがマスターとして動作し、他の少なくとも１つのサーバ装置３０がマスターをバックアップするスレーブとして動作する。
【００１６】
マスターのサーバ装置３０は、クライアント装置５０からデータベースの操作を指示する操作情報を受信する。データベースの操作とは、例えば、レコードの参照、検索、更新、削除、新規登録等のことをいう。
【００１７】
スレーブのサーバ装置３０は、マスターのサーバ装置３０との間でレプリケーションを実行して、マスターのサーバ装置３０が有するデータベースと同一の変更処理を実行する。より具体的には、マスターのサーバ装置３０は、データベースの変更（更新、削除、新規登録等）のログをスレーブのサーバ装置３０に送信する。スレーブのサーバ装置３０は、データベースの変更のログを受信すると、ログに従って自身が有するデータベースを変更する。これにより、それぞれのスレーブのサーバ装置３０は、データベースをマスターのサーバ装置３０に同期させることができる。なお、スレーブのサーバ装置３０が複数個設定されている場合、マスターのサーバ装置３０は、それぞれのスレーブのサーバ装置３０との間でレプリケーションを実行する。
【００１８】
調停装置４０は、複数のサーバ装置３０のうちの１つをマスターのサーバ装置３０に設定する。また、調停装置４０は、複数のサーバ装置３０のうちマスター以外の他の少なくとも１つをスレーブのサーバ装置３０に設定する。また、調停装置４０は、それぞれのサーバ装置３０が故障をしたか否かを監視する。調停装置４０は、マスターのサーバ装置３０が故障した場合、何れかのスレーブのサーバ装置３０をマスターのサーバ装置３０に設定する。また、調停装置４０は、クライアント装置５０から問い合わせを受信した場合、何れがマスターのサーバ装置３０であるかを回答する。
【００１９】
クライアント装置５０は、データベースの操作を指示する操作情報をマスターのサーバ装置３０に送信する。また、クライアント装置５０は、マスターのサーバ装置３０が不明である場合、調停装置４０に問い合わせて、マスターのサーバ装置３０の通知を受ける。これにより、クライアント装置５０は、マスターのサーバ装置３０に操作情報を送信することができる。
【００２０】
図２は、調停装置４０によるマスターおよびスレーブの設定の処理の流れを示す図である。調停装置４０は、サービスを開始する場合、何れかのサーバ装置３０が故障した場合および新たなサーバ装置３０が追加された場合等に、それぞれのサーバ装置３０に対してマスターまたはスレーブの役割を設定する。この場合、調停装置４０は、複数のサーバ装置３０が同時にマスターに設定されないように役割を設定する。
【００２１】
なお、データベースシステム１０は、何れかのサーバ装置３０が故障した場合等に、故障していない複数のサーバ装置３０のうちの１つがマスターとして動作し、残りの少なくとも１つがスレーブとして動作すれば、調停装置４０を備えない構成であってもよい。例えば、マスターの故障を検知したり、新たなサーバ装置３０の追加を検知したりしたタイミングにおいて、それぞれのサーバ装置３０は、特定のディスクロックを取得する。そして、それぞれのサーバ装置３０は、特定のディスクロックが取得できた場合にマスターとして動作し、取得できなかった場合にスレーブとして動作する。これにより、データベースシステム１０は、調停装置４０を備えない構成において、それぞれのサーバ装置３０に適切に役割を設定できる。
【００２２】
また、例えば、マスターの故障を検知したり、新たなサーバ装置３０の追加を検知したりしたタイミングにおいて、複数のサーバ装置３０は、互いに、マスターとなるサーバ装置３０を投票する投票処理を実行する。そして、複数のサーバ装置３０は、マスターが決定するまで投票処理を繰り返す。このようにしても、データベースシステム１０は、調停装置４０を備えない構成において、それぞれのサーバ装置３０に適切に役割を設定できる。
【００２３】
図３は、クライアント装置５０によるデータベースの操作およびレプリケーションの処理の流れを示す図である。
【００２４】
クライアント装置５０は、上位階層のアプリケーションからデータベースの操作の指示を受けた場合、操作情報を生成して、マスターのサーバ装置３０に送信する。操作情報は、例えば、複数の更新処理等をまとめたトランザクションの実行要求であってよい。また、操作情報は、ＳＱＬ文によるデータベースの操作要求であってもよい。また、操作情報は、１つのレコードの更新、削除または新規登録等の要求であってもよい。また、操作情報は、クライアント装置５０がマスターのサーバ装置３０に接続してから、少なくとも１つのトランザクションの実行をし、接続を終了するまでのセッションに含まれる全ての情報であってもよい。
【００２５】
マスターのサーバ装置３０は、クライアント装置５０から操作情報を受信した場合、操作情報に従ってデータベースを操作する。マスターのサーバ装置３０は、操作情報に従ったデータベースの操作が成功すると、クライアント装置５０に成功したことを表す情報を返信する。なお、マスターのサーバ装置３０は、操作情報に従った処理が失敗した場合には、クライアント装置５０に失敗したことを表す情報を返信する。
【００２６】
また、マスターのサーバ装置３０は、操作情報に従ってデータベースを変更する場合、スレーブのサーバ装置３０との間でレプリケーションを実行する。具体的には、マスターのサーバ装置３０は、データベースの変更のログをスレーブのサーバ装置３０に送信する。データベースの変更のログは、データベースの更新、削除または登録等の履歴を伝達できる情報であれば、どのような情報であってもよい。例えば、データベースの変更のログは、データベースの操作を表すＳＱＬ文であってもよいし、レコードレベルの変更データであってもよい。
【００２７】
スレーブのサーバ装置３０は、データベースの変更のログを受信する。そして、スレーブのサーバ装置３０は、受信したログと同一の変更がされるように、データベースを変更する。なお、スレーブのサーバ装置３０が複数存在する場合、マスターのサーバ装置３０は、それぞれのスレーブのサーバ装置３０との間でレプリケーションを実行する。
【００２８】
また、レプリケーションは、同期処理、非同期処理または準同期処理に分けることができる。同期処理では、スレーブのサーバ装置３０がデータベースを変更した後に、マスターのサーバ装置３０のデータベースを変更する。非同期処理では、マスターのサーバ装置３０がデータベースを変更してから、ログをスレーブのサーバ装置３０に送信する。準同期処理では、スレーブのサーバ装置３０がログを受信したことを確認してから、マスターのサーバ装置３０がデータベースを変更する。
【００２９】
本実施形態においては、サーバ装置３０は、同期処理によりレプリケーションを実行する。しかし、サーバ装置３０は、非同期処理または準同期処理によりレプリケーションを実行してもよい。
【００３０】
図４は、マスターのサーバ装置３０が故障した状態を示す図である。調停装置４０は、サービスの運用中において、それぞれのサーバ装置３０から定期的にハートビート（正常に動作していることを示すパケット）を受信して、それぞれのサーバ装置３０の動作を監視する。調停装置４０は、ハートビートが受信できなくなった場合、そのサーバ装置３０が故障したと判断する。
【００３１】
また、マスターのサーバ装置３０が故障している場合、クライアント装置５０は、操作情報を送信しても、結果を受信することができない。クライアント装置５０は、操作情報を送信してから所定時間を経過しても結果を受信できない場合、フェイルオーバが発生したと判断する。
【００３２】
図５は、マスターのサーバ装置３０が故障した後の処理の流れを示す図である。マスターのサーバ装置３０が故障したと判断した場合、調停装置４０は、何れかのスレーブのサーバ装置３０をマスターのサーバ装置３０に変更するフェイルオーバを実行する。
【００３３】
また、クライアント装置５０は、操作情報を送信してから所定時間を経過しても結果を受信できないので、フェイルオーバが発生したと判断した場合、調停装置４０にマスターのサーバ装置３０を問い合わせる。クライアント装置５０は、一例として、マスターのサーバ装置３０のネットワークアドレス等を回答として取得する。そして、クライアント装置５０は、同一の操作情報を、新しいマスターのサーバ装置３０に再送信する。
【００３４】
図６は、クライアント装置５０の構成を示す図である。クライアント装置５０は、操作情報生成部５１と、識別子生成部５２と、操作送信部５３と、結果受信部５４とを有する。
【００３５】
操作情報生成部５１は、アプリケーションからデータベースの操作指示を受け付ける。そして、操作情報生成部５１は、操作指示に応じた処理をサーバ装置３０に実行させるための操作情報を生成する。
【００３６】
識別子生成部５２は、操作情報生成部５１が生成した操作情報毎に、ユニークな識別子を生成する。識別子生成部５２は、一例として、ＵＵＩＤ（Universally  Unique  Identifier）等に基づく識別子を生成する。なお、識別子は、サーバ装置３０に送信されて、サーバ装置３０より少なくとも一定期間保持される。識別子は、サーバ装置３０が保持している期間の範囲でユニークであればよい。ここで、一定期間は、マスターのサーバ装置３０が故障してから、新たなマスターのサーバ装置３０が動作を開始するまでの期間であり、フェイルオーバタイムと呼ぶ。
【００３７】
また、識別子生成部５２は、他の装置から受信した情報に基づき識別子を生成してもよい。識別子生成部５２は、例えば、マスターのサーバ装置３０または他の装置から識別子を受信し、受信した識別子を出力してもよい。また、識別子生成部５２は、例えば、マスターのサーバ装置３０または他の装置から識別子の元となる情報を受信し、受信した情報に基づき識別子を生成してもよい。
【００３８】
操作送信部５３は、操作情報生成部５１により生成された操作情報に、識別子生成部５２により生成された識別子を付加する。そして、操作送信部５３は、識別子を付加した操作情報をマスターのサーバ装置３０に送信する。
【００３９】
結果受信部５４は、マスターのサーバ装置３０から、送信した操作情報に従ったデータベースの操作の結果を受信する。結果受信部５４は、成功したことを表す結果を受信した場合、操作情報生成部５１に結果を返す。操作情報生成部５１は、成功したことを表す結果が返された場合、その結果をアプリケーションに返す。
【００４０】
また、結果受信部５４は、失敗したことを表す結果を受信した場合、または、操作情報を送信してから所定期間が経過しても結果を受信できない場合（タイムアウトした場合）、その旨を操作送信部５３に通知する。この場合、操作送信部５３は、調停装置４０に新しいマスターのサーバ装置３０を問い合わせる。そして、操作送信部５３は、問い合わせて得られた新しいマスターのサーバ装置３０に対して同一の操作情報を再送信する。この場合において、操作送信部５３は、同一の識別子を操作情報に付加する。
【００４１】
なお、結果受信部５４は、操作送信部５３が最初に操作情報を送信してから、フェイルオーバタイムを経過した後も、失敗したことを表す結果を受信するかまたはタイムアウトした場合には、操作情報生成部５１に操作情報を再送信させず、失敗したことを表す結果をアプリケーションに返す。
【００４２】
図７は、サーバ装置３０の構成を示す図である。サーバ装置３０は、データ保存部６１と、識別子記憶部６２と、ログ保存部６３と、情報処理部６４とを有する。
【００４３】
データ保存部６１は、データベースを記憶する。データ保存部６１は、ハードディスク等の不揮発性の記憶装置であってもよいし、ＲＡＭ（Random  Access  Memory）等の揮発性の記憶装置であってもよい。
【００４４】
識別子記憶部６２は、識別子のリストを記憶する。識別子記憶部６２は、ＲＡＭ等の揮発性の記憶装置である。従って、識別子記憶部６２は、サーバ装置３０が再起動した場合、記憶している識別子のリストをクリアする。
【００４５】
ログ保存部６３は、データベースの変更のログを記憶する。ログ保存部６３は、ハードディスク等の不揮発性の記憶装置である。従って、ログ保存部６３は、サーバ装置３０が再起動した場合にも、記憶しているログを記憶し続ける。
【００４６】
情報処理部６４は、ＣＰＵ等のプロセッサがプログラムを実行することにより実現される機能ブロックである。情報処理部６４は、一部の機能構成がハードウェアにより実現されていてもよい。
【００４７】
情報処理部６４は、操作受信部７１と、操作部７２と、ログ処理部７３と、第１レプリケーション部７４と、結果送信部７５と、第２レプリケーション部７６と、リカバリ部７７とを有する。操作受信部７１、操作部７２、ログ処理部７３、第１レプリケーション部７４および結果送信部７５は、サーバ装置３０をマスターとして動作させるための機能ブロックである。第２レプリケーション部７６は、サーバ装置３０をスレーブとして動作させるための機能ブロックである。
【００４８】
操作受信部７１は、クライアント装置５０から、識別子が付加された操作情報を受信する。操作部７２は、クライアント装置５０から受信した操作情報に応じて、データ保存部６１からデータベースを読み出して操作する。例えば、操作部７２は、クライアント装置５０から受信した操作情報に応じて、データ保存部６１に記憶されているデータベースを変更する。
【００４９】
また、操作部７２は、クライアント装置５０から受信した操作情報に応じてデータベースを変更する場合、操作情報の識別子を識別子記憶部６２に記憶させる。さらに、操作部７２は、クライアント装置５０から操作情報を受信した場合、クライアント装置５０から受信した操作情報の識別子が、識別子記憶部６２に記憶されているか否かをチェックする。そして、操作部７２は、クライアント装置５０から受信した操作情報の識別子が、識別子記憶部６２に記憶されている場合、受信した操作情報に応じたデータベースの変更を実行しない。また、操作部７２は、現時点から一定時間前の時点より前に受信した操作情報の識別子を、識別子記憶部６２から削除する。ここで、一定時間は、フェイルオーバタイムである。
【００５０】
ログ処理部７３は、操作部７２による操作情報に応じたデータベースの変更のログを生成する。そして、ログ処理部７３は、操作情報に応じたデータベースの変更のログに、操作情報の識別子を付加する。また、ログ処理部７３は、識別子が付加されたログをログ保存部６３に記憶させる。
【００５１】
第１レプリケーション部７４は、スレーブのサーバ装置３０との間でレプリケーションを実行する。具体的には、第１レプリケーション部７４は、識別子が付加されたログをスレーブのサーバ装置３０に送信する。
【００５２】
結果送信部７５は、操作情報に応じた処理結果をクライアント装置５０に送信する。結果送信部７５は、例えば、レプリケーションおよび操作情報に応じたデータベースの変更が完了した後に、受信した操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信する。また、結果送信部７５は、例えば、レプリケーション、または、操作情報に応じたデータベースの変更が失敗した場合、受信した操作情報に応じた処理が失敗したことを表す結果をクライアント装置５０に送信する。
【００５３】
また、結果送信部７５は、クライアント装置５０から受信した操作情報の識別子が、識別子記憶部６２に記憶されている場合、受信した操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信する。
【００５４】
第２レプリケーション部７６は、マスターのサーバ装置３０との間でレプリケーションを実行する。具体的には、第２レプリケーション部７６は、マスターのサーバ装置３０から識別子が付加されたログを受信する。続いて、第２レプリケーション部７６は、マスターのサーバ装置３０から受信したログに応じて、データ保存部６１に記憶されているデータベースを変更する。また、第２レプリケーション部７６は、ログをログ保存部６３に記憶させる。さらに、第２レプリケーション部７６は、ログの識別子を識別子記憶部６２に記憶させる。
【００５５】
リカバリ部７７は、サーバ装置３０が再起動された場合、ログ保存部６３に記憶されたログに基づき、データ保存部６１に記憶されたデータベースを復元する。例えば、リカバリ部７７は、通常の動作時において、データ保存部６１に記憶されたデータベースのイメージを定期的に取得して例えば不揮発性の記憶装置に記憶させる。再起動がされた場合、リカバリ部７７は、障害発生点から最も近い時点のデータベースのイメージを読み出してデータ保存部６１に記憶させる。続いて、リカバリ部７７は、そのイメージを取得した時点から後のログをログ保存部６３から読み出し、読み出したログに基づきデータベースを障害発生の直前の時点まで復元する。
【００５６】
また、リカバリ部７７は、再起動がされてデータベースが復元された場合、ログ保存部６３に記憶されたログの識別子に基づき、識別子記憶部６２に記憶された識別子のリストを復元する。
【００５７】
図８は、クライアント装置５０の処理を示すフローチャートである。クライアント装置５０は、アプリケーションからデータベースの操作の指示を受けた場合、図８に示す処理を実行する。
【００５８】
まず、クライアント装置５０は、操作情報を生成する（ステップＳ３１）。続いて、クライアント装置５０は、識別子を生成する（ステップＳ３２）。続いて、クライアント装置５０は、操作情報に識別子を付加したメッセージを生成する（ステップＳ３３）。続いて、クライアント装置５０は、マスターのサーバ装置３０にメッセージを送信する（ステップＳ３４）。
【００５９】
続いて、クライアント装置５０は、マスターのサーバ装置３０から、操作情報に応じた処理が成功したことを表す結果を受信したか否かを判断する（ステップＳ３５）。クライアント装置５０は、成功したことを表す結果を受信していない場合（Ｓ３５のＮｏ）、操作情報を送信してから所定時間を経過してタイムアウトしたか、または、操作情報に応じた処理が失敗したことを表す結果を受信したかを判断する（ステップＳ３６）。クライアント装置５０は、タイムアウトもしておらず、失敗したことを表す結果も受信していない場合（Ｓ３６のＮｏ）、ステップＳ３５に処理を戻して、ステップＳ３５とステップＳ３６の処理を繰り返す。
【００６０】
成功したことを表す結果を受信した場合（Ｓ３５のＹｅｓ）、クライアント装置５０は、アプリケーションにデータベースの操作が成功したことを通知して（ステップＳ３７）、本フローを終了する。
【００６１】
タイムアウトまたは失敗したことを表す結果を受信した場合（Ｓ３６のＹｅｓ）、クライアント装置５０は、最初に操作情報を送信してから、フェイルオーバタイムを経過したか否かを判断する（ステップＳ３８）。フェイルオーバタイムを経過した場合（Ｓ３８のＹｅｓ）、クライアント装置５０は、アプリケーションにデータベースの操作が失敗したことを通知して（ステップＳ３９）、本フローを終了する。
【００６２】
フェイルオーバタイムを経過していない場合（Ｓ３８のＮｏ）、クライアント装置５０は、調停装置４０にマスターのサーバ装置３０を問い合わせる（ステップＳ４０）。続いて、クライアント装置５０は、問い合わせをして得られたマスターのサーバ装置３０に、同一のメッセージ、すなわち、同一の識別子が付加された同一の操作情報を送信する（ステップＳ４１）。クライアント装置５０は、ステップＳ４１を終えると、処理をステップＳ３５に戻し、処理を繰り返す。
【００６３】
図９は、マスターのサーバ装置３０の処理を示すフローチャートである。マスターのサーバ装置３０は、クライアント装置５０からメッセージ（識別子が付加された操作情報）を受信した場合、図９に示す処理を実行する。
【００６４】
まず、操作部７２は、識別子記憶部６２に記憶されている識別子のリストから、フェイルオーバタイム前の時点より前の識別子を削除する（ステップＳ５１）。これにより、操作部７２は、識別子記憶部６２から不要な識別子を削除してメモリ容量を効率良く使用することができる。
【００６５】
続いて、操作部７２は、クライアント装置５０から受信した操作情報の識別子が、識別子記憶部６２に記憶されているか否かをチェックする（ステップＳ５２）。操作情報の識別子が、識別子記憶部６２に記憶されている場合（Ｓ５２のＹｅｓ）、操作部７２は、何ら処理を実行しない。そして、この場合（Ｓ５２のＹｅｓ）、結果送信部７５は、受信した操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信して（ステップＳ５８）、本フローを終了する。
【００６６】
受信した操作情報の識別子が識別子記憶部６２に記憶されていない場合（Ｓ５２のＮｏ）、操作部７２は、受信した操作情報の識別子を識別子記憶部６２に記憶させる（ステップＳ５３）。この場合において、操作部７２は、時刻情報を識別子に付加する。時刻は、例えば、操作情報を受信した時刻である。これにより、操作部７２は、フェイルオーバタイム前の時点より前に受信した識別子を、識別子記憶部６２から削除することができる。
【００６７】
続いて、操作部７２は、受信した操作情報に応じて、データ保存部６１に記憶されたデータベースを操作する（ステップＳ５４）。
【００６８】
続いて、ログ処理部７３は、データベースの操作によって生じたデータベースの変更のログを生成する（ステップＳ５５）。この場合、ログ処理部７３は、データベースの変更のログに、操作情報の識別子を付加する。そして、ログ処理部７３は、識別子が付加されたログをログ保存部６３に記憶させる。
【００６９】
続いて、第１レプリケーション部７４は、スレーブのサーバ装置３０との間でレプリケーションを実行する（ステップＳ５６）。具体的には、第１レプリケーション部７４は、スレーブのサーバ装置３０に識別子が付加されたログを送信して、スレーブのサーバ装置３０からレプリケーションが成功したことを表す結果を受信する。
【００７０】
続いて、操作部７２は、データ保存部６１に記憶されているデータベースを書き換えて、データベースの操作により生じたデータベースの変更を確定する（ステップＳ５７）。そして、結果送信部７５は、操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信して（ステップＳ５８）、本フローを終了する。
【００７１】
なお、ステップＳ５２からステップＳ５８までの何れかの処理が成功しなかった場合、結果送信部７５は、操作情報に応じた処理が失敗したことを表す結果をクライアント装置５０に送信して、本フローを終了する。この場合、操作部７２およびログ処理部７３は、実行した処理をロールバックして、データ保存部６１およびログ保存部６３を操作情報の受信前の状態に戻す。
【００７２】
図１０は、スレーブのサーバ装置３０の処理を示すフローチャートである。スレーブのサーバ装置３０は、マスターのサーバ装置３０からレプリケーションの実行要求を受信した場合、図１０に示す処理を実行する。
【００７３】
まず、第２レプリケーション部７６は、マスターのサーバ装置３０から識別子が付加されたログを受信する（ステップＳ６１）。続いて、第２レプリケーション部７６は、マスターのサーバ装置３０から受信したログを、識別子が付加された状態でログ保存部６３に記憶させる（ステップＳ６２）。続いて、第２レプリケーション部７６は、識別子記憶部６２に記憶されている識別子のリストから、フェイルオーバタイム前の時点より前の識別子を削除する（ステップＳ６３）。
【００７４】
続いて、第２レプリケーション部７６は、マスターのサーバ装置３０から受信したログに付加されていた識別子を、識別子記憶部６２に記憶させる（ステップＳ６４）。この場合において、第２レプリケーション部７６は、時刻情報を識別子に付加する。時刻情報は、例えば、識別子が付加されていた操作情報の受信時刻である。これにより、第２レプリケーション部７６は、フェイルオーバタイム前の時点より前に受信した識別子を、識別子記憶部６２から削除することができる。
【００７５】
続いて、第２レプリケーション部７６は、マスターのサーバ装置３０から受信したログに応じて、データ保存部６１に記憶されているデータベースを変更する（ステップＳ６５）。データベースの変更が成功した場合、第２レプリケーション部７６は、マスターのサーバ装置３０にレプリケーションが成功したことを表す結果を返信して（ステップＳ６６）、本フローを終了する。
【００７６】
図１１は、リカバリ時のサーバ装置３０の処理を示すフローチャートである。サーバ装置３０は、例えば、ネットワークのエラー等により再起動した場合、図１１に示すリカバリ処理を実行する。
【００７７】
まず、リカバリ部７７は、ログ保存部６３から、データベースの変更のログを読み出す（ステップＳ７１）。なお、リカバリ部７７は、データ保存部６１に記憶されたデータベースのイメージを定期的に取得して例えば不揮発性の記憶装置に記憶させている場合には、最新のデータベースのイメージも読み出す。この場合、リカバリ部７７は、最新のデータベースのイメージを取り込んだ時点から後のログを読み出せばよい。
【００７８】
続いて、リカバリ部７７は、読み出したログに基づき、データ保存部６１に記憶されたデータベースを障害発生時の状態に復元する（ステップＳ７２）。リカバリ部７７は、一例として、最新のデータベースのイメージをログに基づき順次に更新することにより、データベースを障害発生時の状態に復元する。
【００７９】
続いて、リカバリ部７７は、ログ保存部６３に記憶されたログの識別子に基づき、識別子記憶部６２に記憶された識別子のリストを復元する（ステップＳ７３）。そして、ステップＳ７３の処理が完了した場合、リカバリ部７７は、本フローを終了する。
【００８０】
図１２は、データベースの操作時の処理の流れを示す図である。データベースシステム１０は、データベースを操作する場合、図１２に示す流れで処理を進める。
【００８１】
まず、クライアント装置５０は、識別子（例えば＃１１）を付加した操作情報をマスターのサーバ装置３０に送信する（ステップＳ１１１）。続いて、マスターのサーバ装置３０の情報処理部６４は、受信した操作情報の識別子が、識別子記憶部６２に記憶されているか否かをチェックする（ステップＳ１１２）。操作情報の識別子が、識別子記憶部６２に記憶されていない場合、情報処理部６４は、受信した操作情報の識別子を識別子記憶部６２に記憶させる（ステップＳ１１３）。
【００８２】
続いて、マスターのサーバ装置３０の情報処理部６４は、操作情報に応じて、データ保存部６１に記憶されたデータベースを操作する（ステップＳ１１４）。続いて、マスターのサーバ装置３０の情報処理部６４は、データベースの変更のログを生成して、ログ保存部６３に記憶させる（ステップＳ１１５）。この場合、情報処理部６４は、ログに操作情報の識別子を付加する。
【００８３】
続いて、マスターのサーバ装置３０の情報処理部６４は、スレーブのサーバ装置３０の情報処理部６４に、識別子が付加されたログを送信する（ステップＳ１１６）。続いて、スレーブのサーバ装置３０の情報処理部６４は、受信したログを、識別子が付加された状態でログ保存部６３に記憶させる（ステップＳ１１７）。続いて、スレーブのサーバ装置３０の情報処理部６４は、受信したログに付加されていた識別子を、識別子記憶部６２に記憶させる（ステップＳ１１８）。続いて、スレーブのサーバ装置３０の情報処理部６４は、受信したログに応じて、データ保存部６１に記憶されているデータベースを変更する（ステップＳ１１９）。そして、スレーブのサーバ装置３０の情報処理部６４は、マスターのサーバ装置３０にレプリケーションが成功したことを表す処理結果を送信する（ステップＳ１２０）。
【００８４】
続いて、マスターのサーバ装置３０の情報処理部６４は、データ保存部６１内のデータベースに変更内容を書き込むことにより、データベースの操作により生じたデータベースの変更を確定する（ステップＳ１２１）。そして、マスターのサーバ装置３０の情報処理部６４は、操作情報に応じた処理が成功したこと表す結果をクライアント装置５０に送信する（ステップＳ１２２）。
【００８５】
図１３は、故障時の処理の流れを示す図である。データベースシステム１０は、マスターのサーバ装置３０が故障した場合、図１３に示す流れで処理を進める。
【００８６】
マスターのサーバ装置３０が故障した場合、調停装置４０は、何れか１つのスレーブのサーバ装置３０を、マスターに変更する（ステップＳ１３１）。続いて、クライアント装置５０は、識別子（例えば＃１２）を付加した操作情報を、元のマスターのサーバ装置３０に送信する（ステップＳ１３２）。しかし、元のマスターのサーバ装置３０は、故障しているので、処理結果を返信できない。
【００８７】
クライアント装置５０は、操作情報を送信してから所定時間が経過することによりタイムアウトすると、調停装置４０にマスターのサーバ装置３０を問い合わせる（ステップＳ１３３）。調停装置４０は、クライアント装置５０に対して、新たなマスターのサーバ装置３０を回答する（ステップＳ１３４）。
【００８８】
図１４は、未処理の操作情報を、スレーブからマスターに変更されたサーバ装置３０に再送信した場合の処理の流れを示す図である。クライアント装置５０が未処理の操作情報をスレーブからマスターに変更されたサーバ装置３０に再送信する場合、データベースシステム１０は、図１３の処理に続いて、図１４に示す流れで処理を進める。
【００８９】
まず、クライアント装置５０は、識別子（例えば＃１２）を付加した操作情報を、新たなマスターのサーバ装置３０に再送信する（ステップＳ１３５）。この場合において、クライアント装置５０は、元のマスターのサーバ装置３０へと送信した操作情報および識別子と同一の操作情報および識別子を再送信する。
【００９０】
続いて、新たなマスターのサーバ装置３０の情報処理部６４は、受信した操作情報の識別子が、識別子記憶部６２に記憶されているか否かをチェックする（ステップＳ１３６）。本例では、サーバ装置３０が未処理であるので、識別子記憶部６２は、操作情報の識別子（＃１２）を記憶していない。
【００９１】
続いて、新たなマスターのサーバ装置３０の情報処理部６４は、受信した操作情報の識別子を識別子記憶部６２に記憶させる（ステップＳ１３７）。続いて、新たなマスターのサーバ装置３０の情報処理部６４は、操作情報に応じて、データ保存部６１に記憶されたデータベースを操作する（ステップＳ１３８）。続いて、新たなマスターのサーバ装置３０の情報処理部６４は、データベースの変更のログを生成して、ログ保存部６３に記憶させる（ステップＳ１３９）。
【００９２】
続いて、新たなマスターのサーバ装置３０の情報処理部６４は、データベースの操作により生じたデータベースの変更を確定する（ステップＳ１４０）。そして、マスターのサーバ装置３０の情報処理部６４は、操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信する（ステップＳ１４１）。なお、スレーブのサーバ装置３０が設定されている場合には、マスターのサーバ装置３０およびスレーブのサーバ装置３０は、レプリケーションを実行する。
【００９３】
図１５は、処理済みの操作情報を、スレーブからマスターに変更されたサーバ装置３０に再送信した場合の処理の流れを示す図である。
【００９４】
レプリケーションが完了した場合、スレーブのサーバ装置３０のデータ保存部６１には、操作情報に応じた変更が完了した後のデータベースが記憶されている。また、スレーブのサーバ装置３０の識別子記憶部６２には、クライアント装置５０が送信した操作情報の識別子（例えば＃１２）が記憶されている。
【００９５】
しかし、レプリケーションが完了した後、クライアント装置５０に成功の返信をする前に、マスターのサーバ装置３０が故障したとする。この場合、クライアント装置５０は、新たなマスターのサーバ装置３０に、同一の識別子（例えば＃１２）を付加した同一の操作情報を再送信する（ステップＳ１５１）。
【００９６】
この場合、元はスレーブであった新たなマスターのサーバ装置３０の識別子記憶部６２には、操作情報の識別子（＃１２）が既に記憶されている（ステップＳ１５２）。従って、情報処理部６４は、データ保存部６１に記憶されているデータベースに対しては、何ら処理を実行しない。そして、新たなマスターのサーバ装置３０の情報処理部６４は、受信した操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信する（ステップＳ１５３）。
【００９７】
図１６は、マスターのサーバ装置３０が再起動して、再度マスターに設定された場合の処理の流れを示す図である。
【００９８】
ログの生成および記憶が完了した場合、マスターのサーバ装置３０のログ保存部６３には、操作情報に応じたデータベースの変更のログが記憶されている。しかし、ログの記憶が完了した後、クライアント装置５０に成功したことを表す結果を送信する前に、マスターのサーバ装置３０のネットワークが例えば一時的に切断されたとする。この場合、マスターのサーバ装置３０は、シャットダウンした後に再起動をする。
【００９９】
サーバ装置３０の情報処理部６４は、再起動をした場合、ログ保存部６３に記憶されているログを読み出して、データ保存部６１に記憶されているデータベースを再起動直前の状態に復元する（ステップＳ１６１）。さらに、サーバ装置３０の情報処理部６４は、再起動をした場合、ログ保存部６３に記憶されているログに付加されている識別子を読み出して、識別子記憶部６２に記憶されている識別子のリストを、再起動の直前の状態に復元する（ステップＳ１６２）。
【０１００】
また、調停装置４０は、マスターのサーバ装置３０が再起動した場合、再度、マスターおよびスレーブの設定を行う。この場合において、調停装置４０は、同一のサーバ装置３０をマスターとして設定してもよい。
【０１０１】
図１７は、処理済みの操作情報を、再起動後に再度マスターに設定されたサーバ装置３０に再送信した場合の処理の流れを示す図である。
【０１０２】
例えば、ある識別子（＃１４）の操作情報に応じたデータベースの変更のログの生成および記憶が完了した場合、マスターのサーバ装置３０のログ保存部６３には、そのログが記憶されている。また、マスターのサーバ装置３０の識別子記憶部６２には、クライアント装置５０が送信した操作情報の識別子（例えば＃１４）が記憶されている。
【０１０３】
しかし、ログの記憶が完了した後、成功したことを表す結果を送信する前に、マスターのサーバ装置３０がシャットダウンし、その後、再起動し、再度マスターに設定されたとする。この場合、クライアント装置５０は、マスターのサーバ装置３０に、同一の識別子（例えば＃１４）を付加した同一の操作情報を再送信する（ステップＳ１６３）。
【０１０４】
この場合、マスターのサーバ装置３０の識別子記憶部６２には、操作情報の識別子（＃１４）が復元により記憶されている（ステップＳ１６４）。従って、情報処理部６４は、データ保存部６１に記憶されているデータベースに対しては、何ら処理を実行しない。そして、マスターのサーバ装置３０の情報処理部６４は、受信した操作情報に応じた処理が成功したことを表す結果をクライアント装置５０に送信する（ステップＳ１６５）。
【０１０５】
以上のように、本実施形態に係るデータベースシステム１０によれば、操作情報に付加された識別子をデータベースの変更のログに付加して記憶させておくので、クライアント装置５０から同一の操作情報が再送信された場合に重複実行を無くすことができる。例えば、データベースシステム１０によれば、サーバ装置３０がスレーブからマスターに変更された場合、または、マスターのサーバ装置３０が再起動した後に再度マスターに設定された場合であっても、操作情報に付加された識別子をログから復元することができるので、クライアント装置５０から同一の操作情報が再送信された場合に重複実行を無くすことができる。
【０１０６】
図１８は、実施形態に係る情報処理装置２００のハードウェア構成を示す図である。サーバ装置３０、調停装置４０およびクライアント装置５０は、例えば図１８に示すようなハードウェア構成の情報処理装置２００により実現される。
【０１０７】
この情報処理装置２００は、ＣＰＵ（Central  Processing  Unit）２０１と、ＲＡＭ（Random  Access  Memory）２０２と、ＲＯＭ（Read  Only  Memory）２０３と、操作入力装置２０４と、表示装置２０５と、記憶装置２０６と、通信装置２０７とを備える。そして、これらの各部は、バスにより接続される。
【０１０８】
ＣＰＵ２０１は、プログラムに従って演算処理および制御処理等を実行するプロセッサである。ＣＰＵ２０１は、ＲＡＭ２０２の所定領域を作業領域として、ＲＯＭ２０３および記憶装置２０６等に記憶されたプログラムとの協働により各種処理を実行する。
【０１０９】
ＲＡＭ２０２は、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）等のメモリである。ＲＡＭ２０２は、ＣＰＵ２０１の作業領域として機能する。ＲＯＭ２０３は、プログラムおよび各種情報を書き換え不可能に記憶するメモリである。
【０１１０】
操作入力装置２０４は、マウスおよびキーボード等の入力デバイスである。操作入力装置２０４は、ユーザから操作入力された情報を指示信号として受け付け、指示信号をＣＰＵ２０１に出力する。
【０１１１】
表示装置２０５は、ＬＣＤ（Liquid  Crystal  Display）等の表示デバイスである。表示装置２０５は、ＣＰＵ２０１からの表示信号に基づいて、各種情報を表示する。
【０１１２】
記憶装置２０６は、フラッシュメモリ等の半導体による記憶媒体、または、磁気的若しくは光学的に記録可能な記憶媒体等にデータを書き込みおよび読み出しをする装置である。記憶装置２０６は、ＣＰＵ２０１からの制御に応じて、記憶媒体にデータの書き込みおよび読み出しをする。通信装置２０７は、ＣＰＵ２０１からの制御に応じて外部の機器とネットワークを介して通信する。
【０１１３】
サーバ装置３０で実行されるプログラムは、操作受信モジュール、操作モジュール、ログ処理モジュール、第１レプリケーションモジュール、結果送信モジュール、第２レプリケーションモジュールおよびリカバリモジュールを含むモジュール構成となっている。このプログラムは、ＣＰＵ２０１（プロセッサ）によりＲＡＭ２０２上に展開して実行されることにより、情報処理装置２００を、操作受信部７１、操作部７２、ログ処理部７３、第１レプリケーション部７４、結果送信部７５、第２レプリケーション部７６およびリカバリ部７７として機能させる。なお、サーバ装置３０は、このような構成に限らず、操作受信部７１、操作部７２、ログ処理部７３、第１レプリケーション部７４、結果送信部７５、第２レプリケーション部７６およびリカバリ部７７の少なくとも一部をハードウェア回路（例えば半導体集積回路）により実現した構成であってもよい。
【０１１４】
クライアント装置５０で実行されるプログラムは、操作情報生成モジュール、識別子生成モジュール、操作送信モジュールおよび結果受信モジュールを含むモジュール構成となっている。このプログラムは、ＣＰＵ２０１（プロセッサ）によりＲＡＭ２０２上に展開して実行されることにより、情報処理装置２００を操作情報生成部５１、識別子生成部５２、操作送信部５３および結果受信部５４として機能させる。なお、クライアント装置５０は、このような構成に限らず、操作情報生成部５１、識別子生成部５２、操作送信部５３および結果受信部５４の少なくとも一部をハードウェア回路（例えば半導体集積回路）により実現した構成であってもよい。
【０１１５】
また、サーバ装置３０またはクライアント装置５０で実行されるプログラムは、コンピュータにインストール可能な形式または実行可能な形式のファイルで、ＣＤ−ＲＯＭ、フレキシブルディスク、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１１６】
また、サーバ装置３０またはクライアント装置５０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、サーバ装置３０またはクライアント装置５０で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、サーバ装置３０またはクライアント装置５０で実行されるプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１１７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
2017042890.tif 000003
【図２】
2017042890.tif 000004
【図３】
2017042890.tif 000005
【図４】
2017042890.tif 000006
【図５】
2017042890.tif 000007
【図６】
2017042890.tif 000008
【図７】
2017042890.tif 000009
【図８】
2017042890.tif 000010
【図９】
2017042890.tif 000011
【図１０】
2017042890.tif 000012
【図１１】
2017042890.tif 000013
【図１２】
2017042890.tif 000014
【図１３】
2017042890.tif 000015
【図１４】
2017042890.tif 000016
【図１５】
2017042890.tif 000017
【図１６】
2017042890.tif 000018
【図１７】
2017042890.tif 000019
【図１８】
2017042890.tif 000020
【国際調査報告】
2017042890.tif 000021
2017042890.tif 000022
2017042890.tif 000023
2017042890.tif 000024