(57)【要約】【課題】実行系計算機で更新されたデータを待機系計算機に反映させるための時間の増大を抑制し、待機系計算機でデータを回復させるための時間の増大を抑制する。【解決手段】データを格納し、当該データの処理要求を受け付ける実行系計算機と、実行系計算機に替わってデータを処理可能な待機系計算機とを含む計算機システムで、実行系計算機は、データの更新要求を受け付けた場合には、データの更新内容を含む更新後ログを生成し、所定のタイミングで待機系計算機に送信し、待機系計算機は、実行系計算機から送信された更新後ログ及び格納しているデータに基づいて、更新前のデータを含む更新前ログを生成し、更新前ログの生成後、更新後ログに基づいて格納されたデータを更新し、更新されたデータの回復要求を受け付けた場合には、生成された更新前ログに基づいてデータを更新前の状態に回復させる。【選択図】図２
2010257284.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機を含む計算機システムにおけるデータ処理方法であって、
前記複数の計算機には、データを格納し、当該データの処理要求を受け付ける第１計算機と、前記第１計算機に格納されたデータに対応するデータを格納する第２計算機とが含まれ、
前記第１計算機は、前記第２計算機に接続する第１インタフェースと、前記第１インタフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１記憶部と、を備え、
前記第２計算機は、前記第１計算機に接続する第２インタフェースと、前記第２インタフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２記憶部と、を備え、
前記方法は、
前記第１計算機が、前記第１記憶部に格納されたデータを、前記第２記憶部に格納されたデータと同期させ、
前記第１計算機が、前記データの更新要求を受け付けた場合には、更新後のデータを含む更新後ログを生成し、
前記第１計算機が、前記生成された更新後ログを所定のタイミングで前記第２計算機に送信し、
前記第２計算機が、前記第１計算機によって送信された更新後ログ、及び前記第２記憶部に格納されたデータに基づいて、更新前のデータを含む更新前ログを生成し、
前記第２計算機が、前記更新前ログの生成後、前記第１計算機によって送信された更新後ログに基づいて、前記第２記憶部に格納されたデータを更新し、
前記第１計算機が、更新されたデータの回復要求を受け付けた場合には、前記第２計算機に前記回復要求を送信し、
前記第２計算機が、前記更新前ログに基づいて、前記第２記憶部に格納されたデータを更新前の状態に回復させることを特徴とするデータ処理方法。
【請求項２】
前記第１計算機及び前記第２計算機には、前記データを管理するデータベースが稼動しており、
前記第２計算機は、前記第１計算機に替わって前記データの処理要求を受け付け可能であり、
前記第１計算機に受け付けられたデータ更新要求は、少なくとも一以上の更新操作を含むトランザクションであって、
前記方法は、
前記第１計算機が、前記トランザクションの決着要求を受け付けた場合には、前記生成された更新後ログに基づいて、前記第１記憶部に格納されたデータを更新し、
前記第１計算機が、前記第２計算機に前記決着要求を送信し、
前記第２計算機が、前記更新前ログを削除し、
前記第１計算機が、前記トランザクションの回復要求を受け付けた場合には、前記生成された更新後ログを削除し、
前記第１計算機が、前記第２計算機に前記回復要求を送信し、
前記第２計算機が、前記更新前ログに基づいて、前記第２記憶部に格納されたデータを回復させることを特徴とする請求項１に記載のデータ処理方法。
【請求項３】
前記所定のタイミングは、前記生成された更新後ログの容量が所定の容量を超えたタイミングであることを特徴とする請求項１に記載のデータ処理方法。
【請求項４】
前記所定のタイミングは、所定の時間間隔で周期的に発生するタイミングであることを特徴とする請求項１に記載のデータ処理方法。
【請求項５】
前記更新後ログは、さらに、前記更新後のデータが格納された位置情報とを含み、
前記方法は、
前記第２計算機が、前記第１計算機から前記更新後ログを受信した場合には、前記更新後ログに含まれる更新後のデータの位置情報を取得し、
前記第２計算機が、前記取得された位置情報に基づいて、前記第２記憶部から更新前のデータを取得し、
前記第２計算機が、前記更新前ログとして、前記更新前のデータと、前記取得された位置情報とを前記第２記憶部に記録することを特徴とする請求項１に記載のデータ処理方法。
【請求項６】
前記方法は、
前記第２計算機が、前記取得した更新後のデータの位置情報が前記更新前ログに含まれているか否かを判定し、
前記取得した更新後のデータの位置情報が前記更新前ログに含まれていない場合に、前記第２計算機が、当該位置情報に対応する更新前ログを生成することを特徴とする請求項５に記載のデータ処理方法。
【請求項７】
前記方法は、
前記第２計算機が、前記第１計算機が前記データの更新要求を受け付けた順に、前記更新前ログを生成し、
前記回復要求を受け付けた場合には、前記第２計算機が、前記更新前ログが生成された順序とは逆の順序で前記更新前ログを前記第２記憶部に格納されたデータに反映させることによって、前記第２記憶部に格納されたデータを回復させることを特徴とする請求項５に記載のデータ処理方法。
【請求項８】
前記方法は、
前記回復要求を受け付けた場合には、前記第１計算機が、前記第２計算機によって生成された更新前ログを、前記第２計算機から取得し、
前記第１計算機が、前記取得した更新前ログに基づいて、前記第１記憶部に格納されたデータを回復させることを特徴とする請求項１に記載のデータ処理方法。
【請求項９】
前記複数の計算機には、複数の前記第１計算機が含まれ、
前記方法は、
前記第１計算機が、前記生成された更新後ログを所定のタイミングで他の第１計算機に送信し、
前記第１計算機が、前記他の第１計算機によって送信された更新後ログ、及び前記第１計算機の第１記憶部に格納されたデータに基づいて、更新前のデータを含む更新前ログを生成し、
前記第１計算機が、前記更新前ログの生成後、前記他の第１計算機によって送信された更新後ログに基づいて、前記第２記憶部に格納されたデータを更新し、
前記第１計算機が、前記更新されたデータの回復要求を前記他の第１計算機から受信した場合には、前記更新前ログに基づいて、前記第１計算機の第１記憶部に格納されたデータを、前記他の第１計算機による更新の前の状態に回復させることを特徴とする請求項１に記載のデータ処理方法。
【請求項１０】
前記方法は、前記第１計算機が前記回復要求を受け付けた場合には、前記第２記憶部に格納されたデータの回復が完了した後に、前記第２計算機が、前記第１計算機の替わりに管理するデータの処理要求を受け付けることを特徴とする請求項１に記載のデータ処理方法。
【請求項１１】
データを格納し、当該データを他の計算機に格納されたデータと同期させる計算機であって、
前記他の計算機に接続するインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続され、前記データを格納する記憶部と、を備え、
前記プロセッサは、
前記記憶部に格納されたデータを前記他の計算機に格納されたデータと同期させ、
前記記憶部に格納されたデータの更新要求を受け付けた場合に、更新後のデータを含む更新後ログを生成し、
前記生成された更新後ログを所定のタイミングで前記他の計算機に送信し、
前記更新後ログを受信した場合には、前記受信した更新後ログ及び前記記憶部に格納されたデータに基づいて、更新前のデータを含む更新前ログを生成し、
前記更新前ログの生成後、前記受信した更新後ログに基づいて、前記記憶部に格納されたデータを更新し、
更新されたデータの回復要求を受け付けた場合には、前記更新前ログに基づいて、前記記憶部に格納されたデータを更新前の状態に回復させることを特徴とする計算機。
【請求項１２】
記憶部に格納されたデータを他の計算機に格納されたデータと同期させる計算機で実行されるデータ処理プログラムであって、
前記格納されたデータを前記他の計算機に格納されたデータと同期させる手順と、
前記格納されたデータの更新要求を受け付けた場合に、更新後のデータを含む更新後ログを生成する手順と、
前記生成された更新後ログを所定のタイミングで前記他の計算機に送信する手順と、
前記更新後ログを受信した場合には、前記受信した更新後ログ及び前記記憶部に格納されたデータに基づいて、更新前のデータを含む更新前ログを生成する手順と、
前記更新前ログの生成後、前記受信した更新後ログに基づいて、前記記憶部に格納されたデータを更新する手順と、
更新されたデータの回復要求を受け付けた場合には、前記更新前ログに基づいて、前記記憶部に格納されたデータを更新前の状態に回復させる手順と、を含むことを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算機を含む計算機システムに関し、特に、計算機システムの可用性を向上させる技術に関する。
【背景技術】
【０００２】
情報化社会の発展に伴い、システム障害などによるサービスの停止によって大きな損害が発生するおそれがあるため、システムに大きな信頼性が要求されている。そこで、サービスを提供する第１計算機（実行系の計算機）に加えて、第１計算機に何らかの障害が発生した場合に処理を代行する第２計算機（待機系の計算機）を待機させてシステムを冗長化することによって、システム全体の信頼性を高めたり、第１計算機に格納されたデータと第２計算機に格納されたデータとを定期的に同期させることによって可用性を高めたりする技術が提案されている。例えば、ホットスタンバイ、ディザスタリカバリなどがこれに該当する。
【０００３】
また、冗長化されたシステム全体を効率よく利用するために、第２計算機を単なる予備系として待機させているだけでなく、別の用途で利用することも一般的となっている。
【０００４】
このように冗長化されたシステムでは、第１計算機に障害が発生した場合に第２計算機を第１計算機として代替させるまでの時間を短縮するため、あるいは、第２計算機におけるデータ処理の関係で、第１計算機における更新結果をできるだけ早く、かつ、トランザクションの整合性が保たれた状態で第２計算機に反映することが求められる。
【０００５】
第１計算機に格納されたデータと第２計算機に格納されたデータとを同期させる技術として、トランザクションに多くの更新要求が含まれる場合には、第２計算機に送信する更新後ログをトランザクションごとではなく、トランザクションの途中で送信する技術が開示されている（特許文献１参照）。
【０００６】
特許文献１に開示された技術によれば、トランザクション決着時のデータ送信量を抑制し、第２計算機でデータを同期させるため必要な更新時間を抑制することができる。
【０００７】
また、第１計算機の更新後ログをトランザクションとは無関係に第２計算機に送信し、トランザクションとは無関係に第２計算機に格納されたデータを更新する技術が開示されている（特許文献２参照）。
【０００８】
特許文献２に開示された技術によれば、第２計算機は第１計算機から送信された更新後ログを第２計算機に反映する機能のみ有しており、第１計算機がトランザクションの決着及び回復を制御する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−１３３５９８号公報
【特許文献２】特開２０００−２５９５０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１に開示された技術では、第２計算機においてトランザクション単位に更新後ログを再構築してから反映するため、トランザクションによるデータの更新量が多い場合には、第１計算機のトランザクションが終了した後、第２計算機の更新が終了するまで多くの時間を必要とする。
【００１１】
また、特許文献２に開示された技術は、第１計算機が回復用の更新前ログを送信するため、更新量が多いトランザクションを回復する場合に多くの時間が必要となる。
【００１２】
このように、可用性を高める技術では、トランザクションによるデータの更新量が多い場合、トランザクション決着時又は回復時に、第２計算機でデータ同期させるために多くの時間が必要となる。
【００１３】
この結果、例えば第１計算機に障害が発生し、第２計算機が処理を引き継ぐ場合に、第２計算機のデータを第１計算機が完了したところまで更新する時間、または第２計算機のデータをトランザクション実行前の状態に回復するために時間がかかり、高い可用性を保てない。
【００１４】
本発明は、第２計算機において、データの更新量が多いトランザクションを決着させるために必要な時間の増大を抑えつつ、トランザクションが取り消された場合にデータを回復させるために必要な時間の増大を抑える技術の両立を提案することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の代表的な一形態では、複数の計算機を含む計算機システムにおけるデータ処理方法であって、前記複数の計算機には、データを格納し、当該データの処理要求を受け付ける第１計算機と、前記第１計算機に格納されたデータに対応するデータを格納する第２計算機とが含まれ、前記第１計算機は、前記第２計算機に接続する第１インタフェースと、前記第１インタフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１記憶部と、を備え、前記第２計算機は、前記第１計算機に接続する第２インタフェースと、前記第２インタフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２記憶部と、を備え、前記方法は、前記第２計算機が、前記第１記憶部に格納されたデータと、前記第２記憶部に格納されたデータとを同期させ、前記第１計算機が、前記データの更新要求を受け付けた場合には、更新後のデータを含む更新後ログを生成し、前記第１計算機が、前記生成された更新後ログを所定のタイミングで前記第２計算機に送信し、前記第２計算機が、前記第１計算機によって送信された更新後ログ、及び前記第２記憶部に格納されたデータに基づいて、更新前のデータを含む更新前ログを生成し、前記第２計算機が、前記更新前ログの生成後、前記第１計算機によって送信された更新後ログに基づいて、前記第２記憶部に格納されたデータを更新し、前記第１計算機が、更新されたデータの回復要求を受け付けた場合には、前記第２計算機に前記回復要求を送信し、前記第２計算機が、前記更新前ログに基づいて、前記第２記憶部に格納されたデータを更新前の状態に回復させる。
【発明の効果】
【００１６】
本発明の一形態によれば、特に、データの更新量が多い場合に、第１計算機（実行系の計算機）で決着したデータ更新要求を第２計算機（待機系の計算機）に反映させるために必要な時間を抑えることができる。これにより、たとえば第１計算機に障害が発生した場合、第２計算機が処理を引き継ぐまでの時間を抑えることができる。さらに、データの更新が取り消された場合に、第２計算機でデータを回復させるために必要な時間を抑えることができる。これにより、たとえば第１計算機に障害が発生した場合、第２計算機のデータ更新を取り消してから処理をやり直すときの時間を抑えることができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態のデータベースシステムの構成の一例を示すブロック図である。
【図２】本発明の実施の形態の第１計算機及び第２計算機の主記憶装置に記憶された情報の構成を示す図である。
【図３】本発明の実施の形態の実行系である第１計算機の更新後ログの一例を示す図である。
【図４】本発明の実施の形態の待機系である第２計算機の更新後ログの一例を示す図である。
【図５Ａ】本発明の実施の形態の待機系の第２計算機の更新前ログの一例を示す図である。
【図５Ｂ】本発明の実施の形態の待機系の第２計算機の更新前ログの別の例を示す図である。
【図６】本発明の実施の形態の更新トランザクションを実行する際の第１計算機及び第２計算機の処理の概要を説明する図である。
【図７】本発明の実施の形態の更新トランザクションを実行する際の第１計算機及び第２計算機において各処理を実行するタイミングを説明する図である。
【図８】本発明の実施の形態の更新トランザクションを決着させる際の第１計算機及び第２計算機の処理の概要を説明する図である。
【図９】本発明の実施の形態の更新トランザクションを決着させる際の第１計算機及び第２計算機において各処理を実行するタイミングを説明する図である。
【図１０】本発明の実施の形態の更新トランザクションを取り消してＤＢデータを回復させる際の第１計算機及び第２計算機の処理の概要を説明する図である。
【図１１】本発明の実施の形態の更新トランザクションを取り消してＤＢデータを回復させる際の第１計算機及び第２計算機において各処理を実行するタイミングを説明する図である。
【図１２】本発明の実施の形態のデータベースシステムの起動から終了までの手順を示すフローチャートである。
【図１３】本発明の実施の形態の待機系の第２計算機で実行されるＤＢデータ更新処理の手順を示すフローチャートである。
【図１４】本発明の実施の形態の待機系の第２計算機における同期点処理の手順を示すフローチャートである。
【図１５Ａ】本発明の実施の形態の待機系の第２計算機における更新トランザクション決着時の処理の手順を示すフローチャートである。
【図１５Ｂ】本発明の実施の形態の待機系の第２計算機における更新トランザクション回復時の処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明が適用されるデータベースシステムの一実施形態について、図面を参照しながら説明する。
【００１９】
図１は、本発明の実施の形態のデータベースシステムの構成の一例を示すブロック図である。
【００２０】
本発明のデータベースシステムには、入力装置１、第１計算機３Ａ及び第２計算機３Ｂが含まれる。入力装置１、第１計算機３Ａ及び第２計算機３Ｂは、ネットワーク２を介して互いに接続されている。
【００２１】
入力装置１は、データベース操作要求の入力を受け付け、第１計算機３Ａに送信する。第１計算機３Ａは、要求された処理を実行する実行系の計算機である。第２計算機３Ｂは、第１計算機３Ａに障害が発生した場合に、処理を代行する待機系の計算機である。
【００２２】
なお、データベースシステムには、複数の第１計算機３Ａが含まれていてもよい。例えば、入力装置１ごとに接続される第１計算機３Ａが設定され、第１計算機３Ａのいずれかに障害が発生した場合には、第２計算機３Ｂの代わりに正常に稼動している他の第１計算機３Ａが要求された処理を実行するようにしてもよい。
【００２３】
第１計算機３Ａは、ＣＰＵ（中央演算装置、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４Ａ、主記憶装置５Ａ及びインタフェース６Ａを含む。
【００２４】
ＣＰＵ４Ａは、主記憶装置５Ａに記憶されたプログラムを実行することによって、要求された処理を実行する。
【００２５】
主記憶装置５Ａは、ＣＰＵ４Ａによって実行されるプログラム及び当該プログラムによって処理されるデータが格納される。具体的には、主記憶装置５Ａにデータベース管理システムが記憶されている。また、本発明の実施の形態のデータベースシステムは、管理対象のデータがすべて主記憶装置５Ａに記憶される。
【００２６】
インタフェース６Ａは、ネットワーク２に接続される。第１計算機３Ａは、インタフェース６Ａを介して、入力装置１から送信されたデータベース操作要求を受信したり、第２計算機３Ｂにデータの更新情報などを送信したりする。
【００２７】
第１計算機３Ａは、入力装置１から送信されたデータベース操作要求を受け付け、主記憶装置５Ａに記憶されたデータに対して要求された操作を実行する。また、第１計算機３Ａは、待機系の計算機としても機能することができる。
【００２８】
第２計算機３Ｂは、前述のように、第１計算機３Ａの待機系として動作する。すなわち、第１計算機３Ａが実行系として動作している間は待機し、第１計算機３Ａに障害が発生すると、第１計算機３Ａの処理を代行し、その後、実行系として動作することができる。したがって、第２計算機３Ｂは、第１計算機３Ａの構成と同様に、ＣＰＵ４Ｂ、主記憶装置５Ｂ及びインタフェース６Ｂを含む。また、各構成の機能については、第１計算機３Ａと同様である。
【００２９】
図２は、本発明の実施の形態の第１計算機３Ａ及び第２計算機３Ｂの主記憶装置に記憶された情報の構成を示す図である。
【００３０】
第１計算機３Ａの主記憶装置５Ａには、更新ログ送信契機管理部１０Ａ、ＤＢ管理部２０Ａ、更新ログ管理部３０Ａ、及び送受信部４０Ａが記憶される。更新ログ送信契機管理部１０Ａ、ＤＢ管理部２０Ａ、更新ログ管理部３０Ａ、及び送受信部４０Ａは、ＣＰＵ４Ａによって実行されるプログラムである。
【００３１】
第１計算機３Ａの主記憶装置５Ａには、さらに、更新ログ送信契機５０Ａ、ＤＢデータ６０Ａ、及び更新ログ７０Ａが記憶される。
【００３２】
更新ログ送信契機管理部１０Ａは、更新ログを第２計算機３Ｂに送信する契機を管理する。ＤＢ管理部２０Ａは、入力装置１から送信されたデータベース操作要求を、送受信部４０Ａを介して受信し、要求された処理を実行する。
【００３３】
更新ログ管理部３０Ａは、ＤＢ管理部２０Ａが要求された処理を実行した際に、ＤＢデータ６０Ａが更新された場合には更新ログを作成し、作成された更新ログを更新ログ７０Ａに格納する。
【００３４】
送受信部４０Ａは、入力装置１から送信されたデータベース操作要求を受信する。また、第２計算機３Ｂに更新後のデータなどを送信する。
【００３５】
更新ログ送信契機５０Ａは、更新ログを第２計算機３Ｂに送信する契機を示す情報である。ＤＢデータ６０Ａは、本発明の実施の形態のデータベースシステムによって管理されるデータである。更新ログ７０Ａは、ＤＢデータ６０Ａに対する更新ログが格納される。更新ログ７０Ａには、更新後ログ７１Ａ及び更新前ログ７２Ａが含まれる。
【００３６】
第２計算機３Ｂの主記憶装置５Ｂには、更新ログ送信契機管理部１０Ｂ、ＤＢ管理部２０Ｂ、更新ログ管理部３０Ｂ、及び送受信部４０Ｂが記憶される。更新ログ送信契機管理部１０Ｂ、ＤＢ管理部２０Ｂ、更新ログ管理部３０Ｂ、及び送受信部４０Ｂは、ＣＰＵ４Ｂによって実行されるプログラムである。
【００３７】
第２計算機３Ｂの主記憶装置５Ｂには、第１計算機３Ａの主記憶装置５Ａと同様に、更新ログ送信契機５０Ｂ、ＤＢデータ６０Ｂ、及び更新ログ７０Ｂが記憶される。
【００３８】
更新ログ送信契機管理部１０Ｂは、送受信部４０Ｂを介して第１計算機３Ａから通知された更新ログ送信契機を受信し、更新ログ送信契機５０Ｂに記憶する。
【００３９】
ＤＢ管理部２０Ｂは、実行系として第２計算機３Ｂが機能する場合に、ＤＢ管理部２０Ａと同様の処理を実行する。
【００４０】
更新ログ管理部３０Ｂは、第１計算機３Ａから送信された更新ログを処理する。更新ログ管理部３０Ｂは、更新前ログ生成部３１Ｂ、更新後ログ反映部３２Ｂ及び更新前ログ反映部３３Ｂを含む。
【００４１】
更新前ログ生成部３１Ｂは、ＤＢデータ６０Ｂ及び第１計算機３Ａから送信された更新後ログに基づいて、更新前ログを生成し、更新ログ７０Ｂの更新前ログ７２Ｂに記憶する。
【００４２】
更新後ログ反映部３２Ｂは、第１計算機３Ａから送信された更新後ログをＤＢデータ６０Ｂに適用することによって、ＤＢデータ６０ＡとＤＢデータ６０Ｂとを同期させる。
【００４３】
更新前ログ反映部３３Ｂは、更新前ログ７２ＢをＤＢデータ６０Ｂに適用することによって、更新されたデータを更新前の状態に戻す。
【００４４】
送受信部４０Ｂは、第１計算機３Ａから送信された更新後ログを受信し、更新ログ管理部３０Ｂに引き渡す。
【００４５】
更新ログ送信契機５０Ｂ、ＤＢデータ６０Ｂ、及び更新ログ７０Ｂは、第１計算機３Ａの主記憶装置５Ａに記憶された更新ログ送信契機５０Ａ、ＤＢデータ６０Ａ、及び更新ログ７０Ａと同様である。
【００４６】
更新ログ７０Ｂには、更新後ログ７１Ｂ及び更新前ログ７２Ｂが含まれる。更新後ログ７１Ｂ及び更新前ログ７２Ｂに格納される情報について説明すると、本発明の実施の形態では、第１計算機３Ａは、データの更新要求を受け付けた場合には、トランザクションの決着要求（コミット要求）を受け付けるまではＤＢデータ６０Ａを更新せずに、更新後ログ７１Ａに更新内容を格納する。そして、所定のタイミングで、更新後ログ７１Ａを第２計算機３Ｂに送信する。
【００４７】
第２計算機３Ｂは、更新後ログ７１Ａを受信すると、更新ログ管理部３０Ｂの更新後ログ反映部３２Ｂによって、受信した更新後ログ７１Ａを更新後ログ７１Ｂに反映させる。さらに、第１計算機３Ａから送信された更新後ログ７１Ａ及びＤＢデータ６０Ｂに基づいて、更新前ログ生成部３１Ｂによって更新前ログ７２Ｂを生成する。
【００４８】
なお、第１計算機３Ａを実行系、第２計算機３Ｂを待機系としてそれぞれの構成について説明したが、前述のように、第１計算機３Ａ及び第２計算機３Ｂは実行系としても待機系としても機能することが可能である。
【００４９】
以下、図３〜図１５を参照しながら、図２に示した各構成の詳細について説明する。
【００５０】
図３は、本発明の実施の形態の実行系である第１計算機３Ａの更新後ログ７１Ａの一例を示す図である。
【００５１】
更新後ログ７１Ａは、位置情報７１６、更新内容７１７及び送信情報７１８を含む。また、図３に示す例では、更新後ログ７１Ａには、レコード７１１Ａ、７１２Ａ、７１３Ａ、７１４Ａ及び７１５Ａの５つが含まれているが、レコード数に制限は無い。
【００５２】
位置情報７１６は、ＤＢデータ６０Ａの更新データが格納された物理的又は論理的な位置を一意に示す値である。例えば、更新データを格納する行のアドレス、行を一意に特定可能な通し番号、ページ番号などが該当する。Ｌ１、Ｌ２、Ｌ３、Ｌ４及びＬ５は、それぞれ、ＤＢデータ６０Ａの更新データが格納された位置を示す値である。
【００５３】
更新内容７１７は、更新後のデータ内容、操作内容を記録したものである。ＡＦＴＥＲ１、ＡＦＴＥＲ２、ＡＦＴＥＲ３、ＡＦＴＥＲ４及びＡＦＴＥＲ５は、それぞれＤＢデータ６０Ａの位置Ｌ１、Ｌ２、Ｌ３、Ｌ４及びＬ５に格納されたデータの更新後の値である。
【００５４】
送信情報７１８は、第２計算機３Ｂへの送信状況を管理する情報である。Ｔ１、Ｔ２、Ｔ３、Ｔ４及びＴ５は、それぞれ、レコード７１１Ａ、７１２Ａ、７１３Ａ、７１４Ａ及び７１５Ａが第２計算機３Ｂに送信済みであるか未送信であるかを示す値である。例えば、Ｔ１〜Ｔ５の値に“０”又は“１”が設定され、“０”の場合は「未送信」、“１”の場合は「送信済み」とする。また、「送信準備完了」といった他の状態を示す値を設定するようにしてもよい。
【００５５】
図４は、本発明の実施の形態の待機系である第２計算機３Ｂの更新後ログ７１Ｂの一例を示す図である。
【００５６】
更新後ログ７１Ｂは、図３に示した更新後ログ７１Ａと同様に、位置情報７１６、更新内容７１７及び送信情報７１８を含む。また、図４に示す例では、更新後ログ７１Ｂには、レコード７１１Ｂ、７１２Ｂ、７１３Ｂ、７１４Ｂ及び７１５Ｂの５つが含まれている。
【００５７】
なお、待機系の第２計算機３Ｂから他の計算機に更新後ログを転送するように実装されていない場合には、送信情報７１８に値を設定しなくてもよい。
【００５８】
図５Ａ及び図５Ｂは、本発明の実施の形態の待機系の第２計算機の更新前ログ７２Ｂの一例を示す図である。
【００５９】
更新前ログ７２Ｂは、前述のように、実行系の第１計算機３Ａから待機系の第２計算機３Ｂに送信された更新後ログ、及びＤＢデータ６０Ｂに基づいて、待機系の第２計算機３Ｂの更新前ログ生成部３１Ｂによって生成される。更新前ログ７２Ｂを利用して、トランザクションが取り消される場合に更新前のデータを回復させる。
【００６０】
図５Ａは、同じ位置情報を有するデータが二回以上更新された場合に、最も古い情報のみを記録する。図５Ａに示す更新前ログ７２Ｂには、位置情報７２６及び更新前内容７２７が含まれる。
【００６１】
位置情報７２６は、更新されたデータの位置情報が記録され、図３の位置情報と同様である。更新前内容７２７には、位置情報７２６に対応するデータの更新前の内容、操作内容が記憶されている。図５Ａに示した更新前ログ７２Ｂには、レコード７２１Ｂ、７２２Ｂ、７２３Ｂ、７２４Ｂ及び７２５Ｂの５つのレコードを含んでいるが、レコード数に制限は無い。ＢＥＦＯＲＥ１、ＢＥＦＯＲＥ２、ＢＥＦＯＲＥ３、ＢＥＦＯＲＥ４及びＢＥＦＯＲＥ５は、それぞれＤＢデータ６０Ｂの位置Ｌ１、Ｌ２、Ｌ３、Ｌ４及びＬ５に対応するデータの更新前の値である。
【００６２】
一般的に、トランザクションが確定されるまでの間に複数回同じレコードが更新されても、当該トランザクションによる更新を取り消して更新前データに回復するには、トランザクション開始直前のデータに回復させる。したがって、最初にデータが更新された場合に取得された更新前データを保持しておけばよい。具体的には、更新前ログ生成部３１Ｂによって、データ更新時に更新対象のデータの位置情報と一致するレコードが更新前ログ７２Ｂに存在するか否かを判定し、存在しない場合にのみ更新前ログ７２Ｂにレコードを追加する。
【００６３】
図５Ｂは、図５Ａに示した更新前ログ７２Ｂとは別の例を示している。図５Ｂに示す更新前ログ７２Ｂでは、図５Ａに示した更新前ログ７２Ｂの構成に加え、蓄積順序７２８が含まれており、同じ位置のレコードを２回以上更新する場合には出現した順に記録する。更新前のデータに回復させる場合には、最も古いデータを適用するようにしてもよいし、蓄積順序が新しい順にすべての更新前内容を適用してもよい。
【００６４】
また、更新前ログ７２Ｂに含まれている蓄積順序７２８は、順序が特定できれば、省略してもよい。
【００６５】
図５Ａに示す更新前ログ７２Ｂでは、図５Ｂに示す更新前ログ７２Ｂを利用した場合と比較して、更新前ログ７２Ｂの容量を少なくすることができる。また、適用する更新前ログを最小限に抑えることができる。一方、図５Ｂに示す更新前ログ７２Ｂでは、以前にデータが更新されたか否かを判定する必要がないという利点がある。本発明の実施の形態では、図５Ａに示した形式の更新前ログ７２Ｂを採用する。
【００６６】
図６は、本発明の実施の形態の更新トランザクションを実行する際の第１計算機３Ａ及び第２計算機３Ｂの処理の概要を説明する図である。
【００６７】
トランザクション１１１には、更新操作１２１、１２２、１２３、１２４及び１２５が含まれている。更新操作には、状態、更新前のデータ及び更新後のデータが含まれる。「状態」は、更新操作が「実行済み」、「実行中」又は「未実行」のいずれかを示す値が設定される。「更新前」は、更新操作によるＤＢデータ６０Ａの更新前の値を表している。「更新後」は、更新操作によるＤＢデータ６０Ａの更新後の値を表している。
【００６８】
トランザクション１１１に示す状態は、更新操作１２１、１２２、１２３及び１２４までが入力済みであって、更新操作１２４が実行されている途中となっている。
【００６９】
また、更新操作１２１及び１２２について、対応する更新後ログのレコード７１１Ａ及び７１２Ａが、第２計算機３Ｂに既に送信済みとなっている。さらに、第２計算機３Ｂは、受信した更新後のデータの値をＤＢデータ６０Ｂに反映させ、更新操作１２１及び１２２に対応する更新前ログ（レコード７２１Ｂ及び７２２Ｂ）を生成し、更新前ログ７２Ｂに格納している。
【００７０】
第１計算機３Ａでは、更新操作１２３及び１２４によって、更新後ログのレコード７１３Ａ及び７１４Ａが更新後ログ７１Ａに蓄積されている。そして、第１計算機３Ａは、更新ログ管理部３０Ａによって、更新ログ送信契機５０Ａを参照し、更新後ログ７１Ａの送信契機を検知する。送信契機を検知すると、更新ログ管理部３０Ａによって、更新後ログ７１Ａの各レコードの送信情報の値を参照し、レコード７１３Ａ及び７１４Ａが未送信であることを判定し、送受信部４０Ａに通知する。
【００７１】
第１計算機３Ａは、送受信部４０Ａを介して、未送信の更新後ログ７１Ａのレコード７１３Ａ及び７１４Ａを第２計算機３Ｂに送信する。その後、送信された各レコードの送信情報の値を「転送済み」に設定する。
【００７２】
第２計算機３Ｂは、送受信部４０Ｂを介して、第１計算機３Ａの更新後ログ７１Ａのレコード７１３Ａ及び７１４Ａを受信し、更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂとして格納する。
【００７３】
第２計算機３Ｂは、更新ログ管理部３０Ｂの更新前ログ生成部３１Ｂによって、更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂの位置情報を参照し、ＤＢデータ６０ＢのＬ３及びＬ４の位置から、更新前の値ＢＥＦＯＲＥ３及びＢＥＦＯＲＥ４を取得する。そして、更新前ログ７２Ｂのレコード７２３Ｂ及び７２４Ｂを生成し、蓄積する。
【００７４】
また、第２計算機３Ｂの更新ログ管理部３０Ｂの更新後ログ反映部３２Ｂは、更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂの更新内容を、ＤＢデータ６０ＢのＬ３及びＬ４の位置に反映する。その後、更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂを破棄する。
【００７５】
図７は、本発明の実施の形態の更新トランザクションを実行する際の第１計算機３Ａ及び第２計算機３Ｂにおいて各処理を実行するタイミングを説明する図である。
【００７６】
図７に示す各処理は、図６にて説明した各処理に対応する。処理Ｐ１及びＰ３は第１計算機３Ａによって実行される処理であり、処理Ｐ２及びＰ４は第２計算機３Ｂによって実行される処理である。
【００７７】
処理Ｐ１において、第１計算機３Ａは、更新後ログ７１Ａのレコード７１１Ａ及び７１２Ａを生成し、第２計算機３Ｂに送信する。その後、処理Ｐ３を実行する。
【００７８】
第２計算機３Ｂは、第１計算機３Ａから、更新後ログ７１Ａのレコード７１１Ａ及び７１２Ａを受信すると、処理Ｐ２において、更新後ログ７１Ａのレコード７１１Ａ及び７１２Ａを、第２計算機３Ｂの更新後ログ７１Ｂのレコード７１１Ｂ及び７１２Ｂとして格納する。さらに、更新前ログ７２Ｂのレコード７２１Ｂ及び７２２Ｂを生成し、その後、ＤＢデータ６０Ｂに更新後ログ７１Ｂのレコード７１１Ｂ及び７１２Ｂを反映する。処理Ｐ２は、第１計算機３Ａにおける処理Ｐ３と並列して実行される。
【００７９】
処理Ｐ３において、第１計算機３Ａは、更新後ログ７１Ａのレコード７１３Ａ及び７１４Ａを生成し、第２計算機３Ｂに送信する。その後、処理を続行する。
【００８０】
第２計算機３Ｂは、更新後ログ７１Ａのレコード７１３Ａ及び７１４Ａを第１計算機３Ａから受信すると、処理Ｐ４において、更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂとして格納する。さらに、更新前ログ７２Ｂのレコード７２３Ｂ及び７２４Ｂを生成し、その後、ＤＢデータ６０Ｂに更新後ログ７１Ｂのレコード７１３Ｂ及び７１４Ｂを反映させる。
【００８１】
従来の方法では、実行系の第１計算機３Ａでトランザクションが完了するまで、待機系の第２計算機３Ｂに更新後データが反映されなかったが、本発明の実施の形態では、待機系で更新前ログ７２Ｂを生成するため、トランザクションの処理中であっても所定のタイミング（更新ログ送信契機）で待機系の第２計算機３Ｂに更新データを反映する。このようにすることによって、第１計算機３Ａにおける処理Ｐ３と、第２計算機３Ｂにおける処理Ｐ２とを、並列して実行することが可能となる。したがって、並列して処理を実行する分だけトランザクションの結果を待機系の計算機に反映させる時間を短縮させることができる。これにより、たとえば第１計算機に障害が発生したり計画的に停止させたときに、第１計算機が更新した内容を第２計算機に反映させて処理を引き継ぐまでの時間を抑えることができる。
【００８２】
以下、図６に示した状態から処理を継続し、すべての更新操作が正常に終了し、トランザクションを決着させる場合（コミット）、及び処理に失敗した場合などトランザクションを取り消して回復させる場合（ロールバック）についてそれぞれ説明する。トランザクションを決着させる場合については、図８及び図９を参照しながら説明する。また、トランザクションを取り消して回復させる場合については、図１０及び図１１を参照しながら説明する。
【００８３】
図８は、本発明の実施の形態の更新トランザクションを決着させる際の第１計算機３Ａ及び第２計算機３Ｂの処理の概要を説明する図である。
【００８４】
トランザクション２１１には、更新操作２２１、２２２、２２３、２２４及び２２５が含まれている。図８には、図６に示した処理が実行された後の状態を示している。更新操作２２１、２２２、２２３、２２４及び２２５は、それぞれ図６の更新操作１２１、１２２、１２３、１２４及び１２５に対応する。図８に示す状態では、すべての更新操作が実行済みとなっており、更新操作２２５までの更新結果がＤＢデータ６０Ｂに反映済みであり、トランザクションを決着させている状態となっている。
【００８５】
第１計算機３Ａは、この状態でトランザクションの決着要求を受け付けると、更新ログ管理部３０Ａによって、更新後ログ７１Ａのすべてのレコードの更新内容を第１計算機３ＡのＤＢデータ６０Ａに反映する。その後、送受信部４０Ａによって第２計算機３Ｂに決着要求を通知する。
【００８６】
第２計算機３Ｂは、第１計算機３Ａからの決着通知を受信すると、データの更新が確定するため、更新前ログ７２Ｂが不要となるため、更新ログ管理部３０Ｂによって蓄積された更新前ログ７２Ｂを破棄する。
【００８７】
図９は、本発明の実施の形態の更新トランザクションを決着させる際の第１計算機３Ａ及び第２計算機３Ｂにおいて各処理を実行するタイミングを説明する図である。
【００８８】
図９には、更新トランザクションの最初の処理（Ｐ１）から各処理を示しており、処理Ｐ１からＰ４は、図７と共通である。
【００８９】
処理Ｐ５において、第１計算機３Ａは、更新後ログ７１Ａのレコード７１５Ａを生成した後、トランザクションの決着要が通知されると、送受信部４０Ａを介して、更新後ログ７１Ａのレコード７１５Ａ及びトランザクションの決着通知を第２計算機３Ｂに送信する。なお、このとき、第１計算機３Ａで実行されている処理Ｐ５と並列して第２計算機３Ｂで処理Ｐ４が実行されている。
【００９０】
第２計算機３Ｂは、第１計算機３Ａから、更新後ログ７１Ａのレコード７１５Ａを受信すると、処理Ｐ６において、レコード７１５Ａを更新後ログ７１Ｂのレコード７１５Ｂとして格納する。さらに、更新前ログ７２Ｂのレコード７２５Ｂを生成する。その後、更新後ログ７１Ｂのレコード７１５ＢをＤＢデータ６０Ｂに反映し、更新後ログ７１Ｂのレコード７１５Ｂを破棄する。
【００９１】
さらに、第２計算機３Ｂは、トランザクションの決着通知を受信し、トランザクション開始前の状態に戻す必要がなくなったため、更新前ログ７２Ｂを破棄する。
【００９２】
このように、第１計算機３Ａにおいてトランザクションを処理している間に、第２計算機３Ｂで更新処理を開始するため、トランザクションの決着時には、第２計算機３ＢのＤＢデータ６０Ｂの更新処理の少なくとも一部は完了している。したがって、多くの更新処理が含まれるトランザクションであっても、トランザクション決着時に待機系の計算機に更新結果を反映させるために必要な時間を抑制することができる。また、トランザクションの決着時に、第１計算機が生成し転送する情報量は従来技術どおりであるため、第１計算機のトランザクション決着時における処理時間は従来技術のままである。
【００９３】
図１０は、本発明の実施の形態の更新トランザクションを取り消してＤＢデータを回復させる際の第１計算機３Ａ及び第２計算機３Ｂの処理の概要を説明する図である。
【００９４】
トランザクション３１１には、更新操作３２１、３２２、３２３及び３２４と、回復通知３２５が含まれている。図１０には、図６に示した処理が実行された後の状態を示している。更新操作３２１、３２２、３２３及び３２４は、それぞれ図６の更新操作１２１、１２２、１２３及び１２４に対応する。図１０に示す状態では、更新操作３２４までの処理が実行済みとなっており、更新操作３２４までの更新結果がＤＢデータ６０Ｂに反映済みであり、トランザクションを回復させている状態となっている。
【００９５】
第１計算機３Ａは、トランザクションの回復要求を受け付けると、更新ログ管理部３０Ａによって、更新後ログ７１Ａを破棄する。第１計算機３Ａでは、トランザクションの決着要求を受け付けてからＤＢデータ６０Ａに更新結果を反映させるため、トランザクションの回復は、更新後ログ７１Ａを破棄するだけでよい。この場合には、更新前ログ７２Ａを生成せずに、トランザクションを取り消し、ＤＢデータ６０Ａを更新前の状態に回復させることができる。第１計算機３Ａは、その後、送受信部４０Ａによって第２計算機３Ｂに回復を通知する。
【００９６】
第２計算機３Ｂは、第１計算機３Ａから回復通知を受信すると、更新前ログ反映部３３Ｂによって蓄積された更新前ログ７２Ｂを第２計算機３ＢのＤＢデータ６０Ｂに反映することによって、第２計算機３ＢのＤＢデータ６０Ｂをトランザクション開始前の状態に回復させる。
【００９７】
図１１は、本発明の実施の形態の更新トランザクションを取り消してＤＢデータを回復させる際の第１計算機３Ａ及び第２計算機３Ｂにおいて各処理を実行するタイミングを説明する図である。
【００９８】
図１１には、更新トランザクションの最初の処理（Ｐ１）から各処理を示しており、処理Ｐ１からＰ４は、図７と共通である。
【００９９】
処理Ｐ７において、第１計算機３Ａは、トランザクションの回復要求を受け付けると、送受信部４０Ａを介して、トランザクションの回復通知を第２計算機３Ｂに送信する。このとき、更新後ログ７１Ａを破棄する。
【０１００】
処理Ｐ８において、第２計算機３Ｂは、第１計算機３Ａからトランザクション回復通知を受信すると、蓄積した更新前ログ７２ＢをＤＢデータ６０Ｂに反映し、トランザクション開始前の状態にＤＢデータ６０Ｂを回復させる。
【０１０１】
以上のように、本発明の実施の形態では、第２計算機３Ｂが第１計算機３Ａから更新後ログ７１Ａを受信したタイミングで更新前ログを生成するため、トランザクション回復時などに更新前ログを第１計算機３Ａからあらためて取得する必要がない。したがって、第２計算機３Ｂは、既に生成されている更新前ログをＤＢデータ６０Ｂに適用することによって、ＤＢデータ６０Ｂをトランザクション開始前の状態に戻すことが可能となり、回復に必要な時間を抑制することができる。これにより、第１計算機に障害が発生したり計画的に停止させたときに、第２計算機のデータをトランザクション実行前に戻してから処理を引き継ぐまでの時間を抑えることができる。
【０１０２】
図１２は、本発明の実施の形態のデータベースシステムの起動から終了までの手順を示すフローチャートである。
【０１０３】
本発明の実施の形態のデータベースシステムにおける処理を開始するために、まず、実行系の計算機（第１計算機３Ａ）及び待機系の計算機（第２計算機３Ｂ）が起動される。
【０１０４】
第１計算機３ＡのＣＰＵ４Ａは、新たに待機系の計算機（第２計算機３Ｂ）が追加された場合には、追加された計算機にＤＢデータ６０Ａを送信し、データを同期させる。また、第２計算機３ＢにＤＢデータ６０Ｂが格納されている場合には、更新ログ管理部３０Ａによって、更新ログ７０Ａを待機系の計算機に送信し、当該ログをＤＢデータ６０Ｂに適用することによって、ＤＢデータを同期させる（Ｓ１０１Ａ）。なお、待機系の第２計算機３Ｂは、一台であってもよいし、複数台であってもよい。複数台の第２計算機３Ｂに、更新ログ７０Ａを送信する場合には、マルチキャスト通信などによって一括して送信すると効率がよい。
【０１０５】
第２計算機３ＢのＣＰＵ４Ｂは、データ同期処理として、第１計算機３Ａの更新後ログ７１Ａを受信すると、更新ログ管理部３０Ｂによって、受信した更新後ログ７１Ａのレコードを更新後ログ７１Ｂに格納する（Ｓ１０１Ｂ）。また、ＤＢデータ６０Ａを受信した場合には、ＤＢデータ６０Ｂとして格納する。
【０１０６】
第１計算機３ＡのＣＰＵ４Ａは、更新ログ送信契機管理部１０Ａによって、更新ログ送信契機情報を作成する。さらに、生成された更新ログ送信契機情報を更新ログ送信契機５０Ｂに格納するとともに、第２計算機３Ｂの更新ログ送信契機管理部１０Ｂに送信する（Ｓ１０２Ａ）。
【０１０７】
更新ログ送信契機情報は、第１計算機３Ａが更新後ログ７１Ａを送信する契機である。例えば、未送信の更新後ログ７１Ａの量が所定の容量に達した場合、一定の時間間隔、若しくは特定の操作が実行された場合などである。入力装置１からユーザが指定するようにしてもよいし、データベースシステムがシステム環境に基づいて自動的に決定するようにしてもよい。
【０１０８】
未送信の更新後ログ７１Ａの量が所定の容量に達した場合に第１計算機３Ａが更新後ログ７１Ａを送信することによって、待機系の計算機に過剰な負荷を与えることを防ぐことができる。また、一定の時間間隔で第１計算機３Ａが更新後ログ７１Ａを送信することによって、トランザクションの開始から終了までの時間が長く、更新頻度が少ない場合であっても周期的に待機系の計算機のＤＢデータを更新することができる。また、複数の契機を設定し、いずれか一方の契機となった場合に更新後ログを送信するようにしてもよい。例えば、更新後ログの容量と一定時間間隔とを併用すれば、トランザクションの実行時間が比較的長く、特定のタイミングに集中してデータが更新される場合などに対応することができる。
【０１０９】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ送信契機情報を受信すると、更新ログ送信契機管理部１０Ｂによって、受信した更新ログ送信契機情報を更新ログ送信契機５０Ｂに格納する（Ｓ１０２Ｂ）。
【０１１０】
第１計算機３ＡのＣＰＵ４Ａは、更新ログ管理部３０Ａによって、入力装置１から入力された更新操作に基づいて更新後ログを生成し、更新後ログ７１Ａに格納する（Ｓ１０３Ａ）。さらに、更新ログ管理部３０Ａによって、更新ログ送信契機５０Ａを参照し、更新後ログ７１Ａの送信契機になった場合には、更新後ログ７１Ａに格納された未送信のレコードを第２計算機３Ｂに送信する。
【０１１１】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂによって、受信した更新後ログ７１Ａを更新後ログ７１Ｂに格納する（Ｓ１０３Ｂ）。その後、更新前ログ生成部３１Ｂによって更新前ログ７２Ｂを生成し、さらに、更新後ログ反映部３２Ｂによって更新後ログ７１ＢをＤＢデータ６０Ｂに反映させる。なお、待機系の計算機（第２計算機３Ｂ）におけるＤＢデータ更新処理（Ｓ１０３Ｂ）の詳細については、図１３にて説明する。
【０１１２】
第１計算機３ＡのＣＰＵ４Ａは、同期点処理を実行する（Ｓ１０４Ａ）。同期点処理には、「決着（コミット）」又は「回復（ロールバック）」の２種類がある。
【０１１３】
第１計算機３ＡのＣＰＵ４Ａは、同期点処理が「決着」の場合には、更新ログ管理部３０Ａによって、更新後ログ７１Ａのうち未送信のレコードを、送受信部４０Ａを介して第２計算機３Ｂに送信する。さらに、同期点処理が「決着」であることを第２計算機３Ｂに通知する。
【０１１４】
第２計算機３ＢのＣＰＵ４Ｂは、トランザクションの決着通知を受信すると、更新後ログ７１Ｂが存在する場合には、更新ログ管理部３０Ｂによって、Ｓ１０３Ｂに相当する処理を実行して未処理の更新ログを適用する。そして、蓄積した更新前ログ７２Ｂを破棄する（Ｓ１０４Ｂ）。
【０１１５】
なお、待機系の計算機（第２計算機３Ｂ）における同期点処理（Ｓ１０４Ｂ）の詳細については、図１４にて説明する。また、待機系の計算機における同期点処理が「決着」の場合の処理については、図１５Ａにて説明する。
【０１１６】
一方、第１計算機３ＡのＣＰＵ４Ａは、同期点処理が「回復」の場合には、更新ログ管理部３０Ａによって、更新後ログ７１Ａを破棄する（Ｓ１０４Ａ）。また、送受信部４０Ａを介して同期点処理が「回復」であることを第２計算機３Ｂに通知する。
【０１１７】
第２計算機３ＢのＣＰＵ４Ｂは、トランザクションの回復通知を受信すると、更新ログ管理部３０Ｂの更新前ログ反映部３３Ｂによって、更新前ログ７２ＢをＤＢデータ６０Ｂに反映し、トランザクションを回復させる（Ｓ１０４Ｂ）。また、待機系の計算機における同期点処理が「回復」の場合の処理については、図１５Ｂにて説明する。
【０１１８】
第１計算機３ＡのＣＰＵ４Ａは、同期点処理（Ｓ１０４Ａ）が終了すると、処理を終了するか否かを判定する（Ｓ１０５Ａ）。処理対象のデータが残っている場合、新たに処理要求を受け付ける場合など、処理を継続する場合には（Ｓ１０５Ａの結果が「Ｎｏ」）、Ｓ１０３Ａ以降の処理を実行する。一方、すべての要求の処理を完了し、システムを終了させる場合には（Ｓ１０５Ａの結果が「Ｙｅｓ」）、本処理を終了する。
【０１１９】
図１３は、本発明の実施の形態の待機系の第２計算機３Ｂで実行されるＤＢデータ更新処理（Ｓ１０３Ｂ）の手順を示すフローチャートである。
【０１２０】
本処理では、更新ログ管理部３０Ｂによって、更新処理実行時に更新前ログ７２Ｂを生成し、更新後ログ７１ＢをＤＢデータ６０Ｂに反映させる。
【０１２１】
第２計算機３ＢのＣＰＵ４Ｂは、まず、更新ログ管理部３０Ｂによって、第１計算機３Ａによって送信された更新後ログ７１Ａのレコードを第２計算機３Ｂの更新後ログ７１Ｂに格納する（Ｓ３１１）。
【０１２２】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂによって、更新後ログ７１Ｂの各レコードについて、以下に示すＳ３１３からＳ３１８の処理を実行する（Ｓ３１２）。
【０１２３】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂによって、更新後ログ７１Ｂから取得されたレコードの位置情報を取得し、ＤＢデータ６０Ｂにおける更新対象のレコードの位置を特定する（Ｓ３１３）。
【０１２４】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新前ログ生成部３１Ｂによって、対応する位置の更新前ログ７２Ｂを検索し、同じ位置情報のレコードが存在するか否かを判定する（Ｓ３１４）。すでに同じ位置情報のレコードが存在する場合には（Ｓ３１４の結果が「Ｙｅｓ」）、更新前ログを生成せずに、Ｓ３１７以降の処理を実行する。
【０１２５】
第２計算機３ＢのＣＰＵ４Ｂは、更新対象のレコードと同じ位置情報のレコードが更新前ログ７２Ｂに存在しない場合には（Ｓ３１４の結果が「Ｎｏ」）、ＤＢデータ６０Ｂから当該位置情報のレコードの内容を取得し、更新前の内容とする（Ｓ３１５）。
【０１２６】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新前ログ生成部３１Ｂによって、Ｓ３１３の処理で特定した更新位置情報と、Ｓ３１５の処理で取得した更新前の内容とを含むレコードを生成し、更新前ログ７２Ｂに格納する（Ｓ３１６）。
【０１２７】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新後ログ反映部３２Ｂによって、Ｓ３１５の処理で特定したＤＢデータ６０Ｂの更新位置に、更新後ログ７１Ｂの内容を反映する（Ｓ３１７）。さらに、処理対象の更新後ログ７１Ｂのレコードを破棄する（Ｓ３１８）。このように、待機系の計算機（第２計算機３Ｂ）では、トランザクションの同期方法にかかわらず、更新データをＤＢデータ６０Ｂに反映させる。
【０１２８】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂによって、次に処理する更新後ログ７１Ｂのレコードの存在を判定し、処理するレコードが存在する場合にはＳ３１３からＳ３１８までの処理を繰り返し、存在しない場合には本処理を終了する（Ｓ３１９）。
【０１２９】
以上の処理によって、第２計算機３Ｂにおいて、ＤＢデータ６０Ｂが反映され、更新前ログ７２Ｂが生成される。
【０１３０】
図１４は、本発明の実施の形態の待機系の第２計算機３Ｂにおける同期点処理（Ｓ１０４Ｂ）の手順を示すフローチャートである。
【０１３１】
同期点処理には、前述のように、「決着」及び「回復」の２種類がある。「決着」は、いわゆるコミット処理であり、トランザクションに含まれる更新処理をＤＢデータに反映させる。一方、「回復」は、いわゆるロールバックであり、トランザクションに含まれる更新処理を取り消し、ＤＢデータをトランザクション開始前の状態に戻す処理である。
【０１３２】
第２計算機３ＢのＣＰＵ４Ｂは、第１計算機３Ａから通知された同期点処理が「決着」であるか否かを判定する（Ｓ４０１）。同期点処理が「決着」である場合には（Ｓ４０１の結果が「Ｙｅｓ」）、対応する同期点処理「決着」を実行する（Ｓ４０２）。更新トランザクション決着時の処理の詳細については、図１５Ａにて説明する。同期点処理が「回復」である場合には（Ｓ４０１の結果が「Ｎｏ」）、対応する同期点処理「回復」を実行する（Ｓ４０３）。更新トランザクション回復時の処理の詳細については、図１５Ｂにて説明する。
【０１３３】
図１５Ａは、本発明の実施の形態の待機系の第２計算機３Ｂにおける更新トランザクション決着時の処理（Ｓ４０２）の手順を示すフローチャートである。
【０１３４】
第２計算機３ＢのＣＰＵ４Ｂは、まず、第１計算機３Ａから同期点処理が「決着」である旨の通知とともに未更新の更新後ログを受信した場合には、ＤＢデータ更新処理を実行する（Ｓ４１１）。ＤＢデータ更新処理は、図１３のＳ３１１からＳ３１９までの処理と同じである。
【０１３５】
第２計算機３ＢのＣＰＵ４Ｂは、受信した更新後ログをＤＢデータ６０Ｂにすべて反映させると、更新ログ管理部３０Ｂによって、更新前ログ７２Ｂのレコードをすべて破棄する（Ｓ４１２）。データの更新が確定したため、更新前にデータを戻す必要がなくなったからである。その後、本処理を終了する。
【０１３６】
図１５Ｂは、本発明の実施の形態の待機系の第２計算機３Ｂにおける更新トランザクション回復時の処理（Ｓ４０３）の手順を示すフローチャートである。
【０１３７】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂによって、更新前ログ７２Ｂに含まれる各レコードに対し、Ｓ４２２からＳ４２５までの処理を実行する（Ｓ４２１）。
【０１３８】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新前ログ反映部３３Ｂによって、更新前ログ７２Ｂの処理対象のレコードの更新位置情報に基づいて、ＤＢデータ６０Ｂの更新前位置を取得する（Ｓ４２２）。
【０１３９】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新前ログ反映部３３Ｂによって、更新前ログ７２Ｂの処理対象のレコードの更新前内容を取得し、Ｓ４２２の処理で取得されたＤＢデータ６０Ｂの更新前位置に反映させる（Ｓ４２３）。このようにして、トランザクション開始前のデータを更新前ログ７２Ｂから取得し、ＤＢデータ６０Ｂを更新前の状態に戻す。
【０１４０】
第２計算機３ＢのＣＰＵ４Ｂは、更新ログ管理部３０Ｂの更新前ログ反映部３３Ｂによって、次に処理する対象の更新前ログ７２Ｂのレコードが存在するか否かを判定し（Ｓ４２４）、処理するレコードが残っている場合にはＳ４２１の処理に戻る。
【０１４１】
第２計算機３ＢのＣＰＵ４Ｂは、更新前ログ７２Ｂのすべてのレコードについて処理が完了すると、更新ログ管理部３０Ｂの更新前ログ反映部３３Ｂによって、更新前ログ７２Ｂを破棄する（Ｓ４２５）。
【０１４２】
本発明の実施の形態では、実行系の計算機（第１計算機３Ａ）は、トランザクションの同期処理が実行されたか否かにかかわらず、更新ログ送信契機に基づいて更新ログが待機系の計算機（第２計算機３Ｂ）に送信される。第２計算機３Ｂは、第１計算機３Ａから送信された更新後ログ７１Ａを更新後ログ７１Ｂとして格納し、更新後ログ７１Ｂ及び更新前のＤＢデータ６０Ｂに基づいて更新前ログ７２Ｂを生成する。そして、トランザクションの同期処理の実行に関わらず更新後ログ７１ＢをＤＢデータ６０Ｂに反映させる。
【０１４３】
本発明の実施の形態によれば、トランザクション決着時にすべてのデータを更新する必要がないため、データの更新量が多い場合であっても、第１計算機３Ａ及び第２計算機３Ｂに格納されたデータを迅速に同期させることができる。さらに、更新ログ送信契機に基づいて更新ログが周期的に第２計算機３Ｂに送信されるため、第１計算機３Ａにおける更新処理を並列して更新前ログ７２Ｂを第２計算機３Ｂで生成することが可能となる。したがって、第１計算機３Ａでトランザクションを決着させ、更新結果を第２計算機３Ｂに反映させるために必要な時間をさらに短縮することが可能となる。
【０１４４】
また、本発明の実施の形態によれば、第２計算機３Ｂで生成された更新前ログ７２ＢをＤＢデータ６０Ｂに反映することによって更新前の状態に回復させることができる。したがって、第１計算機３Ａが更新前ログ７２Ａを第２計算機３Ｂに送信する必要がなく、トランザクションの回復を通知すればよい。よって、トランザクション回復時において、更新前ログ７２Ａの送受信に必要な時間を削減することができ、特に更新データが多い場合には、ネットワークトラフィックを削減することができる。
【０１４５】
以上より、本発明の実施の形態によれば、トランザクション決着時間の増大を抑えるとともに、トランザクション回復時に待機系の計算機（第２計算機３Ｂ）における回復時間の増大を抑えることができる。
【０１４６】
本発明の実施の形態では、第１計算機３Ａにおいて更新前ログ７２Ａが生成されないが、トランザクション決着時までＤＢデータ６０Ａに更新操作が反映されないため、更新前ログ７２Ａを必要としない。
【０１４７】
本発明の実施の形態の変形例として、第１計算機３Ａにおいて、更新後ログ７１Ａを作成しながら、ＤＢデータ６０Ａに更新結果を随時反映させるようにしてもよい。こうすることによって、トランザクション決着時に更新後ログ７１ＡをＤＢデータ６０Ａに反映させる時間が不要となるため、トランザクションの決着時間をさらに短縮することができる。この場合には、トランザクション回復時に更新前ログ７２Ａが必要となるが、第２計算機３Ｂで生成された更新前ログ７２Ｂを取得し、更新前ログ７２Ａとして格納するようにしてもよい。このとき、更新ログ送信契機に連動して、随時、更新前ログ７２Ｂを取得するようにすれば、トランザクションの回復時に第１計算機３Ａがまとめて取得する必要がなく、トランザクションの回復に必要な時間の増大も抑えることができる。
【０１４８】
さらに、本発明の実施の形態の別の変形例として、通常状態において、トランザクションが取り消されることがまれな場合には、実行系の計算機が何らかの要因で不安定になっている可能性がある。そこで、トランザクションの回復後、待機系の計算機が処理要求を受け付けるように、実行系の計算機を切り替えるように制御してもよい。
【符号の説明】
【０１４９】
１  入力装置
２  ネットワーク
３Ａ  第１計算機
３Ｂ  第２計算機
４Ａ、４Ｂ  ＣＰＵ
５Ａ、５Ｂ  主記憶装置
１０Ａ、１０Ｂ  更新ログ転送契機管理部
２０Ａ、２０Ｂ  ＤＢデータ
３０Ａ、３０Ｂ  更新ログ管理部
３１Ｂ  更新前ログ生成部
３２Ｂ  更新後ログ反映部
３３Ｂ  更新前ログ反映部
４０Ａ、４０Ｂ  送受信部
７０Ａ、７０Ｂ  更新ログ
７１Ａ、７１Ｂ  更新後ログ
７１Ａ、７２Ｂ  更新前ログ
【図１】
2010257284.tif 000003
【図２】
2010257284.tif 000004
【図３】
2010257284.tif 000005
【図４】
2010257284.tif 000006
【図５Ａ】
2010257284.tif 000007
【図５Ｂ】
2010257284.tif 000008
【図６】
2010257284.tif 000009
【図７】
2010257284.tif 000010
【図８】
2010257284.tif 000011
【図９】
2010257284.tif 000012
【図１０】
2010257284.tif 000013
【図１１】
2010257284.tif 000014
【図１２】
2010257284.tif 000015
【図１３】
2010257284.tif 000016
【図１４】
2010257284.tif 000017
【図１５Ａ】
2010257284.tif 000018
【図１５Ｂ】
2010257284.tif 000019