(57)【要約】【課題】データの整合性が保証されたデータベース間の同期を簡易な処理によって実現する。【解決手段】情報処理装置１は、更新権を有する状態では、データベース１ａの更新要求に応じて、データベース１ａを更新するとともに、その更新内容をデータベース２ａに反映させるための同期要求３ａを送信する。また、情報処理装置１は、更新権を有さない状態では、データベース１ａの更新要求が発生したとき、データベース１ａの更新を抑止する。この状態で、更新権の獲得要求４ｂを情報処理装置２から受信すると、情報処理装置１は更新権の獲得を許可する許可通知６を送信する。情報処理装置２は、許可通知６を受信すると、更新権を有する状態に遷移して、データベース２ａの更新要求に応じて、データベース２ａを更新し、同期要求３ｂを送信する。【選択図】図１
2020177562.tif 000002
【特許請求の範囲】
【請求項１】
更新権を有する第１の状態では、第１のデータベースの更新要求に応じて、前記第１のデータベースを更新するとともに、前記第１のデータベースの更新内容を第２のデータベースに反映させるための第１の同期要求を送信し、
前記更新権を有さない第２の状態では、前記第１のデータベースの更新要求が発生したとき、前記第１のデータベースの更新を抑止し、前記第２のデータベースの更新内容を前記第１のデータベースに反映させるための第２の同期要求を受信したとき、受信した前記第２の同期要求に基づいて前記第１のデータベースを更新し、
前記更新権の獲得要求を受信したとき、前記第２の状態である場合のみ前記更新権の獲得を許可する許可通知を送信する、
第１の情報処理装置と、
前記更新権を有さない第３の状態では、前記第１の同期要求を受信したとき、受信した前記第１の同期要求に基づいて前記第２のデータベースを更新し、前記第２のデータベースの更新要求が発生したとき、前記第２のデータベースの更新を抑止するとともに、前記獲得要求を送信し、
前記許可通知を受信すると、前記更新権を有する第４の状態に遷移して、前記第２のデータベースの更新要求に応じて、前記第２のデータベースを更新するとともに、前記第２の同期要求を前記第１の情報処理装置に送信する、
第２の情報処理装置と、
を有する情報処理システム。
【請求項２】
前記第２の情報処理装置は、前記許可通知を受信した場合、その受信時点で前記第１の情報処理装置から受信済みの前記第１の同期要求に基づいて前記第２のデータベースを更新した後、前記第４の状態に遷移する、
請求項１記載の情報処理システム。
【請求項３】
前記第２の情報処理装置は、前記第１の情報処理装置から受信した前記第１の同期要求および前記許可通知が一時的に格納される受信キューを有し、前記受信キューから前記第１の同期要求および前記許可通知を受信順に取得して処理する、
請求項１記載の情報処理システム。
【請求項４】
前記第１の情報処理装置は、前記第１の状態において、前記第１のデータベースの更新処理を含むトランザクションが終了すると、前記第２の状態に遷移する、
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項５】
前記第１の情報処理装置は、前記第１の状態の期間における前記第２の情報処理装置からの前記獲得要求の受信状況に基づいて、前記第２の状態に遷移するタイミングを決定する、
請求項１乃至４のいずれか１項に記載の情報処理システム。
【請求項６】
前記第１の状態は、第５の状態と第６の状態とに分割され、
前記第１の情報処理装置は、
前記第５の状態では、前記第２の情報処理装置から前記獲得要求を受信すると、受信した前記獲得要求を拒否し、前記第１のデータベースの更新処理を含むトランザクションが終了すると、前記第６の状態に遷移し、
前記第６の状態において前記第２の情報処理装置から前記獲得要求を受信すると、前記許可通知を送信するとともに前記第２の状態に遷移し、
前記第６の状態において前記トランザクションが再度開始されると、前記第５の状態に遷移して、前記第１のデータベースの更新要求に応じて前記第１のデータベースを更新する、
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項７】
更新権を有する第１の状態では、第１のデータベースの更新要求に応じて、前記第１のデータベースを更新するとともに、前記第１のデータベースの更新内容を第２のデータベースに反映させるための第１の同期要求を他の情報処理装置に送信し、
前記更新権を有さない第２の状態では、前記第１のデータベースの更新要求が発生したとき、前記第１のデータベースの更新を抑止するとともに、前記更新権の獲得要求を前記他の情報処理装置に送信し、前記他の情報処理装置による前記第２のデータベースの更新内容を前記第１のデータベースに反映させるための第２の同期要求を前記他の情報処理装置から受信したとき、受信した前記第２の同期要求に基づいて前記第１のデータベースを更新し、前記更新権の獲得を許可する許可通知を受信したとき、前記第１の状態に遷移し、
前記他の情報処理装置から前記獲得要求を受信したとき、前記第２の状態である場合のみ前記許可通知を前記他の情報処理装置に送信する、処理部、
を有する情報処理装置。
【請求項８】
コンピュータに、
更新権を有する第１の状態では、第１のデータベースの更新要求に応じて、前記第１のデータベースを更新するとともに、前記第１のデータベースの更新内容を第２のデータベースに反映させるための第１の同期要求を他の情報処理装置に送信し、
前記更新権を有さない第２の状態では、前記第１のデータベースの更新要求が発生したとき、前記第１のデータベースの更新を抑止するとともに、前記更新権の獲得要求を前記他の情報処理装置に送信し、前記他の情報処理装置による前記第２のデータベースの更新内容を前記第１のデータベースに反映させるための第２の同期要求を前記他の情報処理装置から受信したとき、受信した前記第２の同期要求に基づいて前記第１のデータベースを更新し、前記更新権の獲得を許可する許可通知を受信したとき、前記第１の状態に遷移し、
前記他の情報処理装置から前記獲得要求を受信したとき、前記第２の状態である場合のみ前記許可通知を前記他の情報処理装置に送信する、
処理を実行させるデータベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置およびデータベース管理プログラムに関する。
【背景技術】
【０００２】
あるデータベースの更新内容を他のデータベースにも反映させて各データベースの内容を一致させる制御は、「レプリケーション」と呼ばれる。データベースのレプリケーションでは、１つのデータベースをマスタとし、他のデータベースをスレーブとして運用するマスタ・スレーブ方式と、複数のデータベースをマスタとして運用するマルチマスタ方式とがある。
【０００３】
マルチマスタ方式では、データベース間でデータの整合性が保証されることが重要である。このような整合性の保証に関する技術の例として、次のようなデータベースシステムが提案されている。このデータベースシステムでは、レコードごとに更新通番値が対応付けて記憶される。第１計算機は、第１データベースのレコードを更新する際、更新連番値を算出して記憶し、更新されたデータレコードと更新通番値とを第２計算機に送信する。第２計算機は、受信した更新連番値と自装置が記憶する更新通番値とを比較し、比較結果に基づいて第２データベースを更新するかを判定する。
【０００４】
また、他の例として、ドメインコントローラ間で互いにディレクトリサービスデータベースの変更をレプリケートする次のようなシステムも提案されている。このシステムでは、マスタサーバ上の共有ロックファイルへの書き込みによって、単一のサービスがリーダロールを受け持つように制御される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１０６７８５号公報
【特許文献２】国際公開第２０１１／１５２９９６号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データベース間の同期制御では、データの整合性を保証するための処理が煩雑になるという点に課題がある。例えば、更新連番値を用いた上記のデータベースシステムでは、一方のデータベースのレコードを更新するたびに更新連番値を算出し、その更新内容を他方のデータベースに反映させる際に更新連番値同士を比較する、という煩雑な処理が必要となる。
【０００７】
１つの側面では、本発明は、データの整合性が保証されたデータベース間の同期を簡易な処理によって実現可能な情報処理システム、情報処理装置およびデータベース管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、第１の情報処理装置と第２の情報処理装置とを有する情報処理システムが提供される。第１の情報処理装置は、更新権を有する第１の状態では、第１のデータベースの更新要求に応じて、第１のデータベースを更新するとともに、第１のデータベースの更新内容を第２のデータベースに反映させるための第１の同期要求を送信する。また、第１の情報処理装置は、更新権を有さない第２の状態では、第１のデータベースの更新要求が発生したとき、第１のデータベースの更新を抑止し、第２のデータベースの更新内容を第１のデータベースに反映させるための第２の同期要求を受信したとき、受信した第２の同期要求に基づいて第１のデータベースを更新する。さらに、第１の情報処理装置は、更新権の獲得要求を受信したとき、第２の状態である場合のみ更新権の獲得を許可する許可通知を送信する。第２の情報処理装置は、更新権を有さない第３の状態では、第１の同期要求を受信したとき、受信した第１の同期要求に基づいて第２のデータベースを更新し、第２のデータベースの更新要求が発生したとき、第２のデータベースの更新を抑止するとともに、獲得要求を送信する。また、第２の情報処理装置は、許可通知を受信すると、更新権を有する第４の状態に遷移して、第２のデータベースの更新要求に応じて、第２のデータベースを更新するとともに、第２の同期要求を第１の情報処理装置に送信する。
【０００９】
また、１つの案では、次のような処理部を有する情報処理装置が提供される。処理部は、更新権を有する第１の状態では、第１のデータベースの更新要求に応じて、第１のデータベースを更新するとともに、第１のデータベースの更新内容を第２のデータベースに反映させるための第１の同期要求を他の情報処理装置に送信する。また、処理部は、更新権を有さない第２の状態では、第１のデータベースの更新要求が発生したとき、第１のデータベースの更新を抑止するとともに、更新権の獲得要求を他の情報処理装置に送信し、他の情報処理装置による第２のデータベースの更新内容を第１のデータベースに反映させるための同期要求を他の情報処理装置から受信したとき、受信した第２の同期要求に基づいて第１のデータベースを更新し、更新権の獲得を許可する許可通知を受信したとき、第１の状態に遷移する。また、処理部は、他の情報処理装置から獲得要求を受信したとき、第２の状態である場合のみ許可通知を他の情報処理装置に送信する。
【００１０】
さらに、１つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させるデータベース管理プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、データの整合性が保証されたデータベース間の同期を簡易な処理によって実現できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係る情報処理システムの構成例を示す図である。
【図３】データベースサーバのハードウェア構成例を示す図である。
【図４】データベース更新処理の概要を説明するための図（その１）である。
【図５】データベース更新処理の概要を説明するための図（その２）である。
【図６】データベース更新処理の概要を説明するための図（その３）である。
【図７】情報処理システムの各サーバが備える処理機能の構成例を示すブロック図である。
【図８】データベース更新制御の処理例を示すフローチャートである。
【図９】「待機中」への遷移判定の処理例を示すフローチャートである。
【図１０】受信制御の処理例を示すフローチャートである。
【図１１】排他要求に対する応答処理の例を示すフローチャートである。
【図１２】排他要求の結果反映処理の例を示すフローチャートである。
【図１３】一方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図（その１）である。
【図１４】一方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図）その２）である。
【図１５】同じ時間帯に両方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図である。
【図１６】一方のデータベースサーバが排他権を持つ状態で他方のデータベースサーバにおいてデータベースの更新要求が発生した場合の処理例を示すシーケンス図（その１）である。
【図１７】一方のデータベースサーバが排他権を持つ状態で他方のデータベースサーバにおいてデータベースの更新要求が発生した場合の処理例を示すシーケンス図（その２）である。
【図１８】「排他中」から「予約中」に遷移する場合の処理例を示すシーケンス図である。
【図１９】「予約中」に他方のデータベースサーバから排他要求を受信した場合の処理例を示すシーケンス図である。
【図２０】第１の変形例における、データベース更新制御の処理例を示すフローチャートである。
【図２１】第１の変形例における、排他要求に対する応答処理の例を示すフローチャートである。
【図２２】動作状態がテーブル単位で管理される場合の状態管理情報の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。図１に示す情報処理システムは、情報処理装置１，２を含む。情報処理装置１は、データベース１ａを管理する装置であり、情報処理装置２は、データベース２ａを管理する装置である。なお、データベース１ａは、情報処理装置１の外部に接続された記憶装置に記憶されていてもよく、同様にデータベース２ａは、情報処理装置２の外部に接続された記憶装置に記憶されていてもよい。
【００１４】
この情報処理システムでは、データベース１ａ，２ａのいずれもマスタとして運用されるマルチマスタ方式のデータベースレプリケーションが実現される。すなわち、情報処理装置１によってデータベース１ａが更新されたとき、その更新内容がデータベース２ａにも反映される。また、情報処理装置２によってデータベース２ａが更新されたとき、その更新内容がデータベース１ａにも反映される。さらに、情報処理装置１，２は、データベース１ａ，２ａの内容が一致するように同期制御を行う。この同期制御では、データベース１ａ，２ａの更新権を情報処理装置１，２の一方のみが有するように制御することで、データベース１ａとデータベース２ａとの間におけるデータの整合性が保証される。
【００１５】
情報処理装置１は、次のような処理を実行する。まず、更新権を有する第１の状態では、情報処理装置１は、データベース１ａの更新要求に応じて、データベース１ａを更新するとともに、データベース１ａの更新内容をデータベース２ａに反映させるための同期要求を情報処理装置２に送信する。
【００１６】
一方、更新権を有さない第２の状態では、情報処理装置１は、データベース１ａの更新要求が発生したとき、データベース１ａの更新を抑止するとともに、更新権の獲得要求を情報処理装置２に送信する、また、第２の状態では、情報処理装置１は、情報処理装置２によるデータベース２ａの更新内容をデータベース１ａに反映させるための同期要求を情報処理装置２から受信したとき、受信した同期要求に基づいてデータベース１ａを更新する。さらに、第２の状態では、情報処理装置１は、更新権の獲得を許可する許可通知を情報処理装置２から受信したとき、更新権を有する上記の第１の状態に遷移する。
【００１７】
そして、情報処理装置１は、情報処理装置２から上記の獲得要求を受信したとき、情報処理装置１が更新権を有する第１の状態である場合、これを拒否し、情報処理装置１が更新権を有さない第２の状態である場合には、許可通知を情報処理装置２に送信する。
【００１８】
情報処理装置２も、上記と同様の処理を実行する。このような情報処理装置１，２の処理により、データの整合性が保証されたデータベース１ａ，２ａ間の同期を、簡易な処理によって実現できる。
【００１９】
以下、図１を用いて、情報処理装置１，２の状態に応じた処理例について説明する。まず、図１の上段に示すように、情報処理装置１が更新権を有する状態であり、情報処理装置２が更新権を有さない状態であるとする。
【００２０】
更新権を有する情報処理装置１は、データベース１ａの更新要求に応じて、データベース１ａを更新する（ステップＳ１ａ）とともに、データベース１ａの更新内容をデータベース２ａに反映させるための同期要求３ａを情報処理装置２に送信する（ステップＳ１ｂ）。なお、データベース１ａの更新要求は、例えば、データベース１ａを利用して処理を実行するアプリケーションから発生される。
【００２１】
一方、更新権を有さない情報処理装置２は、同期要求３ａを受信すると、同期要求３ａに基づいてデータベース２ａを更新する（ステップＳ１ｃ）。これにより、データベース１ａ，２ａが同期される。また、情報処理装置２は、データベース２ａの更新要求が発生したとき、データベース２ａの更新を抑止する（ステップＳ１ｄ）とともに、更新権の獲得要求４ａを情報処理装置１に送信する（ステップＳ１ｅ）。なお、データベース２ａの更新要求は、例えば、データベース２ａを利用して処理を実行するアプリケーションから発生される。
【００２２】
情報処理装置１は、更新権を有する状態において獲得要求４ａを受信した場合、これを拒否する。例えば、情報処理装置１は、更新権の獲得を拒否する（許可しない）ことを示す拒否通知５を情報処理装置２に送信する（ステップＳ１ｆ）。
【００２３】
次に、図１の中段に示すように、情報処理装置１が更新権を有さない状態に遷移した（更新権を放棄した）とする。なお、情報処理装置１は、例えば、データベース１ａの更新処理を含むトランザクションが終了すると、更新権を有さない状態に遷移する。あるいは、情報処理装置１は、更新権を有する状態であった期間における情報処理装置２からの獲得要求の受信状況に基づいて、更新権を有さない状態に遷移するタイミングを決定してもよい。
【００２４】
情報処理装置１は、更新権を有さない状態では、データベース１ａの更新要求が発生したとき、データベース１ａの更新を抑止する（ステップＳ２ａ）。一方、情報処理装置２において、データベース２ａの更新要求に応じたデータベース２ａの更新が抑止され（ステップＳ２ｂ）、更新権の獲得要求４ｂが送信されたとする（ステップＳ２ｃ）。情報処理装置１は、更新権を有さない状態において獲得要求４ｂを受信すると、更新権の獲得を許可する許可通知６を情報処理装置２に送信する（ステップＳ２ｄ）。
【００２５】
情報処理装置２は、許可通知６を受信することにより、図１の下段に示すように更新権を有する状態に遷移する（更新権を獲得する）。更新権を有する状態では、情報処理装置２は、データベース２ａの更新要求に応じて、データベース２ａを更新する（ステップＳ３ａ）とともに、データベース２ａの更新内容をデータベース１ａに反映させるための同期要求３ｂを情報処理装置１に送信する（ステップＳ３ｂ）。情報処理装置１は、同期要求３ｂに基づいてデータベース１ａを更新する（ステップＳ３ｃ）。
【００２６】
以上の情報処理システムでは、情報処理装置１，２の一方のみが更新権を所有し、更新権を有する情報処理装置のみが、自装置の配下にあるデータベースの更新と、その更新内容を他方のデータベースに反映させるための同期要求の送信とを実行できる。また、このような情報処理装置１，２の状態制御を、一方の情報処理装置が更新権の獲得要求を受信し、それを受信した他方の情報処理装置が自装置の状態に応じて返答する、という簡単な処理によって実現できる。このとき、更新権の獲得要求を受信した情報処理装置は、自装置の配下にあるデータベースの更新を抑止した状態、すなわち更新権を有さない状態でのみ、許可通知を返信する。これにより、データベース１ａ，２ａのそれぞれにおけるデータ更新の順序性を保証し、データベース１ａ，２ａ間のデータの整合性を正確に維持することができる。したがって、データの整合性が保証されたデータベース１ａ，２ａ間の同期を、簡易な処理によって実現できる。
【００２７】
なお、前述した、更新連番値を用いたデータベースシステムでは、一方のデータベースの更新時に更新連番値が算出され、更新されたデータレコードを他方のデータベースに適用する際に、更新連番値の比較によって適用可否が判定される。しかし、本実施の形態の情報処理装置１，２は、自装置が更新権を有していれば、自装置の配下のデータベースの更新要求を受けたとき、単にそのデータベースを更新するだけである。また、情報処理装置１，２は、他方の情報処理装置から同期要求を受けたとき、無条件で、その同期要求に基づいて自装置の配下のデータベースを更新できる。したがって、簡易な処理でデータベース１ａ，２ａ間のデータの整合性を保証できる。
【００２８】
さらに、本実施の形態では、更新権の獲得要求とその応答が情報処理装置１，２間で送受信されることによって、情報処理装置１，２間で更新権が受け渡される。このため、例えば、更新権の管理を情報処理装置１，２とは別の装置で管理する場合と比較して、装置のコストや設置面積を抑制できる。また、情報処理装置１，２の一方が更新権を管理する場合と比較して、管理のための処理を情報処理装置１，２間で分散させることができる。また、更新権の獲得要求とその応答の送受信によって、情報処理装置１，２がそれぞれ独立して自装置の更新権の有無を管理するので、管理処理効率を高めることができる。
【００２９】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理システムの構成例を示す図である。図２に示す情報処理システムは、データベース（ＤＢ）サーバ１００，２００とアプリケーション（ＡＰＬ）サーバ１５０，２５０とを含む。
【００３０】
アプリケーションサーバ１５０はデータベースサーバ１００と接続され、アプリケーションサーバ２５０はデータベースサーバ２００と接続されている。また、データベースサーバ１００とデータベースサーバ２００とはネットワーク３００を介して接続されている。ネットワーク３００は、例えばＬＡＮ（Local Area Network）である。また、データベースサーバ１００，２００は遠隔地に配置されていてもよく、その場合ネットワーク３００はＷＡＮ（Wide Area Network）であってもよい。
【００３１】
データベースサーバ１００は、データベース１１１を管理するサーバ装置である。アプリケーションサーバ１５０は、ユーザアプリケーションのプログラムを実行するサーバ装置である。ユーザアプリケーションの処理には、データベース１１１を利用する処理が含まれる。アプリケーションサーバ１５０は、ユーザアプリケーションの処理により、データベースサーバ１００にコマンドを送信することで、データベース１１１を利用することができる。例えば、コマンドの送信により、アプリケーションサーバ１５０は、データベース１１１の更新やデータベース１１１からのデータ読み出しを実行できる。データベースサーバ１００は、アプリケーションサーバ１５０からのコマンドに応じたデータベース１１１に関する処理を実行し、アプリケーションサーバ１５０に応答する。
【００３２】
同様に、データベースサーバ２００は、データベース１１１を管理するサーバ装置であり、アプリケーションサーバ２５０は、ユーザアプリケーションのプログラムを実行するサーバ装置である。アプリケーションサーバ２５０は、ユーザアプリケーションの処理により、データベースサーバ２００にコマンドを送信することで、データベース２１１を利用することができる。
【００３３】
また、データベース１１１とデータベース２１１との間では、一方のデータベースの更新内容が他方のデータベースにも反映されるように制御される。データベースサーバ１００は、アプリケーションサーバ１５０からデータベース１１１の更新要求を受けると、データベース１１１を更新するとともに、その更新内容を含むジャーナルを生成してデータベースサーバ２００に送信する。データベースサーバ２００は、受信したジャーナルに基づいて、データベース１１１の更新内容をデータベース２１１に反映させる。同様に、データベースサーバ２００は、アプリケーションサーバ２５０からデータベース２１１の更新要求を受けると、データベース２１１を更新するとともに、その更新内容を含むジャーナルを生成してデータベースサーバ１００に送信する。データベースサーバ１００は、受信したジャーナルに基づいて、データベース２１１の更新内容をデータベース１１１に反映させる。
【００３４】
これにより、マルチマスタ構成のデータベースレプリケーションシステムが構築される。同一内容のデータベースが複数箇所に配置されることで、データロスの可能性が低減され、データの安全性を向上させることができる。また、アプリケーションサーバ１５０，２５０からデータベースへのアクセス負荷や更新処理負荷が、データベースサーバ１００，２００の２カ所に分散される。このため、アプリケーションサーバ１５０，２５０からデータベースへのアクセスに対する応答性能を向上させることができる。
【００３５】
また、後述するように、データベースサーバ１００とデータベースサーバ２００との間で排他制御情報が送受信されることで、データベース１１１とデータベース２１１との整合性が保証される。排他制御情報は、データベース１１１，２１１を排他的に更新できる排他権の獲得要求や、獲得要求に対する許諾または却下（不許可）の通知のために利用される制御情報である。
【００３６】
図３は、データベースサーバのハードウェア構成例を示す図である。図３では例としてデータベースサーバ１００について示すが、データベースサーバ２００についても図３に示すハードウェア構成によって実現可能である。
【００３７】
データベースサーバ１００は、プロセッサ１０１、ＲＡＭ（Random Access Memory）１０２、ＨＤＤ（Hard Disk Drive）１０３、グラフィックインタフェース（Ｉ／Ｆ）１０４、入力インタフェース（Ｉ／Ｆ）１０５、読み取り装置１０６および通信インタフェース（Ｉ／Ｆ）１０７を有する。
【００３８】
プロセッサ１０１は、データベースサーバ１００全体を統括的に制御する。プロセッサ１０１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３９】
ＲＡＭ１０２は、データベースサーバ１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００４０】
ＨＤＤ１０３は、データベースサーバ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００４１】
グラフィックインタフェース１０４には、表示装置１０４ａが接続されている。グラフィックインタフェース１０４は、プロセッサ１０１からの命令にしたがって、画像を表示装置１０４ａに表示させる。表示装置としては、液晶ディスプレイや有機ＥＬ（Electroluminescence）ディスプレイなどがある。
【００４２】
入力インタフェース１０５には、入力装置１０５ａが接続されている。入力インタフェース１０５は、入力装置１０５ａから出力される信号をプロセッサ１０１に送信する。入力装置１０５ａとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４３】
読み取り装置１０６には、可搬型記録媒体１０６ａが脱着される。読み取り装置１０６は、可搬型記録媒体１０６ａに記録されたデータを読み取ってプロセッサ１０１に送信する。可搬型記録媒体１０６ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００４４】
通信インタフェース１０７は、ネットワーク１０７ａを介して他の装置との間でデータの送受信を行う。ネットワーク１０７ａとしては、データベースサーバ２００と接続するネットワーク３００や、アプリケーションサーバ１５０と接続するネットワークが含まれる。
【００４５】
なお、アプリケーションサーバ１５０，２５０についても、図３に示したハードウェア構成を有するコンピュータとして実現可能である。
次に、図２を用いて、データベース１１１，２１１のレプリケーションに関する問題点について説明する。レプリケーションの方式としては、例えば、非同期レプリケーションと同期レプリケーションがある。
【００４６】
非同期レプリケーションでは、例えば、一方のデータベース（ここではデータベース１１１とする）が更新されると、その更新内容を含むジャーナルが他方のデータベースサーバ２００に送信されて、他方のデータベース２１１も即座に更新される。他方のデータベース２１１の更新時にも同様の動作が行われて、データベース１１１が即座に更新される。データベース１１１とデータベース２１１との間では、排他制御が行われない。このため、同じ時間帯にデータベース１１１，２１１の両方が更新されると、データの衝突が発生し、データベース１１１，２１１のそれぞれにおけるデータの更新順序が違ってしまう場合がある。その場合には、データベース１１１とデータベース２１１との間でデータの不整合が生じてしまう。
【００４７】
これに対して、同期レプリケーションでは、トランザクション単位でデータの整合性が検証される。例えば、データベースサーバ１００でトランザクションが発生して、データベース１１１に対する更新が複数回行われたとする。データベース１１１が更新されるたびに、更新内容を含むジャーナルが他方のデータベースサーバ２００に送信される。そして、一連の更新処理が終了すると、その終了がデータベースサーバ２００に通知され、データベースサーバ２００において、受信したジャーナルや更新前のデータなどを用いてデータの整合性が検証される。データの整合が確認されると、ジャーナルの内容がデータベース２１１に反映され、その旨がデータベースサーバ１００に送信される。これにより、トランザクションがコミットされる。
【００４８】
この方法では、同じ時間帯にデータベース１１１，２１１の両方が更新されても、データの整合性が保たれる可能性が高い。しかし、トランザクションの終了時に、サーバ間の通信が行われるとともに整合性確認処理が実行される分だけ、データベース１１１，２１１の両方を更新できない余計な時間が発生する。このため、アプリケーションサーバ１５０，２５０からのデータベースの更新性能が低下する。特に、長いトランザクションが発生して多数のジャーナルが送信された場合、整合性確認の処理時間が長くなるので、データベースの更新性能が顕著に低下する。また、一方のサーバでトランザクションが繰り返し発生した場合、トランザクションの終了のたびにサーバ間通信を伴う整合性確認処理が実行されるので、データベースの更新性能が顕著に低下する。さらに、同じ時間帯にアプリケーションサーバ１５０，２５０の両方で長いトランザクションが発生すると、整合性確認の処理が複雑になり、データ不整合が発生しやすい。データ不整合が発生した場合、ロールバックが実施されたデータ更新がキャンセルされるので、データベースの更新性能は一層悪化する。
【００４９】
このような課題に鑑み、本実施の形態では、データベースサーバ１００，２００の一方のみが排他権を持つようにして、両サーバが同じ時間帯にデータベース更新を行うことによるデータの衝突を回避する。また、トランザクションの終了時にデータベースサーバ１００とデータベースサーバ２００との間で整合性確認のための相互通信を行わずに、データベース１１１，２１１の更新の順序性を保証し、データの不整合を防止できるようにする。
【００５０】
以下、図４〜図６を用いて、本実施の形態におけるデータベース更新処理の概要について説明する。なお、これ以後の説明では例として、データベース１１１，２１１に対する操作や制御の要求のためにＳＱＬ（Structured Query Language）の構文が用いられるものとする。
【００５１】
図４〜図６は、データベース更新処理の概要を説明するための図である。
まず、データベースサーバ１００は、データベースサーバ２００から受信したジャーナルを一時的に保持するための受信キュー１１２を備える。また、データベースサーバ２００は、データベースサーバ１００から受信したジャーナルを一時的に保持するための受信キュー２１２を備える。受信キュー１１２，２１２は、いずれもＦＩＦＯ（First In／First Out）方式のキューである。
【００５２】
また、データベースサーバ１００とデータベースサーバ２００との間では、排他制御情報が送受信される。排他制御情報は、排他権の獲得に関する制御情報である。排他制御情報には、排他権の獲得を要求する「排他要求」と、排他要求を許諾したことを通知する「許諾通知」と、排他要求を却下する（許可しない）ことを通知する「却下通知」という３つのデータ種別がある。
【００５３】
排他制御情報は、データベースサーバ１００とデータベースサーバ２００との間では、ジャーナルと同格に取り扱われて、受信キュー１１２，２１２を介して送受信される。例えば、データベースサーバ１００から送信されたジャーナルおよび排他制御情報は、それらの送信順に受信キュー２１２に格納され、受信キュー２１２の先頭から順番に取り出されて処理される。また、データベースサーバ２００から送信されたジャーナルおよび排他制御情報は、それらの送信順に受信キュー１１２に格納され、受信キュー１１２の先頭から順番に取り出されて処理される。
【００５４】
また、データベースサーバ１００，２００は、排他権に関する動作状態として、「待機中」「要求中」「排他中」のいずれかの状態をとる。「待機中」は、排他権を持っていない状態である。この「待機中」では、排他要求を送信可能であり、かつ、他方のデータベースサーバからの排他要求を許諾可能な状態である。「要求中」は、排他権を持っていないが、排他要求を送信して、それに対する応答を待っている状態である。この「要求中」では、他方のデータベースサーバからの排他要求は却下される。「排他中」は、排他権を獲得している状態である。この「排他中」では、自サーバに接続されたアプリケーションサーバからの要求に応じて自サーバ内のデータベースを更新可能であり、かつ、その更新内容を含むジャーナルを他方のデータベースサーバに送信可能な状態である。
【００５５】
図４の状態１では、例として、データベースサーバ１００が「排他中」であり、データベースサーバ２００が「待機中」であるとする。この状態で、アプリケーションサーバ１５０からデータベース１１１の更新要求が発行される。ここでは例として、ＵＰＤＡＴＥ文による更新要求が発行されるものとする。
【００５６】
なお、以下の説明では、「データベースの更新要求」とは、データベースに対して何らかの更新が行われる操作の要求を示す。このような更新要求としては、例えば、データの更新を要求する「ＵＰＤＡＴＥ文」、行データの挿入を要求する「ＩＮＳＥＲＴ文」、行の削除を要求する「ＤＥＬＥＴＥ文」が含まれる。以下の説明では、これらのうち例として「ＵＰＤＡＴＥ文」が用いられるものとするが、説明中の「ＵＰＤＡＴＥ文」を「ＩＮＳＥＲＴ文」または「ＤＥＬＥＴＥ文」に置き換えることも可能である。
【００５７】
図４の状態１において、例えば、データベース１１１に対するＵＰＤＡＴＥ文が２つ発行されたとする。データベースサーバ１００は、排他権を持つ「排他中」であるので、２つのＵＰＤＡＴＥ文に応じてデータベース１１１を更新し、これら２つのＵＰＤＡＴＥ文にそれぞれ対応するジャーナルＪＮＬ１，ＪＮＬ２をデータベースサーバ２００に送信する。ジャーナルＪＮＬ１，ＪＮＬ２は、データベースサーバ２００に受信されて受信キュー２１２に順に格納される。
【００５８】
次に、これら２つのＵＰＤＡＴＥ文の発行によりデータベース１１１の更新のトランザクションが終了したとする。すると、図４の状態２のように、データベースサーバ１００は排他権を手放し、「排他中」から「待機中」に遷移する。
【００５９】
ここで、図５の状態３のように、ジャーナルＪＮＬ１，ＪＮＬ２の反映処理の実行前に、アプリケーションサーバ２５０からデータベース２１１に対するＵＰＤＡＴＥ文が発行されたとする。このとき、データベースサーバ２００は、動作状態が「待機中」であり排他権を持っていないので、ＵＰＤＡＴＥ文による操作要求を拒否し、アプリケーションサーバ２５０に対して排他エラーを返却する。これとともに、データベースサーバ２００は、排他要求ＣＴＬ１をデータベースサーバ１００に送信し、「待機中」から「要求中」に遷移する。排他要求ＣＴＬ１は、データベースサーバ１００に受信されて受信キュー１１２に格納される。
【００６０】
図５の状態４のように、データベースサーバ１００は、受信キュー１１２から排他要求ＣＴＬ１を取り出す。このとき、データベースサーバ１００は、動作状態が「待機中」であるので、排他要求を許諾し、許諾通知ＣＴＬ２をデータベースサーバ２００に送信する。許諾通知ＣＴＬ２は、データベースサーバ２００に受信されて受信キュー２１２に格納される。
【００６１】
次に、図６の状態５のように、データベースサーバ２００は、受信キュー２１２からジャーナルＪＮＬ１，ＪＮＬ２を順に読み出し、更新内容をデータベース２１１に反映させる。さらに、図６の状態６のように、データベースサーバ２００は、受信キュー２１２から許諾通知ＣＴＬ２を取り出す。データベースサーバ２００は、許諾通知ＣＴＬ２に応じて排他権を獲得し、「要求中」から「排他中」に遷移する。この状態で、データベースサーバ２００は、アプリケーションサーバ２５０から再送されたＵＰＤＡＴＥ文を受信すると、そのＵＰＤＡＴＥ文に基づいてデータベース２１１を更新する。また、図示しないが、データベースサーバ２００は、このＵＰＤＡＴＥ文に対応するジャーナルをデータベースサーバ１００に送信して、更新内容をデータベース１１１に反映させる。
【００６２】
以上の処理において、データベースサーバ１００は、データベース１１１の更新が終了すると、整合性確認のための通信を行うことなく、排他権を即座に手放して「待機中」に遷移する。この状態でデータベースサーバ２００から排他要求を受信すると、データベースサーバ１００はそれを許諾して、許諾通知ＣＴＬ２を返信する。
【００６３】
一方、データベースサーバ２００は、排他権を持たない状態ではアプリケーションサーバ２５０からの要求に応じたデータベース２１１の更新を抑止し、許諾通知ＣＴＬ２を受信することで排他権を獲得する。しかし、データベースサーバ２００は、許諾通知ＣＴＬ２の受信前に受信済みのジャーナルＪＮＬ１，ＪＮＬ２がある場合には、それらのジャーナルＪＮＬ１，ＪＮＬ２を処理してから許諾通知ＣＴＬ２を取得して排他権を獲得し、「排他中」に遷移する。ジャーナルＪＮＬ１，ＪＮＬ２と許諾通知ＣＴＬ２が共通の受信キュー２１２を介して受け渡されることで、ジャーナルＪＮＬ１，ＪＮＬ２および許諾通知ＣＴＬ２の送信順と処理順とが変化することはない。このため、データベース２１１の更新順序が保証された状態で、排他権がデータベースサーバ２００に受け渡される。
【００６４】
このように、データベースサーバ１００でのトランザクションが終了したときに、サーバ間の相互通信を伴う、データベース１１１，２１１の両方とも更新できない期間（前述の非同期レプリケーションにおける整合性確認の期間）が発生しない。データベースサーバ１００は、他方サーバと通信することなく、自サーバにおけるトランザクションの終了のみを契機として、排他権を手放し、他方サーバからの排他権の獲得要求（排他要求）を許諾する。他方のデータベースサーバ２００は、送信順にしたがってジャーナルＪＮＬ１，ＪＮＬ２を処理した後に許諾通知ＣＴＬ２を取得することで、排他権を獲得できる。これにより、データベース１１１，２１１の整合性を維持しつつ、排他権を短時間で移動させてデータベース更新を継続させることができる。したがって、データの安全性が高く、データベース１１１，２１１の更新性能も高いマルチマスタ構成のデータベースレプリケーションシステムを実現できる。
【００６５】
また、複雑な整合性確認処理を行わずに、データベースサーバ１００，２００のそれぞれにおける動作状態の管理と、ジャーナルと共通の受信キューを用いた排他制御情報の受け渡しという簡単な処理によって、排他権を短時間で移動させることができる。したがって、上記のようなマルチマスタ構成のデータベースレプリケーションシステムを低負荷の処理によって実現できる。
【００６６】
なお、一方のデータベースサーバ１００のみにおいてトランザクションが繰り返し発生した場合、上記の非同期レプリケーションにおける整合性確認処理がトランザクションの終了ごとに実行されることはない。その代わりに、トランザクションの終了のたびにデータベースサーバ２００への排他要求の送信とデータベースサーバ２００からの許諾通知の受信のみが行われる。例えば、図４の状態２においてデータベースサーバ１００が排他権を手放した後、続けてアプリケーションサーバ１５０からデータベース１１１の更新要求が発生した場合、排他要求の送信と許諾通知の受信が行われることで、データベースサーバ１００は排他権を再度獲得できる。したがって、繰り返し発生するトランザクションの処理を短時間で完了することができる。
【００６７】
次に、図７は、情報処理システムの各サーバが備える処理機能の構成例を示すブロック図である。
まず、アプリケーションサーバ１５０は、データベース１１１を利用した処理を実行するユーザアプリケーション１５１を備える。ユーザアプリケーション１５１の処理は、アプリケーションサーバ１５０が備える図示しないプロセッサがユーザアプリケーションプログラムを実行することで実現される。アプリケーションサーバ２５０も同様に、データベース２１１を利用した処理を実行するユーザアプリケーション２５１を備える。ユーザアプリケーション２５１の処理は、アプリケーションサーバ２５０が備える図示しないプロセッサがユーザアプリケーションプログラムを実行することで実現される。
【００６８】
次に、データベースサーバ１００は、前述のデータベース１１１および受信キュー１１２に加えて、送信キュー１１３を備える。送信キュー１１３は、データベースサーバ１００からデータベースサーバ２００へ送信されるジャーナルおよび排他制御情報を一時的に保持するためのＦＩＦＯ方式のキューである。なお、データベース１１１は、ＨＤＤ１０３などのデータベースサーバ１００が備える記憶装置に記憶される。受信キュー１１２および送信キュー１１３は、ＲＡＭ１０２などのデータベースサーバ１００が備える記憶装置の記憶領域によって実現される。
【００６９】
データベースサーバ２００も同様に、前述のデータベース２１１および受信キュー２１２に加えて、送信キュー２１３を備える。送信キュー２１３は、データベースサーバ２００からデータベースサーバ１００へ送信されるジャーナルおよび排他制御情報を一時的に保持するためのＦＩＦＯ方式のキューである。なお、データベース２１１は、データベースサーバ２００が備える記憶装置に記憶され、受信キュー２１２および送信キュー２１３は、データベースサーバ２００が備える記憶装置の記憶領域によって実現される。
【００７０】
また、データベースサーバ１００は、ジャーナル制御部１２０と排他制御部１３０を備える。ジャーナル制御部１２０および排他制御部１３０の処理は、データベースサーバ１００のプロセッサ１０１が所定のプログラム（例えばデータベース管理プログラム）を実行することで実現される。ジャーナル制御部１２０は、ジャーナル抽出部１２１、ジャーナル送信部１２２、ジャーナル受信部１２３およびジャーナル反映部１２４を備える。
【００７１】
データベースサーバ２００も同様に、ジャーナル制御部２２０と排他制御部２３０を備える。ジャーナル制御部２２０および排他制御部２３０の処理は、データベースサーバ２００が備える図示しないプロセッサが所定のプログラム（例えばデータベース管理プログラム）を実行することで実現される。ジャーナル制御部２２０は、ジャーナル抽出部２２１、ジャーナル送信部２２２、ジャーナル受信部２２３およびジャーナル反映部２２４を備える。
【００７２】
データベースサーバ１００において、ジャーナル抽出部１２１は、排他制御部１３０から出力されるデータベース１１１の更新要求を捕捉して、その更新要求に基づいてデータベース１１１を更新する。これとともに、ジャーナル抽出部１２１は、データベース１１１の更新内容を示す情報をジャーナルとして抽出し、ジャーナル送信部１２２に出力する。
【００７３】
ジャーナル送信部１２２は、ジャーナル抽出部１２１から出力されたジャーナル、および排他制御部１３０から出力された排他制御情報を、送信キュー１１３に順次格納する。そして、ジャーナル送信部１２２は、送信キュー１１３からエントリ（ジャーナルまたは排他制御情報）を順番に取り出し、データベースサーバ２００に送信する。送信されたジャーナルまたは排他制御情報は、データベースサーバ２００のジャーナル受信部２２３によって受信される。
【００７４】
ジャーナル受信部１２３は、データベースサーバ２００のジャーナル送信部２２２から送信されたジャーナルまたは排他制御情報を受信して、受信キュー１１２に順次格納する。そして、ジャーナル受信部１２３は、受信キュー１１２からエントリ（ジャーナルまたは排他制御情報）を順番に取り出す。ジャーナル受信部１２３は、受信キュー１１２からジャーナルを取り出した場合、それをジャーナル反映部１２４に出力し、受信キュー１１２から排他制御情報を取り出した場合、それを排他制御部１３０に出力する。
【００７５】
ジャーナル反映部１２４は、ジャーナル受信部１２３から出力されたジャーナルに基づいてデータベース１１１を更新して、ジャーナルに含まれる更新内容をデータベース１１１に反映させる。
【００７６】
排他制御部１３０は、状態管理情報１３１を参照しながら処理を実行する。状態管理情報１３１は、データベースサーバ１００の動作状態を示す情報であり、ＲＡＭ１０２などのデータベースサーバ１００が備える記憶装置に格納される。
【００７７】
排他制御部１３０は、ユーザアプリケーション１５１からデータベース１１１に発行されるコマンドを捕捉する。排他制御部１３０は、捕捉したコマンドの内容と、状態管理情報１３１に記録された動作状態とに基づいて、データベース１１１の更新可否判定や排他制御情報の送信のための処理を実行する。また、排他制御部１３０は、ジャーナル受信部１２３から出力された排他制御情報の種別と、状態管理情報１３１に記録された動作状態とに基づいて、排他制御情報の返信やデータベースサーバ１００の動作状態の変更処理を実行する。
【００７８】
なお、データベースサーバ２００において、ジャーナル抽出部２２１、ジャーナル送信部２２２、ジャーナル受信部２２３およびジャーナル反映部２２４は、それぞれジャーナル抽出部１２１、ジャーナル送信部１２２、ジャーナル受信部１２３およびジャーナル反映部１２４と同様の処理を実行する。これらのうち、ジャーナル送信部２２２、ジャーナル受信部２２３は、それぞれ送信キュー２１３、受信キュー２１２を参照しながら処理を実行する。
【００７９】
また、排他制御部２３０は、状態管理情報２３１を参照しながら排他制御部１３０と同様の処理を実行する。状態管理情報２３１は、データベースサーバ２００の動作状態を示す情報であり、データベースサーバ２００が備える記憶装置に格納される。
【００８０】
次に、データベースサーバ１００の処理について、図８〜図１２のフローチャートを用いて説明する。なお、図８〜図１２では例としてデータベースサーバ１００の処理について説明するが、データベースサーバ２００でも同様の処理が実行される。
【００８１】
図８は、データベース更新制御の処理例を示すフローチャートである。このデータベース更新制御とは、アプリケーションサーバ１５０のユーザアプリケーション１５１からデータベース１１１に対するコマンドが発行された場合の処理を示す。
【００８２】
［ステップＳ１１］排他制御部１３０は、ユーザアプリケーション１５１からデータベース１１１に発行されたコマンドを捕捉する。
［ステップＳ１２］排他制御部１３０は、捕捉したコマンドに含まれるＳＱＬ文を判定する。排他制御部１３０は、ＳＱＬ文がトランザクションの開始を要求するＢＥＧＩＮ文である場合、処理を終了する。この場合、トランザクションが開始され、排他制御部１３０は、ユーザアプリケーション１５１からのデータベース１１１の操作要求（ここではＵＰＤＡＴＥ文）を待機する状態となる。また、排他制御部１３０は、ＳＱＬ文がデータ更新を要求するＵＰＤＡＴＥ文である場合、ステップＳ１３の処理を実行する。また、排他制御部１３０は、ＳＱＬ文がトランザクションの確定を示すＣＯＭＭＩＴ文の場合、トランザクションを終了し、ステップＳ２０の処理を実行する。
【００８３】
［ステップＳ１３］排他制御部１３０は、状態管理情報１３１を参照して、現在の動作状態が「排他中」かを判定する。排他制御部１３０は、現在「排他中」の場合、ステップＳ１４の処理を実行し、「排他中」でない場合、ステップＳ１６の処理を実行する。
【００８４】
［ステップＳ１４］排他制御部１３０は、ＵＰＤＡＴＥ文をデータベース１１１に出力する。ジャーナル抽出部１２１は、排他制御部１３０から出力されたＵＰＤＡＴＥ文を捕捉し、このＵＰＤＡＴＥ文に基づいてデータベース１１１を更新する。
【００８５】
［ステップＳ１５］ジャーナル抽出部１２１は、データベース１１１の更新内容を示す情報をジャーナルとして抽出し、このジャーナルをジャーナル送信部１２２に出力する。ジャーナル送信部１２２は、ジャーナル抽出部１２１からのジャーナルを送信キュー１１３に格納する。その後、このジャーナルは送信キュー１１３の先頭に達するとジャーナル送信部１２２に取り出され、データベースサーバ２００に送信される。
【００８６】
［ステップＳ１６］ステップＳ１３で「排他中」でないと判定された場合、すなわち、現在「待機中」または「要求中」である場合には、排他制御部１３０は、ユーザアプリケーション１５１に対して排他エラーを返却する。これにより、データベース１１１の更新要求が拒否され、排他権のない状態でのデータベース１１１の更新が抑止される。
【００８７】
［ステップＳ１７］排他制御部１３０は、現在の動作状態が「待機中」かを判定する。排他制御部１３０は、現在「待機中」の場合はステップＳ１８の処理を実行し、現在「待機中」でない場合、すなわち「要求中」の場合には処理を終了する。
【００８８】
［ステップＳ１８］排他制御部１３０は、「排他要求」の排他制御情報を生成してジャーナル送信部１２２に出力する。ジャーナル送信部１２２は、排他制御部１３０からの排他制御情報を送信キュー１１３に格納する。その後、この排他制御情報は送信キュー１１３の先頭に達するとジャーナル送信部１２２に取り出され、データベースサーバ２００に送信される。
【００８９】
［ステップＳ１９］排他制御部１３０は、状態管理情報１３１を「要求中」を示すように書き替える。これにより、データベースサーバ１００は「要求中」に遷移する。
［ステップＳ２０］排他制御部１３０は、状態管理情報１３１を「待機中」を示すように書き替える。これにより、データベースサーバ１００は「待機中」に遷移する。
【００９０】
なお、図８の例では、ＣＯＭＭＩＴ文を受信すると即座に動作状態が「待機中」に遷移する。しかし、例えば、排他制御部１３０は、これとは別の条件によって動作状態を「排他中」から「待機中」に遷移させてもよい。例えば、排他制御部１３０は、次の図９の例のように、「排他中」の期間における他方のデータベースサーバ２００からの排他要求の受信状況に基づいて、動作状態を「待機中」に遷移させるタイミングを決定してもよい。
【００９１】
図９は、「待機中」への遷移判定の処理例を示すフローチャートである。
［ステップＳ２１］排他制御部１３０は、動作状態が「排他中」に遷移すると、ステップＳ２２以降の処理を実行する。また、排他制御部１３０は、図９の処理で使用される変数である「受信回数」を０にリセットする。
【００９２】
［ステップＳ２２］排他制御部１３０は、データベースサーバ２００から排他要求を受信したかを判定する。排他制御部１３０は、排他要求を受信していない場合、一定時間後にステップＳ２２の処理を再実行する。そして、排他制御部１３０は、排他要求を受信した場合、ステップＳ２３の処理を実行する。
【００９３】
［ステップＳ２３］排他制御部１３０は、受信回数をカウントアップする。
［ステップＳ２４］排他制御部１３０は、カウントアップ後の受信回数が所定の閾値を超えたかを判定する。排他制御部１３０は、受信回数が閾値以下の場合、一定時間後にステップＳ２２の処理を実行する。そして、排他制御部１３０は、受信回数が閾値を超えた場合、ステップＳ２５の処理を実行する。
【００９４】
［ステップＳ２５］排他制御部１３０は、状態管理情報１３１を「待機中」を示すように書き替える。これにより、データベースサーバ１００は「待機中」に遷移する。
以上の図９の処理では、排他制御部１３０は、「排他中」の期間におけるデータベースサーバ２００からの排他要求の受信回数が閾値を超えた場合、動作状態を「待機中」に遷移させる。また、他の例として、排他制御部１３０は、「排他中」の期間におけるデータベースサーバ２００からの排他要求の受信頻度が閾値を超えた場合に、動作状態を「待機中」に遷移させてもよい。
【００９５】
また、図９の処理は、図８の処理と並列に実行されてもよい。この場合、ＣＯＭＭＩＴ文の受信、または受信状況が所定の条件を満たすといういずれかの事象が発生したとき、動作状態が「排他中」から「待機中」に遷移する。さらに、他の例として、排他制御部１３０は、「待機中」の期間の長さが閾値を超えた場合に、動作状態を「待機中」に遷移させてもよい。また、ＣＯＭＭＩＴ文を受信したときに、「排他中」の期間における排他要求の受信状況や「排他中」の期間の長さに基づいて、動作状態を「待機中」に遷移させるかが判定されてもよい。
【００９６】
図１０は、受信制御の処理例を示すフローチャートである。この受信制御とは、他方のデータベースサーバ２００から受信したジャーナルまたは排他制御情報に応じた制御処理を示す。なお、前述のように、ジャーナル受信部１２３は、データベースサーバ２００のジャーナル送信部２２２から送信されたジャーナルまたは排他制御情報を受信して、受信キュー１１２に順次格納する。
【００９７】
［ステップＳ３１］ジャーナル受信部１２３は、受信キュー１１２の先頭からエントリを１つ取得する。取得されたエントリは受信キュー１１２から削除される。
［ステップＳ３２］ジャーナル受信部１２３は、取得したエントリがジャーナルの場合、そのジャーナルをジャーナル反映部１２４に出力して、処理をステップＳ３３に進める。一方、ジャーナル受信部１２３は、取得したエントリが排他制御情報の場合、その排他制御情報を排他制御部１３０に出力して、処理をステップＳ３４に進める。
【００９８】
［ステップＳ３３］ジャーナル反映部１２４は、ジャーナル受信部１２３からのジャーナルに含まれる更新内容をデータベース１１１に反映させて、データベース１１１を更新する。
【００９９】
［ステップＳ３４］排他制御部１３０は、ジャーナル受信部１２３からの排他制御情報の種別を判定する。排他制御部１３０は、種別が「排他要求」の場合、ステップＳ３５の処理を実行し、種別が排他要求の結果（「許諾通知」または「却下通知」）の場合、ステップＳ３６の処理を実行する。
【０１００】
［ステップＳ３５］排他制御部１３０は、排他要求に対する応答処理を実行する。この処理の詳細については後の図１１において説明する。
［ステップＳ３６］排他制御部１３０は、排他要求の結果反映処理を実行する。この処理の詳細については後の図１２において説明する。
【０１０１】
図１１は、排他要求に対する応答処理の例を示すフローチャートである。
［ステップＳ４１］排他制御部１３０は、状態管理情報１３１を参照して、現在の動作状態が「待機中」かを判定する。排他制御部１３０は、現在「待機中」の場合、ステップＳ４２の処理を実行し、現在「待機中」でない場合、すなわち「排他中」または「要求中」の場合には、ステップＳ４３の処理を実行する。
【０１０２】
［ステップＳ４２］排他制御部１３０は、種別が「許諾通知」の排他制御情報を生成する。
［ステップＳ４３］排他制御部１３０は、種別が「却下通知」の排他制御情報を生成する。
【０１０３】
［ステップＳ４４］排他制御部１３０は、ステップＳ４２またはステップＳ４３で生成した排他制御情報をジャーナル送信部１２２に出力する。ジャーナル送信部１２２は、排他制御部１３０からの排他制御情報を送信キュー１１３に格納する。その後、この排他制御情報は送信キュー１１３の先頭に達するとジャーナル送信部１２２に取り出され、データベースサーバ２００に送信される。
【０１０４】
図１２は、排他要求の結果反映処理の例を示すフローチャートである。
［ステップＳ５１］排他制御部１３０は、状態管理情報１３１を参照して、現在の動作状態が「要求中」かを判定する。排他制御部１３０は、現在「要求中」の場合、ステップＳ５２の処理を実行し、現在「要求中」でない場合、処理を終了する。
【０１０５】
［ステップＳ５２］排他制御部１３０は、図１０のステップＳ３１で取得された排他制御情報の種別を判定する。排他制御部１３０は、種別が「許諾通知」の場合、ステップＳ５３の処理を実行し、種別が「却下通知」の場合、ステップＳ５４の処理を実行する。
【０１０６】
［ステップＳ５３］排他制御部１３０は、状態管理情報１３１を「排他中」を示すように書き替える。これにより、データベースサーバ１００は排他権を獲得して「排他中」に遷移する
［ステップＳ５４］排他制御部１３０は、状態管理情報１３１を「待機中」を示すように書き替える。これにより、データベースサーバ１００は「待機中」に遷移する。
【０１０７】
次に、図１３〜図１７のシーケンス図を用いて、情報処理システムにおけるデータベース更新処理の具体例を説明する。
まず、図１３、図１４は、一方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図である。
【０１０８】
図１３の初期状態では、データベースサーバ１００，２００のいずれも「待機中」であるものとする。この状態から、アプリケーションサーバ１５０のユーザアプリケーション１５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ１０１）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ１０２）。
【０１０９】
データベースサーバ１００の排他制御部１３０は、ＵＰＤＡＴＥ文を受信したとき、「待機中」であることからアプリケーションサーバ１５０に対して排他エラーを返却し（ステップＳ１１１）、排他要求をジャーナル送信部１２２に出力する。これにより、ジャーナル送信部１２２からデータベースサーバ２００に対して排他要求が送信される（ステップＳ１１２）。排他制御部１３０はさらに、動作状態を「要求中」に遷移させる（ステップＳ１１３）。
【０１１０】
送信された排他要求はデータベースサーバ２００のジャーナル受信部２２３によって受信され、排他制御部２３０に出力される（ステップＳ１２１）。排他制御部２３０は、データベースサーバ２００が「待機中」であることから、許諾通知をジャーナル送信部２２２に出力する。これにより、ジャーナル送信部２２２からデータベースサーバ１００に対して許諾通知が送信される（ステップＳ１２２）。
【０１１１】
また、ステップＳ１１１で返却された排他エラーを受信したユーザアプリケーション１５１は、排他エラー発生時のエラー処理を実行する（ステップＳ１０３）。この処理では、ユーザアプリケーション１５１は、時間のカウントを開始し、一定時間後にトランザクションを再度開始させる。すなわち、ユーザアプリケーション１５１は、一定時間後にＢＥＧＩＮ文を再送し（ステップＳ１０４）、さらにＵＰＤＡＴＥ文を再送する（ステップＳ１０５）。
【０１１２】
ＵＰＤＡＴＥ文の再送時に動作状態が「要求中」であったとすると、ＵＰＤＡＴＥ文を受信した排他制御部１３０は、再度排他エラーを返却する（ステップＳ１１４）。ユーザアプリケーション１５１は、排他エラーの受信に応じて再度エラー処理を実行する（ステップＳ１０６）。すなわち、再送のための時間のカウントが開始される。
【０１１３】
以下、図１４を用いて説明を続ける。
図１３のステップＳ１２２で送信された許諾通知は、ジャーナル受信部１２３によって受信され、排他制御部１３０に出力される（ステップＳ１４１）。排他制御部１３０は、許諾通知に応じて動作状態を「排他中」に遷移させる（ステップＳ１４２）。これにより、データベースサーバ１００は排他権を獲得する。
【０１１４】
また、ユーザアプリケーション１５１は、図１３のステップＳ１０６の実行から一定時間後にトランザクションを再度開始させる。すなわち、ユーザアプリケーション１５１は、一定時間後にＢＥＧＩＮ文を再送し（ステップＳ１３１）、さらにＵＰＤＡＴＥ文を再送する（ステップＳ１３２）。このとき「排他中」であるので、ＵＰＤＡＴＥ文を受信した排他制御部１３０は、ＵＰＤＡＴＥ文に基づいてデータベース１１１を更新させる。このとき、ジャーナル抽出部１２１によってデータベース１１１が更新され（ステップＳ１４３）、ジャーナル送信部１２２によってその更新内容を含むジャーナルがデータベースサーバ２００に送信される（ステップＳ１４４）。送信されたジャーナルはジャーナル受信部２２３によって受信され（ステップＳ１５１）、ジャーナル反映部２２４によってジャーナルの更新内容がデータベース２１１に反映され、データベース２１１が更新される（ステップＳ１５２）。
【０１１５】
以上のような排他制御部１３０の制御により、データベースサーバ１００は、「待機中」では、ユーザアプリケーション１５１からの要求に応じたデータベース１１１の更新を抑止するとともに、排他要求を送信して「要求中」に遷移する。「要求中」では、データベースサーバ１００は、データベースサーバ２００から許諾通知を受けるまでデータベース１１１の更新をさらに抑止する。そして、データベースサーバ１００は、許諾通知を受信すると、排他権を獲得して「排他中」に遷移する。この状態で、データベースサーバ１００は、ユーザアプリケーション１５１からの要求に応じてデータベース１１１を更新し、その更新内容を他方のデータベース２１１に反映させるためのジャーナルを送信する。
【０１１６】
次に、図１５は、同じ時間帯に両方のデータベースに対して更新要求が発生した場合の処理例を示すシーケンス図である。
図１５の初期状態では、データベースサーバ１００，２００のいずれも「待機中」であるものとする。この状態から、アプリケーションサーバ１５０のユーザアプリケーション１５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ１６１）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ１６２）。
【０１１７】
データベースサーバ１００の排他制御部１３０は、ＵＰＤＡＴＥ文を受信したとき、「待機中」であることからアプリケーションサーバ１５０に対して排他エラーを返却し（ステップＳ１７１）、排他要求をジャーナル送信部１２２に出力する。これにより、ジャーナル送信部１２２からデータベースサーバ２００に対して排他要求が送信される（ステップＳ１７２）。排他制御部１３０はさらに、動作状態を「要求中」に遷移させる（ステップＳ１７３）。なお、ステップＳ１７１で返却された排他エラーを受信したユーザアプリケーション１５１は、エラー処理を実行して、再送のための時間のカウントを開始する（ステップＳ１６３）。
【０１１８】
一方、ステップＳ１６１，Ｓ１６２とほぼ同じ時間帯において、アプリケーションサーバ２５０のユーザアプリケーション２５１からも、ＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ１９１）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ１９２）。データベースサーバ２００の排他制御部２３０は、ＵＰＤＡＴＥ文を受信したとき、「待機中」であることからアプリケーションサーバ２５０に対して排他エラーを返却し（ステップＳ１８１）、排他要求をジャーナル送信部２２２に出力する。これにより、ジャーナル送信部２２２からデータベースサーバ１００に対して排他要求が送信される（ステップＳ１８２）。排他制御部２３０はさらに、動作状態を「要求中」に遷移させる（ステップＳ１８３）。なお、ステップＳ１８１で返却された排他エラーを受信したユーザアプリケーション２５１は、エラー処理を実行して、再送のための時間のカウントを開始する（ステップＳ１９３）。
【０１１９】
ステップＳ１７２で送信された排他要求は、データベースサーバ２００のジャーナル受信部２２３によって受信され、排他制御部２３０に出力される（ステップＳ１８４）。排他制御部２３０は、このとき「要求中」であることから、却下通知をジャーナル送信部２２２に出力する。これにより、ジャーナル送信部２２２からデータベースサーバ１００に対して却下通知が送信される（ステップＳ１８５）。送信された却下通知は、データベースサーバ１００のジャーナル受信部１２３によって受信され、排他制御部１３０に出力される（ステップＳ１７６）。排他制御部１３０は、却下通知に応じて、動作状態を「待機中」に遷移させる（ステップＳ１７７）。
【０１２０】
また、ステップＳ１８２で送信された排他要求は、データベースサーバ１００のジャーナル受信部１２３によって受信され、排他制御部１３０に出力される（ステップＳ１７４）。排他制御部１３０は、このとき「要求中」であることから、却下通知をジャーナル送信部１２２に出力する。これにより、ジャーナル送信部１２２からデータベースサーバ２００に対して却下通知が送信される（ステップＳ１７５）。送信された却下通知は、データベースサーバ２００のジャーナル受信部２２３によって受信され、排他制御部２３０に出力される（ステップＳ１８６）。排他制御部２３０は、却下通知に応じて、動作状態を「待機中」に遷移させる（ステップＳ１８７）。
【０１２１】
以上のような排他制御部１３０，２３０の制御により、同時間帯にデータベース１１１，２１１の両方に対する更新が発生した場合には、データベース１１１，２１１の両方についての更新が抑止される。これにより、データベース１１１とデータベース２１１との間でデータの不整合が発生する事態を確実に回避できる。
【０１２２】
次に、図１６、図１７は、一方のデータベースサーバが排他権を持つ状態で他方のデータベースサーバにおいてデータベースの更新要求が発生した場合の処理例を示すシーケンス図である。
【０１２３】
図１６の初期状態では、データベースサーバ１００が排他権を持つ「排他中」であり、データベースサーバ２００が「待機中」であるものとする。この状態で、アプリケーションサーバ１５０のユーザアプリケーション１５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ２０１）、さらにＵＰＤＡＴＥ文が発行される（ステップＳ２０２）。
【０１２４】
ＵＰＤＡＴＥ文を受信した排他制御部１３０は、「排他中」であるのでＵＰＤＡＴＥ文に基づいてデータベース１１１を更新させる。このとき、ジャーナル抽出部１２１によってデータベース１１１が更新され（ステップＳ２１１）、ジャーナル送信部１２２によってその更新内容を含むジャーナルがデータベースサーバ２００に送信される（ステップＳ２１２）。送信されたジャーナルはデータベースサーバ２００のジャーナル受信部２２３によって受信され（ステップＳ２２１）、ジャーナル反映部２２４によってジャーナルの更新内容がデータベース２１１に反映され、データベース２１１が更新される（ステップＳ２２２）。
【０１２５】
また、ユーザアプリケーション１５１からＵＰＤＡＴＥ文が続けて発行されたとする（ステップＳ２０３）。このＵＰＤＡＴＥ文を受信した排他制御部１３０は、「排他中」であるのでＵＰＤＡＴＥ文に基づいてデータベース１１１を更新させる。このとき、ジャーナル抽出部１２１によってデータベース１１１が更新され（ステップＳ２１３）、ジャーナル送信部１２２によってその更新内容を含むジャーナルがデータベースサーバ２００に送信される（ステップＳ２１４）。送信されたジャーナルはデータベースサーバ２００のジャーナル受信部２２３によって受信され（ステップＳ２２６）、ジャーナル反映部２２４によってジャーナルの更新内容がデータベース２１１に反映され、データベース２１１が更新される（ステップＳ２２７）。
【０１２６】
ここで、上記のようなデータベースサーバ１００でのトランザクションの実行中において、アプリケーションサーバ２５０のユーザアプリケーション２５１からデータベース２１１の更新が要求されたとする。すなわち、ユーザアプリケーション２５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ２３１）、さらにＵＰＤＡＴＥ文が発行される（ステップＳ２３２）。
【０１２７】
ここでは、ステップＳ２２２でのデータベース２１１の更新直後にＵＰＤＡＴＥ文が発行されたとする。ＵＰＤＡＴＥ文を受信した排他制御部２３０は、「待機中」であることからアプリケーションサーバ２５０に対して排他エラーを返却し（ステップＳ２２３）、排他要求をジャーナル送信部２２２に出力する。これにより、ジャーナル送信部２２２からデータベースサーバ１００に対して排他要求が送信される（ステップＳ２２４）。排他制御部２３０はさらに、動作状態を「要求中」に遷移させる（ステップＳ２２５）。なお、ステップＳ２２３で返却された排他エラーを受信したユーザアプリケーション２５１は、エラー処理を実行して、再送のための時間のカウントを開始する（ステップＳ２３３）。
【０１２８】
ステップＳ２３２のＵＰＤＡＴＥ文は、ステップＳ２２２でのジャーナル反映とステップＳ２２７でのジャーナル反映との間のタイミングで排他制御部２３０に出力されている。しかし、排他制御部２３０は、「待機中」であり排他権を持たないことから、ＵＰＤＡＴＥ文に応じたデータベース２１１の更新を抑止する。これにより、データベース２１１とデータベース１１１との間のデータの整合性を維持でき、事後の整合性確認処理も不要になる。
【０１２９】
ステップＳ２２４で送信された排他要求は、データベースサーバ１００のジャーナル受信部１２３によって受信され、排他制御部１３０に出力される（ステップＳ２１５）。以下、図１７を用いて説明を続ける。
【０１３０】
排他制御部１３０は、このとき「排他中」であることから、却下通知をジャーナル送信部１２２に出力する。これにより、ジャーナル送信部１２２からデータベースサーバ２００に対して却下通知が送信される（ステップＳ２５１）。送信された却下通知は、データベースサーバ２００のジャーナル受信部２２３によって受信され、排他制御部２３０に出力される（ステップＳ２６１）。排他制御部２３０は、却下通知に応じて、動作状態を「待機中」に遷移させる（ステップＳ２６２）。
【０１３１】
ここで、ユーザアプリケーション１５１からＣＯＭＭＩＴ文が発行されて、トランザクション終了が要求されたとする（ステップＳ２４１）。排他制御部１３０は、ＣＯＭＭＩＴ文に応じて、動作状態を「待機中」に遷移させ、排他権を手放す（ステップＳ２５２）。
【０１３２】
一方、ユーザアプリケーション２５１は、ステップＳ２３３で時間のカウントを開始してから一定時間後にＢＥＧＩＮ文を再送し（ステップＳ２７１）、さらにＵＰＤＡＴＥ文を再送する（ステップＳ２７２）。このとき、動作状態が「待機中」であったとすると、ＵＰＤＡＴＥ文を受信した排他制御部２３０は、アプリケーションサーバ２５０に対して排他エラーを返却し（ステップＳ２６３）、排他要求をジャーナル送信部２２２に出力する。これにより、ジャーナル送信部２２２からデータベースサーバ１００に対して排他要求が送信される（ステップＳ２６４）。排他制御部２３０はさらに、動作状態を「要求中」に遷移させる（ステップＳ２６５）。
【０１３３】
ステップＳ２６４で送信された排他要求は、データベースサーバ１００のジャーナル受信部１２３によって受信され、排他制御部１３０に出力される（ステップＳ２５３）。排他制御部１３０は、「待機中」であり排他権を持たないので、許諾通知をジャーナル送信部１２２に出力する。これにより、ジャーナル送信部１２２からデータベースサーバ２００に対して許諾通知が送信される（ステップＳ２５４）。送信された許諾通知はデータベースサーバ２００のジャーナル受信部２２３によって受信され、排他制御部２３０に出力される（ステップＳ２６６）。排他制御部２３０は、許諾通知に応じて動作状態を「排他中」に遷移させる（ステップＳ２６７）。これにより、データベースサーバ２００は排他権を獲得する。
【０１３４】
ユーザアプリケーション２５１は、ステップＳ２７３の実行から一定時間後にＢＥＧＩＮ文を再送し（ステップＳ２７４）、さらにＵＰＤＡＴＥ文を再送する（ステップＳ２７５）。このとき「排他中」であるので、ＵＰＤＡＴＥ文を受信した排他制御部２３０は、ＵＰＤＡＴＥ文に基づいてデータベース２１１を更新させる。このとき、ジャーナル抽出部２２１によってデータベース２１１が更新され（ステップＳ２６８）、ジャーナル送信部２２２によってその更新内容を含むジャーナルがデータベースサーバ１００に送信される（ステップＳ２６９）。送信されたジャーナルはジャーナル受信部１２３によって受信され（ステップＳ２５５）、ジャーナル反映部１２４によってジャーナルの更新内容がデータベース１１１に反映され、データベース１１１が更新される（ステップＳ２５６）。
【０１３５】
以上の処理において、データベースサーバ２００は、データベースサーバ１００から受信済みのジャーナルを順に処理した後、許諾通知を受信した時点で排他権を獲得し、データベース２１１の更新を開始する。ここで、データベースサーバ１００は、排他権を持たない状態、すなわち、ユーザアプリケーション１５１からの要求に応じたデータベース１１１の更新を行わないことを保証した状態でのみ、許諾通知を送信する。図１７の例では、データベース１１１についてのトランザクションが完了した後に、許諾通知を送信している（ステップＳ２５４）。このため、データベースサーバ２００では、データベースサーバ１００から受信済みのジャーナルが順に処理された後に、許諾通知に応じてデータベース２１１の更新が開始されることで、データベース２１１の更新順が保証される。
【０１３６】
したがって、データベースサーバ２００は、データベース１１１についてのトランザクションにおける最後のジャーナルの反映（ステップＳ２２７）の後に、データベースサーバ１００との間でデータベース間の整合性確認処理を実行する必要がない。すなわち、データベースサーバ２００は、許諾通知の受信に応じて即座に排他権を獲得でき、ユーザアプリケーション２５１からの要求に応じたデータベース２１１の更新を開始できる。また、上記の情報処理システムは、ジャーナルの送受信経路を用いた排他制御情報の送受信という簡単な処理によって、データの整合性が確実に保証された状態で、排他権をデータベースサーバ間において短時間で受け渡すことができる。
【０１３７】
また、データベースサーバ１００は、ユーザアプリケーション１５１からの要求に応じたデータベース１１１の更新が終了すると、それらの更新に対応するジャーナルがデータベース２１１に反映されたことを確認せずに、即座に排他権を手放すことができる。このため、ユーザアプリケーション１５１からの要求に応じたデータベース１１１の更新が終了した後、他方のデータベースサーバ２００は短時間で排他権を獲得できる。その結果、データベース１１１，２１１の更新処理効率を向上させることができる。
【０１３８】
さらに、一方のデータベースサーバは、他方のデータベースサーバの動作状態を認識しておらず、相手側の動作状態に関係なく、排他要求を送信できる。特に、図１６のステップＳ２２４のケースのように、一方のデータベースサーバは、他方のデータベースサーバに排他権がある状態であっても、排他要求を送信できる。このため、一方のデータベースサーバが排他権を手放してから短時間で、他方のデータベースサーバが排他権を獲得できる。その結果、データベース１１１，２１１の更新処理効率を向上させることができる。
【０１３９】
このように、情報処理システムの全体としてデータベース１１１，２１１に対する更新処理の効率を向上させることができる。したがって、データベースサーバ１００，２００がそれぞれユーザアプリケーション１５１，２５１からデータベース更新要求を受信してからの応答速度を高めることができる。
【０１４０】
なお、図１７の例では、データベースサーバ１００の排他制御部１３０は、ＣＯＭＭＩＴ文を受信すると即座に動作状態を「待機中」に遷移させ、排他権を手放している（ステップＳ２５２参照）。しかし、例えば、図９に示したように、「排他中」の期間における他方のデータベースサーバ２００からの排他要求の受信状況に応じて、排他権を手放すタイミングが制御されてもよい。例えば、排他制御部１３０は、ＣＯＭＭＩＴ文の受信時、またはその受信に関係なく、「排他中」の期間におけるデータベースサーバ２００からの排他要求の受信頻度または受信回数が所定の閾値を超えた場合に、排他権を手放してもよい。また、他の例として、排他制御部１３０は、ＣＯＭＭＩＴ文の受信時、またはその受信に関係なく、「排他中」の期間の長さが所定時間を超えた場合に、排他権を手放してもよい。このような制御により、一方のデータベースサーバが長期間排他権を独占し続け、他方のデータベースサーバがユーザアプリケーションからの要求に応じたデータベース更新をできなくなる、という事態の発生を回避できる。
【０１４１】
＜第１の変形例＞
以下、第２の実施の形態における処理の一部を変形した第１の変形例について説明する。
【０１４２】
第２の実施の形態では、例えばデータベースサーバ１００は、ユーザアプリケーション１５１によるデータベース１１１に対する一連の更新処理が終了すると、「排他中」から「待機中」に遷移して排他権を手放す。しかし、例えばユーザアプリケーション２５１よりユーザアプリケーション１５１の方がデータベース更新処理の発生頻度が高い場合には、ユーザアプリケーション１５１による一連のデータベース更新処理が、短い間隔で繰り返し発生することが予測される。この場合、データベースサーバ１００は、ユーザアプリケーション１５１による一連のデータベース更新処理が発生するたびに排他権を獲得し直さなければならず、その分だけユーザアプリケーション１５１からのデータベース更新要求に対する応答性能が低下する。
【０１４３】
そこで、第１の変形例では、データベースサーバ１００，２００の動作状態として、上記の「待機中」「要求中」「排他中」に加えてさらに「予約中」を導入する。「予約中」は、排他権を持ってはいるが、他方のデータベースから排他要求を受信すると即座に排他権を手放す、という動作状態である。「予約中」には、「排他中」にＣＯＭＭＩＴ文を受信した場合に遷移する。すなわち、データベースサーバは、「排他中」にユーザアプリケーションによるデータベース更新処理が終了したとき、「予約中」に遷移することで、即座に排他権を手放さずに保持し続ける。そして、「予約中」のデータベースサーバは、他方のデータベースサーバから排他要求を受信すると、その時点で排他権を手放し、許諾通知を送信する。しかし、「予約中」のデータベースサーバは、ユーザアプリケーションによるデータベース更新処理が再度発生した場合には、他方のデータベースサーバから排他権を獲得し直す手続きを実行することなく、「排他中」に遷移する。そして、「排他中」に遷移したデータベースサーバは、ユーザアプリケーションからの要求に応じたデータベース更新処理を即座に実行する。これにより、ユーザアプリケーションによる一連のデータベース更新処理が短い間隔で発生した場合における、データベース更新要求に対する応答性能を改善できる。
【０１４４】
図１８は、「排他中」から「予約中」に遷移する場合の処理例を示すシーケンス図である。
図１８の初期状態では、データベースサーバ１００は「排他中」であり、データベースサーバ２００は「待機中」であるものとする。この状態から、アプリケーションサーバ１５０のユーザアプリケーション１５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ２８１）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ２８２）。すると、データベースサーバ１００の排他制御部１３０の制御により、データベース１１１が更新され（ステップＳ２９１）、ジャーナルが送信される（ステップＳ２９２）。データベースサーバ２００では、ジャーナルが受信されると（ステップＳ３０１）、ジャーナルの内容がデータベース２１１に反映されてデータベース２１１が更新される（ステップＳ３０２）。
【０１４５】
さらに続けて、ユーザアプリケーション１５１からＵＰＤＡＴＥ文が発行されたとする（ステップＳ２８３）。すると、データベースサーバ１００の排他制御部１３０の制御により、データベース１１１が更新され（ステップＳ２９３）、ジャーナルが送信される（ステップＳ２９４）。データベースサーバ２００では、ジャーナルが受信されると（ステップＳ３０３）、ジャーナルの内容がデータベース２１１に反映されてデータベース２１１が更新される（ステップＳ３０４）。
【０１４６】
ここで、ユーザアプリケーション１５１からＣＯＭＭＩＴ文が発行されてトランザクションの終了が要求されると（ステップＳ２８４）、排他制御部１３０は動作状態を「予約中」に遷移させる（ステップＳ２９５）。
【０１４７】
しかしこの後、ユーザアプリケーション１５１から再度、ＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ２８５）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ２８６）。ＢＥＧＩＮ文を受信した排他制御部１３０は、「予約中」のため排他権を即座に獲得し、動作状態を「排他中」に遷移させる（ステップＳ２９６）。そして、排他制御部１３０は、ＵＰＤＡＴＥ文を受信すると、ＵＰＤＡＴＥ文に基づいてデータベース１１１を更新させ（ステップＳ２９７）、ジャーナルを送信させる（ステップＳ２９８）。データベースサーバ２００では、ジャーナルが受信されると（ステップＳ３０５）、ジャーナルの内容がデータベース２１１に反映されてデータベース２１１が更新される（ステップＳ３０６）。
【０１４８】
このように、「予約中」では、排他制御部１３０は、データベースサーバ２００からの排他要求を受信する前にユーザアプリケーション１５１によるデータベース更新処理が再度発生した場合には、ユーザアプリケーション１５１からの要求に応じたデータベース更新処理を即座に実行できる。これにより、ユーザアプリケーション１５１からのデータベース更新要求に対する応答性能を改善できる。
【０１４９】
なお、図１８の例では、排他制御部１３０は、「予約中」の状態でＢＥＧＩＮ文を受信した場合に、動作状態を「排他中」に遷移させている。しかし、他の例として、排他制御部１３０は、「予約中」の状態でＵＰＤＡＴＥ文を受信した場合に、動作状態を「排他中」に遷移させ、ＵＰＤＡＴＥ文に基づいてデータベース１１１の更新およびジャーナルの送信を実行させてもよい。
【０１５０】
図１９は、「予約中」に他方のデータベースサーバから排他要求を受信した場合の処理例を示すシーケンス図である。
図１９の初期状態では、データベースサーバ１００は「予約中」であり、データベースサーバ２００は「待機中」であるものとする。この状態から、アプリケーションサーバ２５０のユーザアプリケーション２５１からＢＥＧＩＮ文が発行されてトランザクション開始が要求され（ステップＳ３３１）、さらにＵＰＤＡＴＥ文が発行されたとする（ステップＳ３３２）。すると、第２の実施の形態と同様に、データベースサーバ２００の排他制御部２３０は、排他エラーを返却してデータベース２１１の更新を抑止し（ステップＳ３２１）、排他要求を送信させ（ステップＳ３２２）、動作状態を「要求中」に遷移させる（ステップＳ３２３）。
【０１５１】
データベースサーバ１００の排他制御部１３０は、排他要求が受信されると（ステップＳ３１１）、許諾通知を送信させ（ステップＳ３１２）、動作状態を「待機中」に遷移させる（ステップＳ３１３）。排他制御部２３０は、許諾通知の受信（ステップＳ３２４）に応じて、動作状態を「排他中」に遷移させる（ステップＳ３２５）。これにより、データベースサーバ２００が排他権を獲得する。
【０１５２】
ステップＳ３２１で返却された排他エラーを受信したユーザアプリケーション１５１は、排他エラー発生時のエラー処理を実行する（ステップＳ３３３）。ユーザアプリケーション２５１は、時間のカウントを開始し、一定時間後にＢＥＧＩＮ文を再送し（ステップＳ３３４）、さらにＵＰＤＡＴＥ文を再送する（ステップＳ３３５）。ＵＰＤＡＴＥ文を受信した排他制御部２３０は、排他権を持っているので、ＵＰＤＡＴＥ文に基づいてデータベース２１１を更新させ（ステップＳ３２６）、ジャーナルを送信させる（ステップＳ３２７）。データベースサーバ１００では、ジャーナルが受信されると（ステップＳ３１４）、ジャーナルの内容がデータベース１１１に反映されてデータベース１１１が更新される（ステップＳ３１５）。
【０１５３】
このように、排他制御部１３０は、「予約中」において排他要求を受信すると、即座に許諾通知を送信して、動作状態を「待機中」に遷移させ、排他権を手放す。データベースサーバ２００は、排他要求を送信してから、第２の実施の形態の場合と同等の時間で排他権を獲得できる。すなわち、第１の変形例によれば、一方のデータベースサーバにおけるユーザアプリケーションからのデータベース更新要求に対するレスポンスを改善でき、なおかつ、他方のデータベースサーバが第２の実施の形態と同等の時間で排他権を獲得できる。
【０１５４】
図２０は、第１の変形例における、データベース更新制御の処理例を示すフローチャートである。この図２０では、図８と同じ処理が実行される処理ステップには同じステップ番号を付して示しており、その処理内容の説明を省略する。
【０１５５】
図２０に示す処理では、図８のステップＳ１２において、コマンドのＳＱＬ文がＢＥＧＩＮ文であった場合に、ステップＳ１２ａ，Ｓ１２ｂが実行される。
［ステップＳ１２ａ］排他制御部１３０は、状態管理情報１３１に基づいて、現在の動作状態が「予約中」かを判定する。状態管理情報１３１は、動作状態が「予約中」の場合、ステップＳ１２ｂの処理を実行し、動作状態が「予約中」でない場合、処理を終了する。
【０１５６】
［ステップＳ１２ｂ］排他制御部１３０は、状態管理情報１３１を「排他中」を示すように書き替える。これにより、データベースサーバ１００は「排他中」に遷移する。
なお、前述のように、「予約中」の状態では、ＢＥＧＩＮ文の受信でなくＵＰＤＡＴＥ文の受信に応じて動作状態が「排他中」に遷移してもよい。この場合、図８の処理は次のように変形される。排他制御部１３０は、ステップＳ１３において動作状態が「予約中」であった場合には、動作状態を「排他中」に遷移させた後、ステップＳ１４の処理を実行する。
【０１５７】
図２１は、第１の変形例における、排他要求に対する応答処理の例を示すフローチャートである。
［ステップＳ６１］排他制御部１３０は、状態管理情報１３１を参照して、現在の動作状態を判定する。排他制御部１３０は、「予約中」の場合、ステップＳ６２の処理を実行し、「待機中」の場合、ステップＳ６４の処理を実行し、「排他中」または「要求中」の場合、ステップＳ６５の処理を実行する。
【０１５８】
［ステップＳ６２］排他制御部１３０は、種別が「許諾通知」の排他制御情報を生成する。
［ステップＳ６３］排他制御部１３０は、状態管理情報１３１を「待機中」を示すように書き替える。これにより、データベースサーバ１００は「待機中」に遷移する。
【０１５９】
［ステップＳ６４］排他制御部１３０は、種別が「許諾通知」の排他制御情報を生成する。
［ステップＳ６５］排他制御部１３０は、種別が「却下通知」の排他制御情報を生成する。
【０１６０】
［ステップＳ６６］排他制御部１３０は、ステップＳ６２，Ｓ６４，Ｓ６５のいずれかで生成した排他制御情報をジャーナル送信部１２２に出力する。ジャーナル送信部１２２は、排他制御部１３０からの排他制御情報を送信キュー１１３に格納する。その後、この排他制御情報は送信キュー１１３の先頭に達するとジャーナル送信部１２２に取り出され、データベースサーバ２００に送信される。
【０１６１】
＜第２の変形例＞
第２の実施の形態および第１の変形例における排他権の獲得および放棄制御は、データベース単位の他、データベースに含まれるテーブル単位、あるいはスキーマ単位で個別に実行されてもよい。このような場合、データベースサーバ１００，２００の動作状態は、排他権の獲得および放棄の制御単位で管理される。
【０１６２】
図２２は、動作状態がテーブル単位で管理される場合の状態管理情報の例を示す図である。図２２に示す状態管理情報１３１では、制御対象となるテーブルごとに、排他権に関する動作状態が記録されている。このような状態管理情報１３１を用いることで、排他制御部１３０は、テーブル単位で排他権の獲得および放棄を制御できる。
【０１６３】
なお、上記の各実施の形態に示した装置（例えば、情報処理装置１，２、データベースサーバ１００，２００、アプリケーションサーバ１５０，２５０）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（Blu-ray Disc：ＢＤ、登録商標）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１６４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１６５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【０１６６】
１，２  情報処理装置
１ａ，２ａ  データベース
３ａ，３ｂ  同期要求
４ａ，４ｂ  獲得要求
５  拒否通知
６  許可通知
【図１】
2020177562.tif 000003
【図２】
2020177562.tif 000004
【図３】
2020177562.tif 000005
【図４】
2020177562.tif 000006
【図５】
2020177562.tif 000007
【図６】
2020177562.tif 000008
【図７】
2020177562.tif 000009
【図８】
2020177562.tif 000010
【図９】
2020177562.tif 000011
【図１０】
2020177562.tif 000012
【図１１】
2020177562.tif 000013
【図１２】
2020177562.tif 000014
【図１３】
2020177562.tif 000015
【図１４】
2020177562.tif 000016
【図１５】
2020177562.tif 000017
【図１６】
2020177562.tif 000018
【図１７】
2020177562.tif 000019
【図１８】
2020177562.tif 000020
【図１９】
2020177562.tif 000021
【図２０】
2020177562.tif 000022
【図２１】
2020177562.tif 000023
【図２２】
2020177562.tif 000024