(57)【要約】  各ＤＢサーバ３０〜５０の切り替え処理部は、ＤＢサーバ２０からトランザクションの停止指示依頼を受け付けると、トランザクション停止指示処理を実行する。また、各ＤＢサーバ３０〜５０のトランザクション処理部は、切り替え処理部からトランザクション停止指示を受け付けると、トランザクション停止処理を実行する。また、ＤＢサーバ２０のトランザクション処理部も同様に、トランザクションを停止させる処理を実行する。ここで、ＤＢサーバ２０のトランザクション処理部、および各ＤＢサーバ３０〜５０のトランザクション処理部は、トランザクションを構成するＳＱＬの処理属性および処理状態に応じてトランザクションを停止するか否か判断し、判断結果に応じてトランザクションを停止させる処理を実行する。
2008136107.tif 000002
【特許請求の範囲】
【請求項１】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラムであって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手順と、
前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手順と、
前記停止処理実行手順により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手順と、
をコンピュータに実行させることを特徴とする切替処理プログラム。
【請求項２】
前記判断手順は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、
前記停止処理実行手順は、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、
前記切替手順は、前記停止処理実行手順による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手順により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする請求項１に記載の切替処理プログラム。
【請求項３】
前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、
前記判断手順は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、
前記停止処理実行手順は、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、
前記切替手順は、前記停止処理実行手順により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする請求項１に記載の切替処理プログラム。
【請求項４】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える切替処理方法であって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断工程と、
前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行工程と、
前記停止処理実行工程により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替工程と、
を含んだことを特徴とする切替処理方法。
【請求項５】
前記判断工程は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、
前記停止処理実行工程は、前記判断工程により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断工程により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、
前記切替工程は、前記停止処理実行工程による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行工程により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする請求項４に記載の切替処理方法。
【請求項６】
前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、
前記判断工程は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、
前記停止処理実行工程は、前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、
前記切替工程は、前記停止処理実行工程により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする請求項４に記載の切替処理方法。
【請求項７】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムであって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手段と、
前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手段と、
前記停止処理実行手段により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手段と、
を備えたことを特徴とする完全二重化システム。
【請求項８】
前記判断手段は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、
前記停止処理実行手段は、前記判断手段により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手段により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、
前記切替手段は、前記停止処理実行手段による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手段により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする請求項７に記載の完全二重化システム。
【請求項９】
前記運用ノードおよび前記待機ノードを複数含んで構成され、
前記判断手段は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、
前記停止処理実行手段は、前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、
前記切替手段は、前記停止処理実行手段により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする請求項７に記載の完全二重化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラム、切替処理方法および完全二重化システムに関する。
【背景技術】
【０００２】
従来より、データベースの絶対的な安定稼動の維持を目的として、運用ノードと待機ノードとが完全に独立化された完全二重化システム（図７参照）が企業などにより利用されている。この完全二重化システムは、待機について起動状態を維持し、更新差分ログを用いて、運用ノード内のデータベースと待機ノード内のデータベースとの間のデータ同期を取るとともに、運用ノードと待機ノードとの間の切り替え処理を秒単位で実現する。【０００３】
ところで、完全二重化システムのようなシステムにおける運用ノードに異常が発生した場合に、待機ノードを新運用ノードとして切り替える処理を迅速に行うための技術が開示されている（例えば、特許文献１参照）。なお、完全二重化システムでは、運用ノードに異常が検知された場合に、通常、運用ノードで実行されている処理（例えば、トランザクションの処理）を停止してから、運用ノードで実行されている処理を引き継ぐように、待機ノードを新運用ノードとして切り替える処理を実行する。【０００４】
【特許文献１】特開２００４−３４８７０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、上記した従来の技術は、運用ノードで仕掛かり中のトランザクションから停止すべきものを利用者が選択することは非常に困難であり、一般的には全ての仕掛かり中トランザクションが完了してから切り替える方式を選択しているという背景から、待機ノードを新運用ノードとして迅速に切り替えることができない場合があるという問題点があった。【０００６】
例えば、複数のノードで構成されている完全二重化システム（拡張性を考慮した構成を採用する完全二重化システム）において、一部の運用ノードに異常が検知された場合には、ＡＰサーバも含めて一斉に切り替える要件がある場合や、ＤＢＭＳが管理する情報の一貫性を保証する理由などから、正常な運用ノードを含めた全ての運用ノードの片系を構成する各待機ノードを、新運用ノードとしてそれぞれ切り替える必要がある（図８参照）。そして、切り替え処理を実行する前には、全ての運用ノードで実行されているトランザクションの処理を停止する必要があるので、正常な運用ノードを含めた全ての運用ノードの片系を構成する各待機ノードを、新運用ノードとして迅速にそれぞれ切り替えることができない場合があるという問題点があった。なお、トランザクションの処理を停止する方法として、従来の技術では、ＤＢＭＳのインスタンスを停止する方法が一般的に採用されるが、この方法では、ロールバック処理や異常回収などの全ての終了処理を待ち合わせる必要があり、瞬時の切り替えを実現する場合には採用できない。【０００７】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することで、待機ノードを新運用ノードとして迅速に切り替えることが可能な切替処理プログラム、切替処理方法および完全二重化システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラムであって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手順と、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手順と、前記停止処理実行手順により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手順と、をコンピュータに実行させることを特徴とする。【０００９】
また、請求項２に係る発明は、上記の発明において、前記判断手順は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、前記停止処理実行手順は、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、前記切替手順は、前記停止処理実行手順による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手順により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする。【００１０】
また、請求項３に係る発明は、上記の発明において、前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、前記判断手順は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、前記停止処理実行手順は、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、前記切替手順は、前記停止処理実行手順により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする。【００１１】
また、請求項４に係る発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える切替処理方法であって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断工程と、前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行工程と、前記停止処理実行工程により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替工程と、を含んだことを特徴とする。【００１２】
また、請求項５に係る発明は、上記の発明において、前記判断工程は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、前記停止処理実行工程は、前記判断工程により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断工程により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、前記切替工程は、前記停止処理実行工程による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行工程により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする。【００１３】
また、請求項６に係る発明は、上記の発明において、前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、前記判断工程は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、前記停止処理実行工程は、前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、前記切替工程は、前記停止処理実行工程により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする。【００１４】
また、請求項７に係る発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムであって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手段と、前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手段と、前記停止処理実行手段により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手段と、を備えたことを特徴とする。【００１５】
また、請求項８に係る発明は、上記の発明において、前記判断手段は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、前記停止処理実行手段は、前記判断手段により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手段により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、前記切替手段は、前記停止処理実行手段による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手段により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする。【００１６】
また、請求項９に係る発明は、上記の発明において、前記運用ノードおよび前記待機ノードを複数含んで構成され、前記判断手段は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、前記停止処理実行手段は、前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、前記切替手段は、前記停止処理実行手段により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする。
【発明の効果】
【００１７】
本発明によれば、運用ノードに異常が発生した場合に、トランザクションの処理属性および処理状態を判断し、トランザクションの処理属性および処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行した後に、待機ノードを新運用ノードとして切り替えるので、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。【００１８】
また、本発明によれば、トランザクションの処理属性が更新であるか否か判断し、処理属性が更新であると判断した場合には、処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、処理属性が更新であって、かつ処理状態が更新トランザクションの実行中であると判断された場合には、実行中である更新トランザクションの停止処理を実行し、または、処理属性が更新であって、かつ処理状態がコミット処理の実行中であると判断された場合には、コミット処理を完了させる処理を実行し、更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに待機ノードを新運用ノードとして切り替え、または、コミット処理が完了された後に待機ノードを新運用ノードとして切り替えるので、更新トランザクションの停止処理実行に伴って実行されるロールバック処理が完了することを待つことなく、待機ノードを新運用ノードとして切り替える処理を実行することができ、待機ノードを新運用ノードとして切り替える処理を短時間で実現することが可能である。また、実行中であるトランザクションの更新処理に関するコミット処理が完了された後に、待機ノードを新運用ノードとして切り替えることができ、待機ノードを新運用ノードとして切り替える処理をコミット処理に要する一定時間で実現することが可能である。【００１９】
また、本発明によれば、完全二重化システムは、運用ノードおよび待機ノードを複数含んで構成され、運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、処理属性および処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、各運用ノードにおいて停止処理が実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えるので、例えば、システムが複数のノードを含んで構成されている場合であっても、各運用ノードで実行中のトランザクションに関する停止処理を瞬時に完了させることができ、各待機ノードを新運用ノードとしてそれぞれ迅速に切り替えることが可能である。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施例１に係る完全二重化システムの概要および特徴を説明する図である。
【図２】図２は、実施例１に係るＤＢサーバの構成を示すブロック図である。
【図３】図３は、実施例１に係る切り替え処理の流れを示すフローチャートである。
【図４】図４は、実施例１に係るＳＱＬ実行処理の流れを示すフローチャートである。
【図５】図５は、実施例１に係るトランザクション停止処理の流れを示すフローチャートである。
【図６】図６は、切替制御プログラムを実行するコンピュータを示す図である。
【図７】図７は、従来技術を説明するための図である。
【図８】図８は、従来技術を説明するための図である。
【符号の説明】
【００２１】
１  ネットワーク
１０  ＡＰサーバ
２０  ＤＢサーバ（運用）
２０’  ＤＢサーバ（待機）
２１、２１’  通信制御Ｉ／Ｆ部
２２、２２’  ＤＢＭＳ
２２ａ、２２ａ’  切り替え処理部
２２ｂ、２２ｂ’  トランザクション処理部
２２ｃ、２２ｃ’  参照メモリ
３０  ＤＢサーバ（運用）
３０’  ＤＢサーバ（待機）
４０  ＤＢサーバ（運用）
４０’  ＤＢサーバ（待機）
５０  ＤＢサーバ（運用）
５０’  ＤＢサーバ（待機）
６０  コンピュータ
６１  通信制御Ｉ／Ｆ部
６２  ＲＡＭ（Random  Access  Memory）
６２ａ  実行数データ
６２ｂ  停止指示状態データ
６３  ＲＯＭ（Read  Only  Memory）
６３ａ  切り替え処理プログラム
６３ｂ  トランザクション処理プログラム
６４  ＣＰＵ（Central  Processing  Unit）
６４ａ  切り替え処理プロセス
６４ｂ  トランザクション処理プロセス
７０  バス
【発明を実施するための最良の形態】
【００２２】
以下に添付図面を参照して、本発明に係る切替処理プログラム、切替処理方法および完全二重化システムの実施例を詳細に説明する。なお、以下では、本発明に係る切り替え処理プログラムの一実施形態として、この切替処理プログラムを適用した完全二重化システムを例に挙げて実施例１として説明した後に、本発明に含まれる他の実施例を説明する。
【実施例１】
【００２３】
以下の実施例１では、実施例１に係る完全二重化システムの概要および特徴、この完全二重化システムに含まれるＤＢサーバの構成および処理を順に説明した後に、実施例１に係る効果を説明する。【００２４】
［完全二重化システムの概要および特徴（実施例１）］
まず、図１を用いて、実施例１に係る完全二重化システムの概要および特徴を説明する。図１は、実施例１に係る完全二重化システムの概要および特徴を説明するための図である。【００２５】
実施例１に係る完全二重化システムは、一連の処理単位であるトランザクションの処理を実行する運用ノードと、この運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、運用ノードおよび待機ノードが互いに独立化されたシステムであって、運用ノードに異常が発生した場合に、待機ノードを新運用ノードとして切り替えることを概要とする。【００２６】
そして、実施例１に係る完全二重化システムは、待機ノードを新運用ノードとして切り替える場合に、運用ノードにおいて実行中のトランザクションに関する停止処理を瞬時に完了させて、待機ノードを新運用ノードとして迅速に切り替えることが可能である点に主たる特徴がある。【００２７】
この主たる特徴について具体的に説明すると、図１に示すように、実施例１に係る完全二重化システムは、ＡＰサーバ１０とＤＢサーバ２０〜５０とを通信可能な状態で接続して構成されている。また、図には示していないが、実施例１に係る完全二重化システムは、運用ノードおよび待機ノードで完全二重化されており、一方が運用ノードとして機能する場合には、他方が待機ノードとして機能する。【００２８】
このような構成を有する完全二重化システムにおいて、運用ノードとして機能しているＤＢサーバ２０の切り替え処理部は、ＡＰサーバ１０から切り替え指示を受け付けると、他のＤＢサーバ３０〜５０に対してトランザクションの停止指示依頼を発行するとともに（図１の（１）参照）、トランザクション停止指示処理を実行する。ここで、トランザクション停止指示処理について簡単に説明すると、ＤＢサーバ２０の切り替え処理部は、トランザクション処理部が参照可能な参照メモリ内に処理停止指示状態を設定した後に、自ノードのトランザクション処理部に対してトランザクション停止指示を発行する処理を実行する。【００２９】
各ＤＢサーバ３０〜５０の切り替え処理部は、ＤＢサーバ２０からトランザクションの停止指示依頼を受け付けると、ＤＢサーバ２０と同様に、トランザクション停止指示処理を実行する（図１の（２）参照）。また、各ＤＢサーバ３０〜５０のトランザクション処理部は、切り替え処理部からトランザクション停止指示を受け付けると、トランザクション停止処理を実行する（図１の（３）参照）。また、ＤＢサーバ２０のトランザクション処理部も同様に、トランザクションを停止させる処理を実行する。【００３０】
ここで、トランザクション停止処理について簡単に説明すると、ＤＢサーバ２０のトランザクション処理部、および各ＤＢサーバ３０〜５０のトランザクション処理部は、トランザクションを構成するＳＱＬの処理属性および処理状態に応じてトランザクションを停止するか否か判断し、判断結果に応じてトランザクションを停止させる処理を実行する。【００３１】
再び、ＤＢサーバ２０に話を戻すと、ＤＢサーバ２０の切り替え処理部は、トランザクション停止指示処理を実行した後、他のＤＢサーバ３０〜５０に対してトランザクション停止確認要求を発行する。【００３２】
これに対して、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止指示処理を実行した後、トランザクション処理部においてトランザクション停止処理が完了しているか否か確認するトランザクション停止確認処理を実行する（図１の（４）参照）。そして、ＤＢサーバ２０からトランザクション停止確認要求を受け付けると、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクションの停止処理に関する完了通知をＤＢサーバ２０に発行する（図１の（５）参照）。【００３３】
再び、ＤＢサーバ２０に話を戻すと、ＤＢサーバ２０の切り替え処理部は、他のＤＢサーバ３０〜５０からトランザクションの停止処理の完了通知を全て受け付けているか否か確認し、完了通知を全て受け付けている場合には、自ノードのトランザクション処理部においてトランザクション停止処理が完了しているか否か確認する停止確認処理を実行する。そして、停止確認処理において自ノードのトランザクション停止処理が完了していることを確認すると、ＤＢサーバ２０の切り替え処理部は、更新ログを待機ノード側に全て反映することを保証するとともに、他のＤＢサーバ３０〜５０にも更新ログを待機ノード側に全て反映することを保証させる。尚、待機ノード側への反映保証などの切り替え処理部の一部を待機ノードで実行してもよい。【００３４】
更新ログの反映保証後、各ＤＢサーバ２０〜５０の切り替え処理部は、待機ノードを新運用ノードとして一斉に切り替える。【００３５】
このようなことから、実施例１に係る完全二重化システムは、運用ノードにおいて実行中のトランザクションに関する停止処理を瞬時に完了させて、待機ノードを新運用ノードとして迅速に切り替えることが可能である。【００３６】
［ＤＢサーバの構成（実施例１）］
次に、図２を用いて、実施例１に係るＤＢサーバの構成を説明する。図２は、実施例１に係るＤＢサーバの構成を示すブロック図である。【００３７】
実施例１に係る完全二重化システムは、運用ノードおよび待機ノードで完全二重化されており、実施例１に係るＤＢサーバ２０として、運用ノードにはＤＢサーバ２０（運用）が配置され、待機ノードにはＤＢサーバ２０’（待機）が配置されている。【００３８】
ＤＢサーバ２０（運用）とＤＢサーバ２０’（待機）とは同一の構成であるので、ＤＢサーバ２０（運用）について説明する。なお、図２においては、実施例１に係るＤＢサーバ２０を実現する上で必要となる処理構成部のみを記載し、その他の処理構成部については記載を省略する。【００３９】
図２に示すように、ＤＢサーバ２０は、通信制御Ｉ／Ｆ部２１およびＤＢＭＳ２２から構成される。通信制御Ｉ／Ｆ部２１は、ＡＰサーバ１０や他のＤＢサーバ３０〜５０との間でやり取りする各種情報に関する通信を制御する。【００４０】
ＤＢＭＳ２２は、所定の制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する処理部であり、特に本発明に密接に関連するものとしては、切り替え処理部２２ａと、トランザクション処理部２２ｂと、参照メモリ２２ｃとを備える。【００４１】
参照メモリ２２ｃは、切り替え処理部２２ａにより設定された処理停止指示状態と、トランザクション処理部２２ｂによりインクリメントまたはデクリメントされたトランザクション実行数とを記憶して構成される。【００４２】
切り替え処理部２２ａは、トランザクション停止指示処理およびトランザクション停止確認処理を実行する処理部である。ここで、トランザクション停止指示処理とは、トランザクション処理部２２ｂによりトランザクションの処理を停止させるための処理である。また、トランザクション停止確認処理とは、トランザクション処理部２２ｂにおいてトランザクション停止処理が完了したかどうか確認するための処理である。【００４３】
トランザクション停止指示処理の内容について具体的に説明すると、切り替え処理部２２ａは、トランザクション処理部２２ｂが参照可能な参照メモリ２２ｃ内に処理停止指示状態を設定するとともに、トランザクション処理部２２ｂに対してトランザクション停止指示を発行する。【００４４】
次に、トランザクション停止確認処理の内容について具体的に説明すると、参照メモリ２２ｃ内に記憶されているトランザクション数を確認し、トランザクション数が“０”である場合には、トランザクション停止処理が完了したものと判断する。なお、トランザクション停止処理の完了後、切り替え処理部２２ａは、更新ログを待機ノード側に全て反映することを保証する。【００４５】
なお、切り替え処理部２２ａは、自ノードがＡＰサーバ１０から切り替え指示を受け付けた場合には、他のＤＢサーバ３０〜５０に対してトランザクション停止指示依頼を発行し、自ノードがＡＰサーバ１０から切り替え指示を受け付けていない場合には、他のノードからトランザクションの停止指示依頼を受け付ける。【００４６】
トランザクション処理部２２ｂは、ＳＱＬ実行処理およびトランザクション停止処理を実行する処理部である。ここで、ＳＱＬ実行処理とは、“ＩＮＳＥＲＴ（挿入）”処理、“ＤＥＬＥＴＥ（削除）”処理および“ＵＰＤＡＴＥ（更新）”処理などがこれに該当し、トランザクション停止処理とは、トランザクションのコミット処理およびロールバック処理がこれに該当する。【００４７】
ＳＱＬ実行処理の内容について具体的に説明すると、トランザクション処理部２２ｂは、切り替え処理部２２ａからトランザクション停止指示を受け付けると、トランザクションを構成するＳＱＬの属性が更新ＳＱＬであるか否か判断する。その結果、トランザクションの属性を更新ＳＱＬであると判断した場合には、トランザクション処理部は、参照メモリ２２ｃを参照して、処理停止指示状態が設定されているか否かの検出を試みる。これとは反対に、トランザクションの属性が更新ＳＱＬではない場合には（例えば、参照ＳＱＬである場合には）、処理停止指示状態が設定されているか否かの検出を試みることなく、ＳＱＬ実行処理を継続する。【００４８】
参照メモリ２２ｃを参照して、処理停止指示状態が設定されているか否かの検出を試みた結果、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出した場合には、トランザクション処理部２２ｂは、更新ＳＱＬの処理を異常完了させる。【００４９】
一方、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出しなかった場合には、トランザクション処理部２２ｂは、更新ＳＱＬがトランザクション内で最初のＳＱＬであるか否か確認する。確認の結果、最初のＳＱＬである場合には、トランザクション実行数を参照メモリ２２ｃ内にインクリメント（＋１）した後に、更新ＳＱＬの処理を継続実行する。これとは反対に、更新ＳＱＬが最初のＳＱＬでない場合には、既にトランザクション実行数は参照メモリ２２ｃ内にインクリメントされているので、そのまま、更新ＳＱＬの処理を継続実行させる。【００５０】
次に、トランザクション停止処理の内容について具体的に説明すると、トランザクション処理部２２ｂは、更新ＳＱＬ文が正常完了することによって該当トランザクションのコミット要求を利用者から受け付けた場合には、コミット処理を行った後に、トランザクション実行数を参照メモリ内からデクリメント（−１）して、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する。すなわち、トランザクション処理部２２ｂが、コミット処理を行った後にトランザクションの実行数を参照メモリ２２ｃ内からデクリメントすることにより、コミット処理の完了を保証した状態でトランザクションの処理を停止させる趣旨である。【００５１】
一方、トランザクションの処理停止指示が設定されていることを参照メモリ２２ｃ内から検出することにより、更新ＳＱＬの処理が正常終了されなかった（つまり、異常完了された）ことを把握した利用者から、該当トランザクションのコミット要求ではなく、ロールバック要求を受け付けた場合には、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントして、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する一方で、ロールバック処理を開始する。すなわち、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントした後にロールバック処理を開始することで、ロールバック処理の実行とは無関係にトランザクションの処理を停止させる趣旨である。【００５２】
［ＤＢサーバの処理（実施例１）］
続いて、図３〜図５を用いて、実施例１に係るＤＢサーバの処理を説明する。図３は、実施例１に係る切り替え処理の流れを示すフローチャートである。図４は、実施例１に係るＳＱＬ実行処理の流れを示すフローチャートである。図５は、実施例１に係るトランザクション停止処理の流れを示すフローチャートである。【００５３】
［切り替え処理（実施例１）］
まず、図３を用いて、実施例１に係る切り替え処理の流れを説明する。なお、以下では、ＡＰサーバ１０から切り替え指示を受け付けたＤＢサーバで実行される処理を主切り替え処理として説明するとともに、他のＤＢサーバからトランザクションの停止指示依頼を受け付けたＤＢサーバで実行される処理を副切り替え処理として説明する。【００５４】
主切り替え処理から説明すると、同図に示すように、ＡＰサーバ１０から切り替え指示を受け付けると（ステップＳ１０１肯定）、ＤＢサーバ２０の切り替え処理部２２ａは、他のＤＢサーバ３０〜５０に対してトランザクションの停止指示依頼を発行するとともに（ステップＳ１０２）、トランザクション停止指示処理を実行する（ステップＳ１０３）。【００５５】
トランザクション停止指示処理を実行した後、ＤＢサーバ２０の切り替え処理部２２ａは、他のＤＢサーバ３０〜５０に対してトランザクション停止確認要求を発行する（ステップＳ１０４）。そして、切り替え処理部２２ａは、他の全ＤＢサーバ３０〜５０からトランザクションの停止処理の完了通知を全て受け付けているか否か確認する（ステップＳ１０５）。【００５６】
確認の結果、他の全ＤＢサーバ３０〜５０から完了通知を受け付けている場合には（ステップＳ１０５肯定）、ＤＢサーバ２０の切り替え処理部２２ａは、自ノードのトランザクション処理部においてトランザクション停止処理が完了しているか否か確認する停止確認処理を実行する（ステップＳ１０６）。一方、確認の結果、他の全ＤＢサーバ３０〜５０から完了通知を受け付けていない場合には（ステップＳ１０５否定）、完了通知の受付を待機する。【００５７】
そして、ＤＢサーバ２０の切り替え処理部２２ａは、停止確認処理において自ノードのトランザクション停止処理が完了していることを確認すると、ＤＢサーバ２０の切り替え処理部２２ａは、更新ログを待機ノード側に全て反映することを保証するとともに、他のＤＢサーバ３０〜５０にも更新ログを待機ノード側に全て反映することを保証させる。なお、待機ノード側への反映保証などの切り替え処理部の一部を待機ノードで実行してもよい。【００５８】
更新ログの反映保証後、各ＤＢサーバ２０〜５０の切り替え処理部は、待機ノードを新運用ノードとして一斉に切り替える（ステップＳ１０７）。【００５９】
次に、副切り替え処理について説明すると、同図に示すように、各ＤＢサーバ３０〜５０の切り替え処理部は、ＤＢサーバ２０からトランザクションの停止指示依頼を受け付けると（ステップＳ２０１）、ＤＢサーバ２０と同様に、トランザクション停止指示処理を実行する（ステップＳ２０２）。トランザクション停止指示処理を実行した後、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止処理が完了しているか否か確認するトランザクション停止確認処理を実行する（ステップＳ２０３）。【００６０】
そして、ＤＢサーバ２０からトランザクション停止確認要求を受け付けているか否か確認する（ステップＳ２０４）。確認の結果、トランザクション停止確認要求を受け付けている場合には（ステップＳ２０４肯定）、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクションの停止処理に関する完了通知をＤＢサーバ２０に発行する（ステップ２０５）。一方、確認の結果、トランザクション停止確認要求を受け付けている場合には（ステップＳ２０４否定）、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止確認要求の受付を待機する。【００６１】
［ＳＱＬ実行処理（実施例１）］
続いて、図４を用いて、実施例１に係るＳＱＬ実行処理の流れを説明する。同図に示すように、トランザクション処理部２２ｂは、切り替え処理部２２ａからトランザクション停止指示を受け付けると、トランザクションを構成するＳＱＬの属性が更新ＳＱＬであるか否か判断する（ステップＳ３０１）。その結果、トランザクションの属性を更新ＳＱＬであると判断した場合には（ステップＳ３０１肯定）、トランザクション処理部は、参照メモリを参照して、処理停止指示状態が設定されているか否か検出を試みる（ステップＳ３０２）。これとは反対に、トランザクションの属性が更新ＳＱＬではない場合には（例えば、参照ＳＱＬである場合には）（ステップＳ３０１否定）、処理停止指示状態が設定されているか否かの検出を試みることなく、ＳＱＬ実行処理を継続する。【００６２】
処理停止指示状態が設定されているか否かの検出を試みた結果、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出しなかった場合には（ステップＳ３０２否定）、トランザクション処理部２２ｂは、更新ＳＱＬがトランザクション内で最初のＳＱＬであるか否か確認する（ステップＳ３０３）。確認の結果、最初のＳＱＬである場合には（ステップＳ３０３肯定）、トランザクション実行数を参照メモリ２２ｃ内にインクリメント（＋１）した後に（ステップＳ３０４）、更新ＳＱＬの処理を継続実行させる（ステップＳ３０５）。これとは反対に、更新ＳＱＬ最初のＳＱＬでない場合には（ステップＳ３０３否定）、既にトランザクション実行数は参照メモリ２２ｃ内にインクリメントされているので、そのまま、更新ＳＱＬの処理を継続実行させる。【００６３】
ここで、ステップＳ３０２の説明に戻ると、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出した場合には（ステップＳ３０２肯定）、トランザクション処理部２２ｂは、更新ＳＱＬの処理を異常完了させる（ステップＳ３０６）。【００６４】
［トランザクション停止処理（実施例１）］
続いて、図５を用いて、実施例１に係るトランザクション停止処理の流れを説明すると、同図に示すように、トランザクション処理部２２ｂは、更新ＳＱＬ文が正常完了することによって該当トランザクションのコミット要求を利用者から受け付けた場合には（ステップＳ４０１肯定）、コミット処理を行った後に（ステップＳ４０２）、トランザクション実行数を参照メモリ内からデクリメント（−１）して（ステップＳ４０３）、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する。すなわち、トランザクション処理部２２ｂが、コミット処理を行った後にトランザクションの実行数を参照メモリ２２ｃ内からデクリメントすることにより、コミット処理の完了を保証した状態でトランザクションの処理を停止させる趣旨である。【００６５】
ここで、ステップＳ４０１の説明に戻ると、トランザクションの処理停止指示が設定されていることを参照メモリ２２ｃ内から検出することにより、更新ＳＱＬの処理が正常終了されなかった（つまり、異常完了された）ことを把握した利用者から、該当トランザクションのコミット要求ではなく、ロールバック要求を受け付けた場合には（ステップＳ４０１否定）、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントして（ステップＳ４０４）、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する一方で、ロールバック処理を開始する（ステップＳ４０５）。すなわち、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントした後にロールバック処理を開始することで、ロールバック処理の実行とは無関係にトランザクションの処理を停止させる趣旨である。【００６６】
［実施例１による効果］
上述してきたように、実施例１によれば、運用ノードのＤＢサーバに異常が発生した場合に、トランザクションの処理属性および処理状態を判断し、トランザクションの処理属性および処理状態の判断結果に応じて、運用ノードのＤＢサーバにおけるトランザクションの停止処理を実行した後に、待機ノードを新運用ノードとして切り替えるので、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。【００６７】
また、実施例１によれば、トランザクションを構成するＳＱＬの処理属性が更新であるか否か判断し、処理属性が更新であると判断した場合には、処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、処理属性が更新であって、かつ処理状態が更新トランザクションの実行中であると判断された場合には、実行中である更新トランザクションの停止処理を実行し、または、処理属性が更新であって、かつ処理状態がコミット処理の実行中であると判断された場合には、コミット処理を完了させる処理を実行し、更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに待機ノードを新運用ノードとして切り替え、または、コミット処理が完了された後に待機ノードを新運用ノードとして切り替えるので、更新トランザクションの停止処理実行に伴って実行されるロールバック処理が完了することを待つことなく、待機ノードを新運用ノードとして切り替える処理を実行することができ、待機ノードを新運用ノードとして切り替える処理を短時間で実現することが可能である。また、実行中であるトランザクションの更新処理に関するコミット処理が完了された後に、待機ノードを新運用ノードとして切り替えることができ、待機ノードを新運用ノードとして切り替える処理をコミット処理に要する一定時間で実現することが可能である。【００６８】
また、上記の実施例１では、複数のノードで構成される完全二重化システムに本発明を適用する場合を説明したが、単数のノードで構成されるシステムにも同様に本発明を適用することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。【００６９】
また、上記の実施例１では、トランザクション処理部が、トランザクションの属性を判断するとともに、トランザクション実行数をインクリメントまたはデクリメントしてトランザクション状態を管理し、切り替え処理部が、トランザクション実行数に基づいてトランザクションの停止処理完了を判断して、切り替え処理を実行する場合を説明したが、本発明はこれに限定されるものではなく、トランザクション処理部がトランザクションの属性および状態を判断して自己の振る舞いを決定することができ、切り替え処理部がトランザクション処理部の振る舞いに基づいて切り替え処理を実行することができる方法であれば、どのような方法を採用してもよい。【００７０】
また、上記の実施例１では、ＡＰサーバから切り替え指示を受け付けたＤＢサーバの一つが、他のＤＢサーバに対して停止指示依頼を発行する場合を説明したが、本発明はこれに限定されるものではなく、各ＤＢサーバがＡＰサーバから切り替え指示を受け付けて、それぞれ処理を実行するようにしてもよい。
【実施例２】
【００７１】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。【００７２】
（１）システム構成等
図２に示したＤＢサーバ２０の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ＤＢサーバ２０の分散・統合の具体的形態は図示のものに限られず、切り替え処理部２２ａとトランザクション処理部２２ｂとを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、ＤＢサーバ２０にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。【００７３】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。【００７４】
（２）切替処理プログラム
ところで、上記の実施例で説明した各種の処理（図３〜図５等参照）は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、図６を用いて、上記の実施例と同様の機能を有する切替処理プログラムを実行するコンピュータの一例を説明する。図６は、切替処理プログラムを実行するコンピュータを示す図である。【００７５】
同図に示すように、ＤＢサーバとしてコンピュータ６０は、通信制御Ｉ／Ｆ部６１、ＲＡＭ６２、ＲＯＭ６３およびＣＰＵ６４をバス７０で接続して構成される。【００７６】
そして、ＲＯＭ６３には、上記の実施例に示したＤＢサーバと同様の機能を発揮する切替処理プログラム、つまり、図６に示すように、切り替え処理プログラム６３ａおよびトランザクション処理プログラム６３ｂがあらかじめ記憶されている。なお、これらのプログラム６３ａおよび６３ｂについては、図２に示したＤＢサーバの各構成要素と同様、適宜統合または分散してもよい。なお、ＲＯＭ６３は、不揮発性の「ＲＡＭ」でもよい。【００７７】
そして、ＣＰＵ６４が、これらのプログラム６３ａおよび６３ｂをＲＯＭ６３から読み出して実行することで、図６に示すように、各プログラム６３ａおよび６３ｂは、切り替え処理プロセス６４ａおよびトランザクション処理プロセス６４ｂとして機能するようになる。なお、各プロセス６４ａおよび６４ｂは、図２に示したＤＢサーバ２０の切り替え処理部２２ａおよびトランザクション処理部２２ｂにそれぞれ対応する。【００７８】
また、ＲＡＭ６２には、ＣＰＵ６４が実行するプロセスに用いられる実行数データ６２ａおよび停止指示状態データ６２ｂがそれぞれ格納されている。なお、実行数データ６２ａおよび停止指示状態データ６２ｂは、図２に示した参照メモリ２２ｃに記憶されているトランザクション停止指示状態、およびトランザクション実行数に関するデータにそれぞれ対応する。そして、ＣＰＵ６４はＲＡＭ６２に格納された実行数データ６２ａおよび停止指示状態データ６２ｂに基づいて処理を実行する（例えば、ＲＡＭ６２に格納されたデータを直接“ＵＰＤＡＴＥ（更新）”する）。【００７９】
なお、上記した各プログラム６３ａおよび６３ｂについては、必ずしも最初からＲＯＭ６３に記憶させておく必要はなく、例えば、コンピュータ６０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ６０の内外に備えられるＨＤＤなどの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ６０に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ６０がこれらから各プログラムを読み出して実行するようにしてもよい。
【産業上の利用可能性】
【００８０】
以上のように、本発明に係る切替処理プログラム、切替処理方法および完全二重化システムは、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる場合等に有用であり、特に、運用ノードにおいて実行中のトランザクションに関する停止処理を瞬時に完了させて、待機ノードを新運用ノードとして迅速に切り替えることに適する。
【図１】
2008136107.tif 000003
【図２】
2008136107.tif 000004
【図３】
2008136107.tif 000005
【図４】
2008136107.tif 000006
【図５】
2008136107.tif 000007
【図６】
2008136107.tif 000008
【図７】
2008136107.tif 000009
【図８】
2008136107.tif 000010
【手続補正書】
【提出日】平成21年7月7日(2009.7.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラムであって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手順と、
前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手順と、
前記停止処理実行手順により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手順と、
をコンピュータに実行させることを特徴とする切替処理プログラム。
【請求項２】
前記判断手順は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、
前記停止処理実行手順は、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、
前記切替手順は、前記停止処理実行手順による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手順により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする請求項１に記載の切替処理プログラム。
【請求項３】
前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、
前記判断手順は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、
前記停止処理実行手順は、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、
前記切替手順は、前記停止処理実行手順により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする請求項１に記載の切替処理プログラム。
【請求項４】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える切替処理方法であって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断工程と、
前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行工程と、
前記停止処理実行工程により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替工程と、
を含んだことを特徴とする切替処理方法。
【請求項５】
一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムであって、
前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手段と、
前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手段と、
前記停止処理実行手段により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手段と、
を備えたことを特徴とする完全二重化システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラム、切替処理方法および完全二重化システムに関する。
【背景技術】
【０００２】
従来より、データベースの絶対的な安定稼動の維持を目的として、運用ノードと待機ノードとが完全に独立化された完全二重化システム（図７参照）が企業などにより利用されている。この完全二重化システムは、待機について起動状態を維持し、更新差分ログを用いて、運用ノード内のデータベースと待機ノード内のデータベースとの間のデータ同期を取るとともに、運用ノードと待機ノードとの間の切り替え処理を秒単位で実現する。
【０００３】
ところで、完全二重化システムのようなシステムにおける運用ノードに異常が発生した場合に、待機ノードを新運用ノードとして切り替える処理を迅速に行うための技術が開示されている（例えば、特許文献１参照）。なお、完全二重化システムでは、運用ノードに異常が検知された場合に、通常、運用ノードで実行されている処理（例えば、トランザクションの処理）を停止してから、運用ノードで実行されている処理を引き継ぐように、待機ノードを新運用ノードとして切り替える処理を実行する。
【０００４】
【特許文献１】特開２００４−３４８７０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、上記した従来の技術は、運用ノードで仕掛かり中のトランザクションから停止すべきものを利用者が選択することは非常に困難であり、一般的には全ての仕掛かり中トランザクションが完了してから切り替える方式を選択しているという背景から、待機ノードを新運用ノードとして迅速に切り替えることができない場合があるという問題点があった。
【０００６】
例えば、複数のノードで構成されている完全二重化システム（拡張性を考慮した構成を採用する完全二重化システム）において、一部の運用ノードに異常が検知された場合には、ＡＰサーバも含めて一斉に切り替える要件がある場合や、ＤＢＭＳが管理する情報の一貫性を保証する理由などから、正常な運用ノードを含めた全ての運用ノードの片系を構成する各待機ノードを、新運用ノードとしてそれぞれ切り替える必要がある（図８参照）。そして、切り替え処理を実行する前には、全ての運用ノードで実行されているトランザクションの処理を停止する必要があるので、正常な運用ノードを含めた全ての運用ノードの片系を構成する各待機ノードを、新運用ノードとして迅速にそれぞれ切り替えることができない場合があるという問題点があった。なお、トランザクションの処理を停止する方法として、従来の技術では、ＤＢＭＳのインスタンスを停止する方法が一般的に採用されるが、この方法では、ロールバック処理や異常回収などの全ての終了処理を待ち合わせる必要があり、瞬時の切り替えを実現する場合には採用できない。
【０００７】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することで、待機ノードを新運用ノードとして迅速に切り替えることが可能な切替処理プログラム、切替処理方法および完全二重化システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える処理をコンピュータに実行させる切替処理プログラムであって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手順と、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手順と、前記停止処理実行手順により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手順と、をコンピュータに実行させることを特徴とする。
【０００９】
また、本発明は、上記の発明において、前記判断手順は、前記処理属性が更新であるか否か判断し、当該処理属性が更新であると判断した場合には、前記処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、前記停止処理実行手順は、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が更新トランザクションの実行中であると判断された場合には、当該実行中である更新トランザクションの停止処理を実行し、または、前記判断手順により前記処理属性が更新であって、かつ前記処理状態が前記コミット処理の実行中であると判断された場合には、当該実行中であるコミット処理を完了させる処理を実行し、前記切替手順は、前記停止処理実行手順による前記更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに前記待機ノードを新運用ノードとして切り替え、または、前記停止処理実行手順により前記コミット処理が完了された後に前記待機ノードを新運用ノードとして切り替えることを特徴とする。
【００１０】
また、本発明は、上記の発明において、前記完全二重化システムは、前記運用ノードおよび前記待機ノードを複数含んで構成され、前記判断手順は、前記運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、前記停止処理実行手順は、前記判断手順による前記処理属性および前記処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、前記切替手順は、前記停止処理実行手順により各運用ノードにおいて前記停止処理がそれぞれ実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えることを特徴とする。
【００１１】
また、本発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムにおいて、当該運用ノードに異常が発生した場合に、当該待機ノードを新運用ノードとして切り替える切替処理方法であって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断工程と、前記判断工程による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行工程と、前記停止処理実行工程により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替工程と、を含んだことを特徴とする。
【００１２】
また、本発明は、一連の処理単位であるトランザクションの処理を実行する運用ノードと、当該運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、当該運用ノードおよび当該待機ノードが互いに独立化された完全二重化システムであって、前記運用ノードに異常が発生した場合に、当該運用ノードにおけるトランザクションの処理属性および処理状態を判断する判断手段と、前記判断手段による前記処理属性および前記処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行する停止処理実行手段と、前記停止処理実行手段により前記停止処理が実行された後に、前記待機ノードを新運用ノードとして切り替える切替手段と、を備えたことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、運用ノードに異常が発生した場合に、トランザクションの処理属性および処理状態を判断し、トランザクションの処理属性および処理状態の判断結果に応じて、運用ノードにおけるトランザクションの停止処理を実行した後に、待機ノードを新運用ノードとして切り替えるので、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。
【００１４】
また、本発明によれば、トランザクションの処理属性が更新であるか否か判断し、処理属性が更新であると判断した場合には、処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、処理属性が更新であって、かつ処理状態が更新トランザクションの実行中であると判断された場合には、実行中である更新トランザクションの停止処理を実行し、または、処理属性が更新であって、かつ処理状態がコミット処理の実行中であると判断された場合には、コミット処理を完了させる処理を実行し、更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに待機ノードを新運用ノードとして切り替え、または、コミット処理が完了された後に待機ノードを新運用ノードとして切り替えるので、更新トランザクションの停止処理実行に伴って実行されるロールバック処理が完了することを待つことなく、待機ノードを新運用ノードとして切り替える処理を実行することができ、待機ノードを新運用ノードとして切り替える処理を短時間で実現することが可能である。また、実行中であるトランザクションの更新処理に関するコミット処理が完了された後に、待機ノードを新運用ノードとして切り替えることができ、待機ノードを新運用ノードとして切り替える処理をコミット処理に要する一定時間で実現することが可能である。
【００１５】
また、本発明によれば、完全二重化システムは、運用ノードおよび待機ノードを複数含んで構成され、運用ノードのいずれかに異常が発生した場合に、各運用ノードにおいてトランザクションの処理属性および処理状態をそれぞれ判断し、処理属性および処理状態の判断結果に応じて、各運用ノードにおいてトランザクションの停止処理を実行し、各運用ノードにおいて停止処理が実行された後に、各待機ノードを新運用ノードとしてそれぞれ切り替えるので、例えば、システムが複数のノードを含んで構成されている場合であっても、各運用ノードで実行中のトランザクションに関する停止処理を瞬時に完了させることができ、各待機ノードを新運用ノードとしてそれぞれ迅速に切り替えることが可能である。
【発明を実施するための最良の形態】
【００１６】
以下に添付図面を参照して、本発明に係る切替処理プログラム、切替処理方法および完全二重化システムの実施例を詳細に説明する。なお、以下では、本発明に係る切り替え処理プログラムの一実施形態として、この切替処理プログラムを適用した完全二重化システムを例に挙げて実施例１として説明した後に、本発明に含まれる他の実施例を説明する。
【実施例１】
【００１７】
以下の実施例１では、実施例１に係る完全二重化システムの概要および特徴、この完全二重化システムに含まれるＤＢサーバの構成および処理を順に説明した後に、実施例１に係る効果を説明する。
【００１８】
［完全二重化システムの概要および特徴（実施例１）］
まず、図１を用いて、実施例１に係る完全二重化システムの概要および特徴を説明する。図１は、実施例１に係る完全二重化システムの概要および特徴を説明するための図である。
【００１９】
実施例１に係る完全二重化システムは、一連の処理単位であるトランザクションの処理を実行する運用ノードと、この運用ノードで実行されていたトランザクションの処理をリカバリするための待機ノードとを含んで構成され、運用ノードおよび待機ノードが互いに独立化されたシステムであって、運用ノードに異常が発生した場合に、待機ノードを新運用ノードとして切り替えることを概要とする。
【００２０】
そして、実施例１に係る完全二重化システムは、待機ノードを新運用ノードとして切り替える場合に、運用ノードにおいて実行中のトランザクションに関する停止処理を瞬時に完了させて、待機ノードを新運用ノードとして迅速に切り替えることが可能である点に主たる特徴がある。
【００２１】
この主たる特徴について具体的に説明すると、図１に示すように、実施例１に係る完全二重化システムは、ＡＰサーバ１０とＤＢサーバ２０〜５０とを通信可能な状態で接続して構成されている。また、図には示していないが、実施例１に係る完全二重化システムは、運用ノードおよび待機ノードで完全二重化されており、一方が運用ノードとして機能する場合には、他方が待機ノードとして機能する。
【００２２】
このような構成を有する完全二重化システムにおいて、運用ノードとして機能しているＤＢサーバ２０の切り替え処理部は、ＡＰサーバ１０から切り替え指示を受け付けると、他のＤＢサーバ３０〜５０に対してトランザクションの停止指示依頼を発行するとともに（図１の（１）参照）、トランザクション停止指示処理を実行する。ここで、トランザクション停止指示処理について簡単に説明すると、ＤＢサーバ２０の切り替え処理部は、トランザクション処理部が参照可能な参照メモリ内に処理停止指示状態を設定した後に、自ノードのトランザクション処理部に対してトランザクション停止指示を発行する処理を実行する。
【００２３】
各ＤＢサーバ３０〜５０の切り替え処理部は、ＤＢサーバ２０からトランザクションの停止指示依頼を受け付けると、ＤＢサーバ２０と同様に、トランザクション停止指示処理を実行する（図１の（２）参照）。また、各ＤＢサーバ３０〜５０のトランザクション処理部は、切り替え処理部からトランザクション停止指示を受け付けると、トランザクション停止処理を実行する（図１の（３）参照）。また、ＤＢサーバ２０のトランザクション処理部も同様に、トランザクションを停止させる処理を実行する。
【００２４】
ここで、トランザクション停止処理について簡単に説明すると、ＤＢサーバ２０のトランザクション処理部、および各ＤＢサーバ３０〜５０のトランザクション処理部は、トランザクションを構成するＳＱＬの処理属性および処理状態に応じてトランザクションを停止するか否か判断し、判断結果に応じてトランザクションを停止させる処理を実行する。
【００２５】
再び、ＤＢサーバ２０に話を戻すと、ＤＢサーバ２０の切り替え処理部は、トランザクション停止指示処理を実行した後、他のＤＢサーバ３０〜５０に対してトランザクション停止確認要求を発行する。
【００２６】
これに対して、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止指示処理を実行した後、トランザクション処理部においてトランザクション停止処理が完了しているか否か確認するトランザクション停止確認処理を実行する（図１の（４）参照）。そして、ＤＢサーバ２０からトランザクション停止確認要求を受け付けると、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクションの停止処理に関する完了通知をＤＢサーバ２０に発行する（図１の（５）参照）。
【００２７】
再び、ＤＢサーバ２０に話を戻すと、ＤＢサーバ２０の切り替え処理部は、他のＤＢサーバ３０〜５０からトランザクションの停止処理の完了通知を全て受け付けているか否か確認し、完了通知を全て受け付けている場合には、自ノードのトランザクション処理部においてトランザクション停止処理が完了しているか否か確認する停止確認処理を実行する。そして、停止確認処理において自ノードのトランザクション停止処理が完了していることを確認すると、ＤＢサーバ２０の切り替え処理部は、更新ログを待機ノード側に全て反映することを保証するとともに、他のＤＢサーバ３０〜５０にも更新ログを待機ノード側に全て反映することを保証させる。尚、待機ノード側への反映保証などの切り替え処理部の一部を待機ノードで実行してもよい。
【００２８】
更新ログの反映保証後、各ＤＢサーバ２０〜５０の切り替え処理部は、待機ノードを新運用ノードとして一斉に切り替える。
【００２９】
このようなことから、実施例１に係る完全二重化システムは、運用ノードにおいて実行中のトランザクションに関する停止処理を瞬時に完了させて、待機ノードを新運用ノードとして迅速に切り替えることが可能である。
【００３０】
［ＤＢサーバの構成（実施例１）］
次に、図２を用いて、実施例１に係るＤＢサーバの構成を説明する。図２は、実施例１に係るＤＢサーバの構成を示すブロック図である。
【００３１】
実施例１に係る完全二重化システムは、運用ノードおよび待機ノードで完全二重化されており、実施例１に係るＤＢサーバ２０として、運用ノードにはＤＢサーバ２０（運用）が配置され、待機ノードにはＤＢサーバ２０’（待機）が配置されている。
【００３２】
ＤＢサーバ２０（運用）とＤＢサーバ２０’（待機）とは同一の構成であるので、ＤＢサーバ２０（運用）について説明する。なお、図２においては、実施例１に係るＤＢサーバ２０を実現する上で必要となる処理構成部のみを記載し、その他の処理構成部については記載を省略する。
【００３３】
図２に示すように、ＤＢサーバ２０は、通信制御Ｉ／Ｆ部２１およびＤＢＭＳ２２から構成される。通信制御Ｉ／Ｆ部２１は、ＡＰサーバ１０や他のＤＢサーバ３０〜５０との間でやり取りする各種情報に関する通信を制御する。
【００３４】
ＤＢＭＳ２２は、所定の制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する処理部であり、特に本発明に密接に関連するものとしては、切り替え処理部２２ａと、トランザクション処理部２２ｂと、参照メモリ２２ｃとを備える。
【００３５】
参照メモリ２２ｃは、切り替え処理部２２ａにより設定された処理停止指示状態と、トランザクション処理部２２ｂによりインクリメントまたはデクリメントされたトランザクション実行数とを記憶して構成される。
【００３６】
切り替え処理部２２ａは、トランザクション停止指示処理およびトランザクション停止確認処理を実行する処理部である。ここで、トランザクション停止指示処理とは、トランザクション処理部２２ｂによりトランザクションの処理を停止させるための処理である。また、トランザクション停止確認処理とは、トランザクション処理部２２ｂにおいてトランザクション停止処理が完了したかどうか確認するための処理である。
【００３７】
トランザクション停止指示処理の内容について具体的に説明すると、切り替え処理部２２ａは、トランザクション処理部２２ｂが参照可能な参照メモリ２２ｃ内に処理停止指示状態を設定するとともに、トランザクション処理部２２ｂに対してトランザクション停止指示を発行する。
【００３８】
次に、トランザクション停止確認処理の内容について具体的に説明すると、参照メモリ２２ｃ内に記憶されているトランザクション数を確認し、トランザクション数が“０”である場合には、トランザクション停止処理が完了したものと判断する。なお、トランザクション停止処理の完了後、切り替え処理部２２ａは、更新ログを待機ノード側に全て反映することを保証する。
【００３９】
なお、切り替え処理部２２ａは、自ノードがＡＰサーバ１０から切り替え指示を受け付けた場合には、他のＤＢサーバ３０〜５０に対してトランザクション停止指示依頼を発行し、自ノードがＡＰサーバ１０から切り替え指示を受け付けていない場合には、他のノードからトランザクションの停止指示依頼を受け付ける。
【００４０】
トランザクション処理部２２ｂは、ＳＱＬ実行処理およびトランザクション停止処理を実行する処理部である。ここで、ＳＱＬ実行処理とは、“ＩＮＳＥＲＴ（挿入）”処理、“ＤＥＬＥＴＥ（削除）”処理および“ＵＰＤＡＴＥ（更新）”処理などがこれに該当し、トランザクション停止処理とは、トランザクションのコミット処理およびロールバック処理がこれに該当する。
【００４１】
ＳＱＬ実行処理の内容について具体的に説明すると、トランザクション処理部２２ｂは、切り替え処理部２２ａからトランザクション停止指示を受け付けると、トランザクションを構成するＳＱＬの属性が更新ＳＱＬであるか否か判断する。その結果、トランザクションの属性を更新ＳＱＬであると判断した場合には、トランザクション処理部は、参照メモリ２２ｃを参照して、処理停止指示状態が設定されているか否かの検出を試みる。これとは反対に、トランザクションの属性が更新ＳＱＬではない場合には（例えば、参照ＳＱＬである場合には）、処理停止指示状態が設定されているか否かの検出を試みることなく、ＳＱＬ実行処理を継続する。
【００４２】
参照メモリ２２ｃを参照して、処理停止指示状態が設定されているか否かの検出を試みた結果、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出した場合には、トランザクション処理部２２ｂは、更新ＳＱＬの処理を異常完了させる。
【００４３】
一方、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出しなかった場合には、トランザクション処理部２２ｂは、更新ＳＱＬがトランザクション内で最初のＳＱＬであるか否か確認する。確認の結果、最初のＳＱＬである場合には、トランザクション実行数を参照メモリ２２ｃ内にインクリメント（＋１）した後に、更新ＳＱＬの処理を継続実行する。これとは反対に、更新ＳＱＬが最初のＳＱＬでない場合には、既にトランザクション実行数は参照メモリ２２ｃ内にインクリメントされているので、そのまま、更新ＳＱＬの処理を継続実行させる。
【００４４】
次に、トランザクション停止処理の内容について具体的に説明すると、トランザクション処理部２２ｂは、更新ＳＱＬ文が正常完了することによって該当トランザクションのコミット要求を利用者から受け付けた場合には、コミット処理を行った後に、トランザクション実行数を参照メモリ内からデクリメント（−１）して、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する。すなわち、トランザクション処理部２２ｂが、コミット処理を行った後にトランザクションの実行数を参照メモリ２２ｃ内からデクリメントすることにより、コミット処理の完了を保証した状態でトランザクションの処理を停止させる趣旨である。
【００４５】
一方、トランザクションの処理停止指示が設定されていることを参照メモリ２２ｃ内から検出することにより、更新ＳＱＬの処理が正常終了されなかった（つまり、異常完了された）ことを把握した利用者から、該当トランザクションのコミット要求ではなく、ロールバック要求を受け付けた場合には、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントして、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する一方で、ロールバック処理を開始する。すなわち、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントした後にロールバック処理を開始することで、ロールバック処理の実行とは無関係にトランザクションの処理を停止させる趣旨である。
【００４６】
［ＤＢサーバの処理（実施例１）］
続いて、図３〜図５を用いて、実施例１に係るＤＢサーバの処理を説明する。図３は、実施例１に係る切り替え処理の流れを示すフローチャートである。図４は、実施例１に係るＳＱＬ実行処理の流れを示すフローチャートである。図５は、実施例１に係るトランザクション停止処理の流れを示すフローチャートである。
【００４７】
［切り替え処理（実施例１）］
まず、図３を用いて、実施例１に係る切り替え処理の流れを説明する。なお、以下では、ＡＰサーバ１０から切り替え指示を受け付けたＤＢサーバで実行される処理を主切り替え処理として説明するとともに、他のＤＢサーバからトランザクションの停止指示依頼を受け付けたＤＢサーバで実行される処理を副切り替え処理として説明する。
【００４８】
主切り替え処理から説明すると、同図に示すように、ＡＰサーバ１０から切り替え指示を受け付けると（ステップＳ１０１肯定）、ＤＢサーバ２０の切り替え処理部２２ａは、他のＤＢサーバ３０〜５０に対してトランザクションの停止指示依頼を発行するとともに（ステップＳ１０２）、トランザクション停止指示処理を実行する（ステップＳ１０３）。
【００４９】
トランザクション停止指示処理を実行した後、ＤＢサーバ２０の切り替え処理部２２ａは、他のＤＢサーバ３０〜５０に対してトランザクション停止確認要求を発行する（ステップＳ１０４）。そして、切り替え処理部２２ａは、他の全ＤＢサーバ３０〜５０からトランザクションの停止処理の完了通知を全て受け付けているか否か確認する（ステップＳ１０５）。
【００５０】
確認の結果、他の全ＤＢサーバ３０〜５０から完了通知を受け付けている場合には（ステップＳ１０５肯定）、ＤＢサーバ２０の切り替え処理部２２ａは、自ノードのトランザクション処理部においてトランザクション停止処理が完了しているか否か確認する停止確認処理を実行する（ステップＳ１０６）。一方、確認の結果、他の全ＤＢサーバ３０〜５０から完了通知を受け付けていない場合には（ステップＳ１０５否定）、完了通知の受付を待機する。
【００５１】
そして、ＤＢサーバ２０の切り替え処理部２２ａは、停止確認処理において自ノードのトランザクション停止処理が完了していることを確認すると、ＤＢサーバ２０の切り替え処理部２２ａは、更新ログを待機ノード側に全て反映することを保証するとともに、他のＤＢサーバ３０〜５０にも更新ログを待機ノード側に全て反映することを保証させる。なお、待機ノード側への反映保証などの切り替え処理部の一部を待機ノードで実行してもよい。
【００５２】
更新ログの反映保証後、各ＤＢサーバ２０〜５０の切り替え処理部は、待機ノードを新運用ノードとして一斉に切り替える（ステップＳ１０７）。
【００５３】
次に、副切り替え処理について説明すると、同図に示すように、各ＤＢサーバ３０〜５０の切り替え処理部は、ＤＢサーバ２０からトランザクションの停止指示依頼を受け付けると（ステップＳ２０１）、ＤＢサーバ２０と同様に、トランザクション停止指示処理を実行する（ステップＳ２０２）。トランザクション停止指示処理を実行した後、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止処理が完了しているか否か確認するトランザクション停止確認処理を実行する（ステップＳ２０３）。
【００５４】
そして、ＤＢサーバ２０からトランザクション停止確認要求を受け付けているか否か確認する（ステップＳ２０４）。確認の結果、トランザクション停止確認要求を受け付けている場合には（ステップＳ２０４肯定）、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクションの停止処理に関する完了通知をＤＢサーバ２０に発行する（ステップ２０５）。一方、確認の結果、トランザクション停止確認要求を受け付けている場合には（ステップＳ２０４否定）、各ＤＢサーバ３０〜５０の切り替え処理部は、トランザクション停止確認要求の受付を待機する。
【００５５】
［ＳＱＬ実行処理（実施例１）］
続いて、図４を用いて、実施例１に係るＳＱＬ実行処理の流れを説明する。同図に示すように、トランザクション処理部２２ｂは、切り替え処理部２２ａからトランザクション停止指示を受け付けると、トランザクションを構成するＳＱＬの属性が更新ＳＱＬであるか否か判断する（ステップＳ３０１）。その結果、トランザクションの属性を更新ＳＱＬであると判断した場合には（ステップＳ３０１肯定）、トランザクション処理部は、参照メモリを参照して、処理停止指示状態が設定されているか否か検出を試みる（ステップＳ３０２）。これとは反対に、トランザクションの属性が更新ＳＱＬではない場合には（例えば、参照ＳＱＬである場合には）（ステップＳ３０１否定）、処理停止指示状態が設定されているか否かの検出を試みることなく、ＳＱＬ実行処理を継続する。
【００５６】
処理停止指示状態が設定されているか否かの検出を試みた結果、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出しなかった場合には（ステップＳ３０２否定）、トランザクション処理部２２ｂは、更新ＳＱＬがトランザクション内で最初のＳＱＬであるか否か確認する（ステップＳ３０３）。確認の結果、最初のＳＱＬである場合には（ステップＳ３０３肯定）、トランザクション実行数を参照メモリ２２ｃ内にインクリメント（＋１）した後に（ステップＳ３０４）、更新ＳＱＬの処理を継続実行させる（ステップＳ３０５）。これとは反対に、更新ＳＱＬ最初のＳＱＬでない場合には（ステップＳ３０３否定）、既にトランザクション実行数は参照メモリ２２ｃ内にインクリメントされているので、そのまま、更新ＳＱＬの処理を継続実行させる。
【００５７】
ここで、ステップＳ３０２の説明に戻ると、処理停止指示状態が設定されていることを参照メモリ２２ｃ内から検出した場合には（ステップＳ３０２肯定）、トランザクション処理部２２ｂは、更新ＳＱＬの処理を異常完了させる（ステップＳ３０６）。
【００５８】
［トランザクション停止処理（実施例１）］
続いて、図５を用いて、実施例１に係るトランザクション停止処理の流れを説明すると、同図に示すように、トランザクション処理部２２ｂは、更新ＳＱＬ文が正常完了することによって該当トランザクションのコミット要求を利用者から受け付けた場合には（ステップＳ４０１肯定）、コミット処理を行った後に（ステップＳ４０２）、トランザクション実行数を参照メモリ内からデクリメント（−１）して（ステップＳ４０３）、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する。すなわち、トランザクション処理部２２ｂが、コミット処理を行った後にトランザクションの実行数を参照メモリ２２ｃ内からデクリメントすることにより、コミット処理の完了を保証した状態でトランザクションの処理を停止させる趣旨である。
【００５９】
ここで、ステップＳ４０１の説明に戻ると、トランザクションの処理停止指示が設定されていることを参照メモリ２２ｃ内から検出することにより、更新ＳＱＬの処理が正常終了されなかった（つまり、異常完了された）ことを把握した利用者から、該当トランザクションのコミット要求ではなく、ロールバック要求を受け付けた場合には（ステップＳ４０１否定）、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントして（ステップＳ４０４）、参照メモリ２２ｃ内に記憶されているトランザクション実行数を“０”にすることによりトランザクション停止処理を完了する一方で、ロールバック処理を開始する（ステップＳ４０５）。すなわち、トランザクション処理部２２ｂは、トランザクション実行数を参照メモリ２２ｃ内からデクリメントした後にロールバック処理を開始することで、ロールバック処理の実行とは無関係にトランザクションの処理を停止させる趣旨である。
【００６０】
［実施例１による効果］
上述してきたように、実施例１によれば、運用ノードのＤＢサーバに異常が発生した場合に、トランザクションの処理属性および処理状態を判断し、トランザクションの処理属性および処理状態の判断結果に応じて、運用ノードのＤＢサーバにおけるトランザクションの停止処理を実行した後に、待機ノードを新運用ノードとして切り替えるので、運用ノードで実行中のトランザクションの中から、ノード切り替え時にトランザクションの処理停止を待つ必要があるものをＤＢＭＳが自動的に選択することにより、最低限のトランザクションの停止時間を実現することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。
【００６１】
また、実施例１によれば、トランザクションを構成するＳＱＬの処理属性が更新であるか否か判断し、処理属性が更新であると判断した場合には、処理状態が更新トランザクションの実行中、または更新トランザクションに関するコミット処理の実行中のいずれに該当するか判断し、処理属性が更新であって、かつ処理状態が更新トランザクションの実行中であると判断された場合には、実行中である更新トランザクションの停止処理を実行し、または、処理属性が更新であって、かつ処理状態がコミット処理の実行中であると判断された場合には、コミット処理を完了させる処理を実行し、更新トランザクションの停止処理実行に伴ったロールバック処理の完了を待たずに待機ノードを新運用ノードとして切り替え、または、コミット処理が完了された後に待機ノードを新運用ノードとして切り替えるので、更新トランザクションの停止処理実行に伴って実行されるロールバック処理が完了することを待つことなく、待機ノードを新運用ノードとして切り替える処理を実行することができ、待機ノードを新運用ノードとして切り替える処理を短時間で実現することが可能である。また、実行中であるトランザクションの更新処理に関するコミット処理が完了された後に、待機ノードを新運用ノードとして切り替えることができ、待機ノードを新運用ノードとして切り替える処理をコミット処理に要する一定時間で実現することが可能である。
【００６２】
また、上記の実施例１では、複数のノードで構成される完全二重化システムに本発明を適用する場合を説明したが、単数のノードで構成されるシステムにも同様に本発明を適用することができ、待機ノードを新運用ノードとして迅速に切り替えることが可能である。
【００６３】
また、上記の実施例１では、トランザクション処理部が、トランザクションの属性を判断するとともに、トランザクション実行数をインクリメントまたはデクリメントしてトランザクション状態を管理し、切り替え処理部が、トランザクション実行数に基づいてトランザクションの停止処理完了を判断して、切り替え処理を実行する場合を説明したが、本発明はこれに限定されるものではなく、トランザクション処理部がトランザクションの属性および状態を判断して自己の振る舞いを決定することができ、切り替え処理部がトランザクション処理部の振る舞いに基づいて切り替え処理を実行することができる方法であれば、どのような方法を採用してもよい。
【００６４】
また、上記の実施例１では、ＡＰサーバから切り替え指示を受け付けたＤＢサーバの一つが、他のＤＢサーバに対して停止指示依頼を発行する場合を説明したが、本発明はこれに限定されるものではなく、各ＤＢサーバがＡＰサーバから切り替え指示を受け付けて、それぞれ処理を実行するようにしてもよい。
【実施例２】
【００６５】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【００６６】
（１）システム構成等
図２に示したＤＢサーバ２０の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ＤＢサーバ２０の分散・統合の具体的形態は図示のものに限られず、切り替え処理部２２ａとトランザクション処理部２２ｂとを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、ＤＢサーバ２０にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００６７】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００６８】
（２）切替処理プログラム
ところで、上記の実施例で説明した各種の処理（図３〜図５等参照）は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、図６を用いて、上記の実施例と同様の機能を有する切替処理プログラムを実行するコンピュータの一例を説明する。図６は、切替処理プログラムを実行するコンピュータを示す図である。
【００６９】
同図に示すように、ＤＢサーバとしてコンピュータ６０は、通信制御Ｉ／Ｆ部６１、ＲＡＭ６２、ＲＯＭ６３およびＣＰＵ６４をバス７０で接続して構成される。
【００７０】
そして、ＲＯＭ６３には、上記の実施例に示したＤＢサーバと同様の機能を発揮する切替処理プログラム、つまり、図６に示すように、切り替え処理プログラム６３ａおよびトランザクション処理プログラム６３ｂがあらかじめ記憶されている。なお、これらのプログラム６３ａおよび６３ｂについては、図２に示したＤＢサーバの各構成要素と同様、適宜統合または分散してもよい。なお、ＲＯＭ６３は、不揮発性の「ＲＡＭ」でもよい。
【００７１】
そして、ＣＰＵ６４が、これらのプログラム６３ａおよび６３ｂをＲＯＭ６３から読み出して実行することで、図６に示すように、各プログラム６３ａおよび６３ｂは、切り替え処理プロセス６４ａおよびトランザクション処理プロセス６４ｂとして機能するようになる。なお、各プロセス６４ａおよび６４ｂは、図２に示したＤＢサーバ２０の切り替え処理部２２ａおよびトランザクション処理部２２ｂにそれぞれ対応する。
【００７２】
また、ＲＡＭ６２には、ＣＰＵ６４が実行するプロセスに用いられる実行数データ６２ａおよび停止指示状態データ６２ｂがそれぞれ格納されている。なお、実行数データ６２ａおよび停止指示状態データ６２ｂは、図２に示した参照メモリ２２ｃに記憶されているトランザクション停止指示状態、およびトランザクション実行数に関するデータにそれぞれ対応する。そして、ＣＰＵ６４はＲＡＭ６２に格納された実行数データ６２ａおよび停止指示状態データ６２ｂに基づいて処理を実行する（例えば、ＲＡＭ６２に格納されたデータを直接“ＵＰＤＡＴＥ（更新）”する）。
【００７３】
なお、上記した各プログラム６３ａおよび６３ｂについては、必ずしも最初からＲＯＭ６３に記憶させておく必要はなく、例えば、コンピュータ６０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ６０の内外に備えられるＨＤＤなどの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ６０に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ６０がこれらから各プログラムを読み出して実行するようにしてもよい。
【図面の簡単な説明】
【００７４】
【図１】図１は、実施例１に係る完全二重化システムの概要および特徴を説明する図である。
【図２】図２は、実施例１に係るＤＢサーバの構成を示すブロック図である。
【図３】図３は、実施例１に係る切り替え処理の流れを示すフローチャートである。
【図４】図４は、実施例１に係るＳＱＬ実行処理の流れを示すフローチャートである。
【図５】図５は、実施例１に係るトランザクション停止処理の流れを示すフローチャートである。
【図６】図６は、切替制御プログラムを実行するコンピュータを示す図である。
【図７】図７は、従来技術を説明するための図である。
【図８】図８は、従来技術を説明するための図である。
【符号の説明】
【００７５】
１  ネットワーク
１０  ＡＰサーバ
２０  ＤＢサーバ（運用）
２０’  ＤＢサーバ（待機）
２１、２１’  通信制御Ｉ／Ｆ部
２２、２２’  ＤＢＭＳ
２２ａ、２２ａ’  切り替え処理部
２２ｂ、２２ｂ’  トランザクション処理部
２２ｃ、２２ｃ’  参照メモリ
３０  ＤＢサーバ（運用）
３０’  ＤＢサーバ（待機）
４０  ＤＢサーバ（運用）
４０’  ＤＢサーバ（待機）
５０  ＤＢサーバ（運用）
５０’  ＤＢサーバ（待機）
６０  コンピュータ
６１  通信制御Ｉ／Ｆ部
６２  ＲＡＭ（Random Access Memory）
６２ａ  実行数データ
６２ｂ  停止指示状態データ
６３  ＲＯＭ（Read Only Memory）
６３ａ  切り替え処理プログラム
６３ｂ  トランザクション処理プログラム
６４  ＣＰＵ（Central Processing Unit）
６４ａ  切り替え処理プロセス
６４ｂ  トランザクション処理プロセス
７０  バス
【国際調査報告】
2008136107.tif 000011
2008136107.tif 000012