(57)【要約】【課題】クライアントの要求に応じて複数のサーバのうちのあるサーバでデータを処理するトランザクションがコミットされる前にそのサーバに障害が発生した場合であっても、データの整合性を損なうことなく、トランザクションの処理を継続する。【解決手段】クライアント１０では、トランザクションログ記憶部１５が、サーバ２０に発行したＳＱＬ文をトランザクションＩＤに対応付けて記憶しておく。サーバ２０に障害が発生すると、そのトランザクションＩＤに対応するロック情報は保持された状態で、クライアント１０では、ＳＱＬ処理部１４が、トランザクションログ記憶部１５にそのトランザクションＩＤに対応付けて記憶されたＳＱＬ文を順に取り出し、同じトランザクションＩＤで再度ＳＱＬ文を発行し、サーバ２０では、ＳＱＬ処理部２４が、そのトランザクションＩＤで再度発行されたＳＱＬ文を処理する。【選択図】図６
2014038564.tif 000002
【特許請求の範囲】
【請求項１】
データベースに対する処理を要求するクライアントと、当該クライアントによる要求に応じて当該データベースに対する処理を行う複数のサーバとを含み、当該データベースに対する処理を行うシステムであって、
前記クライアントは、
自身で動作するアプリケーションから前記データベースにおけるデータを処理するＳＱＬ文を受け付けると、当該ＳＱＬ文を記憶する記憶部と、
前記複数のサーバのうちの一のサーバに特定のトランザクションとして前記ＳＱＬ文による処理を要求する処理要求部と、
前記一のサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記複数のサーバのうちの他のサーバに、当該特定のトランザクションとして、前記記憶部に記憶された前記ＳＱＬ文による再処理を要求する再処理要求部と
を含み、
前記複数のサーバのそれぞれは、
前記処理要求部による要求に応じて、前記データに前記特定のトランザクションによるロックを掛けた状態で当該データを処理する処理部と、
前記データを処理したサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記データに前記ロックを掛けたままの状態で、前記再処理要求部による要求に応じて、当該データを再処理する再処理部と
を含む、システム。
【請求項２】
前記クライアントは、前記複数のサーバの何れかに前記データベースへの接続又はトランザクションのコミットを要求したときの応答に基づいて、前記特定のトランザクションを認識する認識部を更に含む、請求項１のシステム。
【請求項３】
前記複数のサーバのそれぞれは、前記データを処理したサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、当該データに対する前記ＳＱＬ文による更新内容を示す更新情報を自身が保持していれば、当該更新情報を当該特定のトランザクションが開始される前の状態に復旧する復旧部を更に含む、請求項１又は請求項２のシステム。
【請求項４】
前記データに前記特定のトランザクションによるロックが掛けられていることを示すロック情報を、前記複数のサーバにより共有される情報として管理する共有情報管理装置を更に含む、請求項１乃至請求項３の何れかのシステム。
【請求項５】
データベースに対する処理を要求するクライアントと、当該クライアントによる要求に応じて当該データベースに対する処理を行う複数のサーバとを含むシステムにおいて、当該データベースに対する処理を行う方法であって、
前記クライアントが、自身で動作するアプリケーションから前記データベースにおけるデータを処理するＳＱＬ文を受け付けると、当該ＳＱＬ文を所定の記憶部に記憶するステップと、
前記クライアントが、前記複数のサーバのうちの一のサーバに特定のトランザクションとして前記ＳＱＬ文による処理を要求するステップと、
前記一のサーバが、前記クライアントによる処理の要求に応じて、前記データに前記特定のトランザクションによるロックを掛けた状態で当該データを処理するステップと、
前記クライアントが、前記一のサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記複数のサーバのうちの他のサーバに、当該特定のトランザクションとして、前記所定の記憶部に記憶された前記ＳＱＬ文による再処理を要求するステップと、
前記他のサーバが、前記一のサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記データに前記ロックを掛けたままの状態で、前記クライアントによる再処理の要求に応じて、当該データを処理するステップと
を含む、方法。
【請求項６】
データベースに対する処理を要求するクライアントと、当該クライアントによる要求に応じて当該データベースに対する処理を行う複数のサーバとを含むシステムにおいて、当該データベースに対する処理を行う方法であって、
前記クライアントが、前記複数のサーバのうちの一のサーバから次のトランザクションを識別する識別情報を受信するステップと、
前記クライアントが、自身で動作するアプリケーションから前記データベースにおけるデータを処理するＳＱＬ文を受け付けると、前記識別情報と当該ＳＱＬ文とを対応付けて所定の記憶部に記憶するステップと、
前記クライアントが、前記一のサーバに前記識別情報と前記ＳＱＬ文による処理要求とを送信するステップと、
前記一のサーバが、前記クライアントから前記識別情報と前記処理要求とを受信すると、前記データと当該識別情報と当該データにロックが掛けられていることを示す情報とを対応付けたロック情報が前記複数のサーバで共有される記憶領域に記憶された状態で、当該データを処理するステップと、
前記クライアントが、前記一のサーバにおいて前記データの処理がコミットされる前に障害が発生すると、前記複数のサーバのうちの他のサーバに、前記識別情報と、前記所定の記憶部に当該識別情報に対応付けて記憶された前記ＳＱＬ文による再処理要求とを送信するステップと、
前記他のサーバが、前記一のサーバにおいて前記データの処理がコミットされる前に障害が発生すると、前記ロック情報が前記記憶領域に記憶されたままの状態で、前記クライアントから前記識別情報と前記再処理要求とを受信すると、当該データを処理するステップと
を含む、方法。
【請求項７】
前記識別情報を受信するステップでは、前記一のサーバに送信した前記データベースへの接続要求に対する応答又は前記一のサーバに送信したトランザクションのコミット要求に対する応答に含まれる当該識別情報を受信する、請求項６の方法。
【請求項８】
データベースに対する処理を要求するクライアントと、当該クライアントによる要求に応じて当該データベースに対する処理を行う複数のサーバとを含むシステムにおいて、当該クライアントとして、コンピュータを機能させるプログラムであって、
前記コンピュータを、
自身で動作するアプリケーションから前記データベースにおけるデータを処理するＳＱＬ文を受け付けると、当該ＳＱＬ文を記憶する記憶部と、
前記複数のサーバのうちの一のサーバに特定のトランザクションとして前記ＳＱＬ文による処理を要求することにより、当該一のサーバが、前記データに当該特定のトランザクションによるロックを掛けた状態で当該データを処理するように制御する処理制御部と、
前記一のサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記複数のサーバのうちの他のサーバに、当該特定のトランザクションとして、前記記憶部に記憶された前記ＳＱＬ文による再処理を要求することにより、当該他のサーバが、前記データにロックを掛けたままの状態で、当該データを再処理するように制御する再処理制御部と
して機能させる、プログラム。
【請求項９】
データベースに対する処理を要求するクライアントと、当該クライアントによる要求に応じて当該データベースに対する処理を行う複数のサーバとを含むシステムにおいて、当該サーバとして、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記クライアントから特定のトランザクションとしてなされた、前記データベースにおけるデータを処理するＳＱＬ文による処理の要求に応じて、当該データに当該特定のトランザクションによるロックを掛けた状態で当該データを処理する処理部と、
前記データを処理したサーバにおいて前記特定のトランザクションがコミットされる前に障害が発生すると、前記データに前記ロックを掛けたままの状態で、前記クライアントから前記特定のトランザクションとしてなされた、前記ＳＱＬ文による再処理の要求に応じて、当該データを再処理する再処理部と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに対する処理を行うシステム及び方法に関する。特に、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含み、データベースに対する処理を行うシステム、及び、そのようなシステムにおいてデータベースに対する処理を行う方法に関する。
【背景技術】
【０００２】
クライアントから複数のサーバの何れかを使用してデータベースにアクセスするデータベースシステムが知られている。かかるデータベースシステムでは、あるサーバに障害が発生しても、他のサーバが稼働し続けるので、データベースの可用性が高まる。
ところが、複数のサーバの何れかにおいてトランザクションがコミットされる前に障害が発生すると、そのトランザクションはロールバックされてしまう。
【０００３】
このように、コミットし得なかったソフトウェア・リソースがある場合において、トランザクションを再処理依頼する技術が提案されている（例えば、特許文献１参照）。
特許文献１の技術では、トランザクションに関連した個々のソフトウェア・リソースが識別され、これらのリソースの処理が開始される。これらのリソースの処理が終了すると、それらの関連ＡＰＩは、そのソフトウェア・リソースがコミットしたこと又はコミットし得なかったことを表すメッセージ及びソフトウェア・リソースがコミットし得なかった理由を返送する。この理由に基づいて、適正なエラー解決及び回復オペレーションが遂行され、コミットし得なかったソフトウェア・リソースに対してのみトランザクションが再処理依頼される。既にコミットしたソフトウェア・リソースはそれらの状態を維持される。
【０００４】
また、クライアント・サーバ・システムにおけるデータ更新に関する技術は、公報記載の技術としても知られている（例えば、特許文献２参照）。
特許文献２は、クライアント・サーバ・システム内のオブジェクトの一貫性を保持しつつ、クライアントとサーバとの間で非同期にてキャッシュの更新動作を行い、クライアントで処理がブロックされる事態を回避し且つ通信回線の負荷を軽減し、さらにシステム全体のパフォーマンスを高める技術を開示する。この特許文献２の技術では、クライアントは自身のキャッシュ内のオブジェクトを更新した場合には、更新されたオブジェクトのＩＤとその内容をサーバに送る。クライアントは自身のオブジェクトのバージョンを０にし、他の処理を開始する。クライアントからの送信を受けて、サーバはそのＩＤのオブジェクトにサーバで更新ロックをかけ、サーバでのバージョンを最新のものにする。そして、サーバはこれには何等の応答を行わない。そして、トランザクションが承認されて終了する場合には、サーバは更新内容で自身のディスクを更新し、クライアントにサーバでのバージョンを送る。
【０００５】
更に、データベースシステム等における障害発生時の処理に関する技術も、公報記載の技術として知られている（例えば、特許文献３〜５参照）。
特許文献３は、コミットメント処理中に障害が発生した場合そのコミットメント処理を代替手段で継続する分散トランザクションの障害復旧方法を開示する。この特許文献３の方法では、トランザクションのコミットメント処理中にサーバ処理手段がダウンした場合、生存管理手段がそれを検出する。トランザクション復旧手段は、トランザクション情報管理テーブルおよびリソース情報管理テーブルを参照して、サーバ処理手段で処理中だったトランザクションを引き継ぐ。２相コミットメントＴＸ制御手段は、トランザクション情報の中にあるデータ更新状態から、データベースファイル上のデータを更新したことに対するコミットメント処理を継続する。コミットメント処理が完了すると、２相コミットメントＴＸ制御手段に通知し、トランザクション情報管理テーブル上のデータ更新状態を書き換える。
【０００６】
特許文献４は、キュー管理（ＦＩＦＯ）を行っているファイル（キューデータファイル）の障害回復に際し、バックアップファイルなしで短時間でファイルの回復を実現できるキューファイルの回復制御装置を開示する。この特許文献４の装置では、トランザクション処理の制御を行うオンライン実行制御部と、キューデータの登録・読み出しおよび処理の履歴であるジャーナルデータの取得制御を行うキューデータ登録・読み出し制御部、キューファイルの回復制御を行うキュー回復制御部、前記キューファイルにキューデータを登録・読み出ししたとき、前記キューファイルの回復ポインタを更新して格納する更新情報テーブルとを備えたキューデータ制御部と、前記キューデータ登録・読み出し制御部が登録・読み出ししたキューデータおよび前記キューデータ登録・読み出し制御部が取得したジャーナルデータをそれぞれ格納するキューファイルおよびジャーナルファイルとを備え、前記キュー回復制御部は前記更新情報テーブルおよびジャーナルファイルを用いてキューを回復制御する。
【０００７】
特許文献５は、クラスタ構成のメッセージキューイングシステムにおいて、引継ぎノードが、業務プログラムやキュー管理プログラムを再開始することなく、障害ノードが持つキューに残された滞留メッセージを引継ぎ、引継ぎノードのキューのメッセージと同一視して処理を行なえるようにする技術を開示する。この特許文献５の技術では、クラスタ構成のメッセージキューイングシステムで、あるノードに障害が発生したとき、障害ノードのキューと同じ名称のキューを持つノードが障害ノードのメッセージ処理を引継ぎ、障害ノードのメッセージを引継ぎノードのメッセージとマージする。引継ぎノードのユーザアプリケーションからメッセージの取得要求があったときは、メッセージの属するノードに応じたディスク装置からメッセージを取得する。障害ノードが復旧したときは、他ノードによる引継ぎ処理が終了していた場合、ログ情報を初期化し、キューへのアクセスを可能にする。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−４７５４号公報
【特許文献２】特開平８−１６４４４号公報
【特許文献３】特開２００５−２５０９９８号公報
【特許文献４】特開２００３−３６１９６号公報
【特許文献５】特開２００４−８６５４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、複数のサーバの何れかにおいてトランザクションがコミットされる前に障害が発生すると、そのトランザクションはロールバックされるので、ユーザは、ロールバックされたトランザクションで発行したＳＱＬ文と同じＳＱＬ文を再度発行しなければならない。
しかしながら、同じＳＱＬ文を再度発行する場合、ＳＱＬ文が対象とするデータの整合性が損なわれることがある。トランザクションがデータを更新する際にはデータにロックが掛けられるが、ロールバックによりデータのロックが解除され、同じＳＱＬ文を再度発行する前に、他のトランザクションによりそのデータが更新される場合があるからである。例えば、座席予約が順調に進んでいたが、突然エラー通知を受け、再度同じ座席を予約しようとすると、既に他の人により予約済みとなっていた、といった場合である。
尚、特許文献１〜５の技術は何れも、このような課題を解決する手段を提供するものではない。
【００１０】
本発明の目的は、クライアントの要求に応じて複数のサーバのうちのあるサーバでデータを処理するトランザクションがコミットされる前にそのサーバに障害が発生した場合であっても、データの整合性を損なうことなく、トランザクションの処理を継続することにある。
【課題を解決するための手段】
【００１１】
かかる目的のもと、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含み、データベースに対する処理を行うシステムであって、クライアントは、自身で動作するアプリケーションからデータベースにおけるデータを処理するＳＱＬ文を受け付けると、ＳＱＬ文を記憶する記憶部と、複数のサーバのうちの一のサーバに特定のトランザクションとしてＳＱＬ文による処理を要求する処理要求部と、一のサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、複数のサーバのうちの他のサーバに、特定のトランザクションとして、記憶部に記憶されたＳＱＬ文による再処理を要求する再処理要求部とを含み、複数のサーバのそれぞれは、処理要求部による要求に応じて、データに特定のトランザクションによるロックを掛けた状態でデータを処理する処理部と、データを処理したサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、データにロックを掛けたままの状態で、再処理要求部による要求に応じて、データを再処理する再処理部とを含む、システムを提供する。
【００１２】
ここで、クライアントは、複数のサーバの何れかにデータベースへの接続又はトランザクションのコミットを要求したときの応答に基づいて、特定のトランザクションを認識する認識部を更に含む、ものであってよい。
また、複数のサーバのそれぞれは、データを処理したサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、データに対するＳＱＬ文による更新内容を示す更新情報を自身が保持していれば、更新情報を特定のトランザクションが開始される前の状態に復旧する復旧部を更に含む、ものであってよい。
更に、このシステムは、データに特定のトランザクションによるロックが掛けられていることを示すロック情報を、複数のサーバにより共有される情報として管理する共有情報管理装置を更に含む、ものであってよい。
【００１３】
また、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含むシステムにおいて、データベースに対する処理を行う方法であって、クライアントが、自身で動作するアプリケーションからデータベースにおけるデータを処理するＳＱＬ文を受け付けると、ＳＱＬ文を所定の記憶部に記憶するステップと、クライアントが、複数のサーバのうちの一のサーバに特定のトランザクションとしてＳＱＬ文による処理を要求するステップと、一のサーバが、クライアントによる処理の要求に応じて、データに特定のトランザクションによるロックを掛けた状態でデータを処理するステップと、クライアントが、一のサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、複数のサーバのうちの他のサーバに、特定のトランザクションとして、所定の記憶部に記憶されたＳＱＬ文による再処理を要求するステップと、他のサーバが、一のサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、データにロックを掛けたままの状態で、クライアントによる再処理の要求に応じて、データを処理するステップとを含む、方法も提供する。
【００１４】
更に、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含むシステムにおいて、データベースに対する処理を行う方法であって、クライアントが、複数のサーバのうちの一のサーバから次のトランザクションを識別する識別情報を受信するステップと、クライアントが、自身で動作するアプリケーションからデータベースにおけるデータを処理するＳＱＬ文を受け付けると、識別情報とＳＱＬ文とを対応付けて所定の記憶部に記憶するステップと、クライアントが、一のサーバに識別情報とＳＱＬ文による処理要求とを送信するステップと、一のサーバが、クライアントから識別情報と処理要求とを受信すると、データと識別情報とデータにロックが掛けられていることを示す情報とを対応付けたロック情報が複数のサーバで共有される記憶領域に記憶された状態で、データを処理するステップと、クライアントが、一のサーバにおいてデータの処理がコミットされる前に障害が発生すると、複数のサーバのうちの他のサーバに、識別情報と、所定の記憶部に識別情報に対応付けて記憶されたＳＱＬ文による再処理要求とを送信するステップと、他のサーバが、一のサーバにおいてデータの処理がコミットされる前に障害が発生すると、ロック情報が記憶領域に記憶されたままの状態で、クライアントから識別情報と再処理要求とを受信すると、データを処理するステップとを含む、方法も提供する。
【００１５】
ここで、識別情報を受信するステップでは、一のサーバに送信したデータベースへの接続要求に対する応答又は一のサーバに送信したトランザクションのコミット要求に対する応答に含まれる識別情報を受信する、ものであってよい。
【００１６】
また、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含むシステムにおいて、クライアントとして、コンピュータを機能させるプログラムであって、コンピュータを、自身で動作するアプリケーションからデータベースにおけるデータを処理するＳＱＬ文を受け付けると、ＳＱＬ文を記憶する記憶部と、複数のサーバのうちの一のサーバに特定のトランザクションとしてＳＱＬ文による処理を要求することにより、一のサーバが、データに特定のトランザクションによるロックを掛けた状態でデータを処理するように制御する処理制御部と、一のサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、複数のサーバのうちの他のサーバに、特定のトランザクションとして、記憶部に記憶されたＳＱＬ文による再処理を要求することにより、他のサーバが、データにロックを掛けたままの状態で、データを再処理するように制御する再処理制御部として機能させる、プログラムも提供する。
【００１７】
更に、本発明は、データベースに対する処理を要求するクライアントと、クライアントによる要求に応じてデータベースに対する処理を行う複数のサーバとを含むシステムにおいて、サーバとして、コンピュータを機能させるプログラムであって、コンピュータを、クライアントから特定のトランザクションとしてなされた、データベースにおけるデータを処理するＳＱＬ文による処理の要求に応じて、データに特定のトランザクションによるロックを掛けた状態でデータを処理する処理部と、データを処理したサーバにおいて特定のトランザクションがコミットされる前に障害が発生すると、データにロックを掛けたままの状態で、クライアントから特定のトランザクションとしてなされた、ＳＱＬ文による再処理の要求に応じて、データを再処理する再処理部として機能させる、プログラムも提供する。
【発明の効果】
【００１８】
本発明によれば、クライアントの要求に応じて複数のサーバのうちのあるサーバでデータを処理するトランザクションがコミットされる前にそのサーバに障害が発生した場合であっても、データの整合性を損なうことなく、トランザクションの処理を継続することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態におけるデータベースシステムの構成例を示したブロック図である。
【図２】ページを参照する際の一般的な動作を示した図である。
【図３】ページを更新する際の一般的な動作を示した図である。
【図４】本発明の実施の形態におけるクライアント及びサーバのソフトウェア構成例を示した図である。
【図５】本発明の実施の形態におけるクライアント及びサーバのハードウェア構成例を示した図である。
【図６】本発明の実施の形態におけるクライアント及びサーバの機能構成例を示した図である。
【図７】本発明の実施の形態のクライアントアプリケーション、データベースクライアント、データベースサーバの間での処理の流れの一例を示したシーケンス図である。
【図８】本発明の実施の形態のクライアントアプリケーション、データベースクライアント、データベースサーバの間での処理の流れの一例を示したシーケンス図である。
【図９】本発明の実施の形態のクライアントアプリケーション、データベースクライアント、データベースサーバの間での処理の流れの一例を示したシーケンス図である。
【発明を実施するための形態】
【００２０】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
図１は、本実施の形態が適用されるデータベースシステムの構成例を示したブロック図である。
図示するように、データベースシステムは、クライアント１０と、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄと、共有情報管理装置３０ａ，３０ｂと、データベース４０とを含む。そして、クライアント１０と、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄとは、ネットワーク８１で接続され、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄと、共有情報管理装置３０ａ，３０ｂとは、ネットワーク８２で接続され、データベース４０は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄ及び共有情報管理装置３０ａ，３０ｂに、ネットワーク８３で接続されている。
【００２１】
クライアント１０は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄの何れかに接続し、データベース４０を操作するＳＱＬ（Structured Query Language）文を接続先に発行するコンピュータである。また、クライアント１０は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄから受け取る負荷情報に基づいて、負荷が分散するようにサーバ２０ａ，２０ｂ，２０ｃ，２０ｄのうちの接続先を決定する機能を有する。更に、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄの何れかに障害が発生した場合の接続先を、負荷情報に基づいて決定する機能も有する。或いは、クライアント１０は、明示的な指定に基づいて、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄのうちの接続先を決定するようにしてもよい。ここで、クライアント１０としては、デスクトップＰＣ（Personal Computer）、ノートＰＣ、タブレットＰＣ、ＰＤＡ（Personal Digital Assistants）、スマートフォン、携帯電話等を用いるとよい。
【００２２】
サーバ２０ａ，２０ｂ，２０ｃ，２０ｄは、データベース４０を共有しており、それぞれが、クライアント１０が発行したＳＱＬ文を用いてデータベース４０にアクセスする機能を有するコンピュータである。サーバ２０ａ，２０ｂ，２０ｃ，２０ｄは、データベース４０に対するアクセスの一貫性を提供するように連携している。尚、図では、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄを示したが、これらを区別する必要がない場合は、サーバ２０と称する。また、図には、４つのサーバ２０を示したが、２つ、３つ、或いは、５つ以上のサーバ２０を設けてもよい。
【００２３】
共有情報管理装置３０ａ，３０ｂは、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄの間で共有する情報を管理する装置である。ここで、共有する情報とは、例えば、データベース４０におけるデータのロックに関する情報（以下、「ロック情報」という）、データベースシステム内で一意であるトランザクションの識別情報（以下、「トランザクションＩＤ」という）の使用状況等である。尚、共有情報管理装置３０ａ，３０ｂは、同期二重化された装置であり、共有情報管理装置３０ａが、プライマリーの共有情報管理装置として、共有情報管理装置３０ｂが、共有情報管理装置３０ａに障害が発生した場合にセカンダリーの共有情報管理装置として、それぞれ機能する。但し、以下では、共有情報管理装置３０ａに障害は発生せず、共有情報管理装置として共有情報管理装置３０ａのみを用いるものとして説明する。
【００２４】
データベース４０は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄによって共有され、クライアント１０がＳＱＬ文を発行することによって処理する対象のデータを格納する。
【００２５】
ネットワーク８１は、クライアント１０とサーバ２０ａ，２０ｂ，２０ｃ，２０ｄとの間の情報通信に用いられる通信手段であり、例えば、インターネットである。
ネットワーク８２は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄ、共有情報管理装置３０ａ，３０ｂの相互間で高速データ通信を行うための通信手段である。ここで、ネットワーク８２としては、ＲＤＭＡ（Remote Direct Memory Access）機能を活用して各サーバ２０及び各共有情報管理装置３０のメモリに対する直接アクセスを可能としたＩｎｆｉｎｉｂａｎｄ（商標）が例示される。
ネットワーク８３は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄ、共有情報管理装置３０ａ，３０ｂと、データベース４０との間の情報通信に用いられる通信手段であり、例えば、ＳＡＮ（Storage Area Network）である。
【００２６】
まず、このようなデータベースシステムにおける一般的な動作を説明する。尚、ここでは、データベース４０に格納されたデータのキャッシュに読み込む単位を「ページ」と呼ぶ。
【００２７】
図２は、ページを参照する際の一般的な動作を示した図である。但し、この図では、図１のサーバ２０ａ，２０ｂ，２０ｃ，２０ｄのうち、サーバ２０ａ及びサーバ２０ｂのみを示し、クライアント１０は省略している。また、共有情報管理装置３０ａについては、内部の記憶領域も示している。最新データ領域３１ａは、サーバ２０ａ，２０ｂが共有する最新のデータを記憶するためのキャッシュ領域であり、複数のサーバで共有される記憶領域の一例である。ロック情報領域３２ａは、サーバ２０ａ，２０ｂが共有するロック情報を記憶する記憶領域であり、共有通信領域３３ａは、サーバ２０ａ，２０ｂが共有するメタ情報を記憶する記憶領域である。
【００２８】
さて、図では、サーバ２０ａ及びサーバ２０ｂを使用してページＡを参照する場合を例にとっている。尚、ここでは、サーバ２０ａ、サーバ２０ｂ、共有情報管理装置３０ａの何れも、ページＡを持っていないものとする。
まず、サーバ２０ａにＳＱＬ文が発行され、Ｅｍｐ＝Ｙという条件を満たすレコードが要求されている（１−１）。これにより、ページＡの取得が必要になったとする。
サーバ２０ａは、ページＡを持っていないので、共有情報管理装置３０ａの最新データ領域３１ａに対して、読出し登録要求を発行する（１−２）。すると、共有情報管理装置３０ａは、最新データ領域３１ａ内の図示しないディレクトリエントリに、サーバ２０ａがページＡを保持していることを登録する。
この場合、最新データ領域３１ａにはページＡがキャッシュされていなかったので、サーバ２０ａは、データベース４０からページＡを取得する（１−３）。
【００２９】
次に、サーバ２０ｂにも同じＳＱＬ文が発行され（１−４）、ページＡの取得が必要になったとする。
サーバ２０ｂも、ページＡを持っていないので、共有情報管理装置３０ａの最新データ領域３１ａに対して、読出し登録要求を発行する（１−５）。すると、共有情報管理装置３０ａは、最新データ領域３１ａ内の図示しないディレクトリエントリに、サーバ２０ｂがページＡを保持していることを登録する。
この場合、最新データ領域３１ａにはページＡがキャッシュされていなかったので、サーバ２０ｂは、データベース４０からページＡを取得する（１−６）。
尚、その後、サーバ２０ｂが再度ページＡを参照する場合は、サーバ２０ｂがキャッシュ上に保持するページＡを参照すればよい（１−７）。
【００３０】
図３は、ページを更新する際の一般的な動作を示した図である。但し、この図でも、図１のサーバ２０ａ，２０ｂ，２０ｃ，２０ｄのうち、サーバ２０ａ及びサーバ２０ｂのみを示し、クライアント１０は省略している。また、共有情報管理装置３０ａについては、図２と同様に内部の記憶領域も示している。
【００３１】
さて、図では、図２の動作が完了したときの状態から動作が開始するものとする。即ち、動作が開始する時点で、最新データ領域３１ａはページＡを持っておらず、サーバ２０ａ，２０ｂはキャッシュ上にページＡを保持しているものとする。
まず、サーバ２０ａにＳＱＬ文が発行され、サーバ２０ａが更新処理を実行する（２−１）。これにより、ページＡが更新され、ページＡ’になったとする。
次に、サーバ２０ａにコミットが発行され、ページＡの更新が確定したとする（２−２）。
サーバ２０ａは、共有情報管理装置３０ａの最新データ領域３１ａに対して、書込み登録要求を発行する（２−３）。すると、共有情報管理装置３０ａは、最新データ領域３１ａにページＡ’を書き込む。
これにより、共有情報管理装置３０ａは、サーバ２０ｂが保持するページＡの無効化（クロスインバリデーション）を行う（２−４）。また、このとき、共有情報管理装置３０ａは、最新データ領域３１ａ内の図示しないディレクトリエントリからサーバ２０ｂの登録を削除する。
そして、共有情報管理装置３０ａは、書込み登録要求の応答をサーバ２０ａに返す（２−５）。
これにより、サーバ２０ａは、クライアント１０（図示せず）にコミット完了の応答を返す（２−６）。
【００３２】
次に、サーバ２０ｂが再度ページＡを必要とした場合、サーバ２０ｂは、共有情報管理装置３０ａの最新データ領域３１ａに対して、改めて読出し登録要求を発行する（２−７）。すると、共有情報管理装置３０ａは、サーバ２０ｂにページＡ’を書き込む（２−８）。また同時に、最新データ領域３１ａ内の図示しないディレクトリエントリに、サーバ２０ｂがページＡ’を保持していることを登録する。
【００３３】
ところが、図３の更新動作において、サーバ２０ａでコミットが完了する前に障害が発生すると、ページＡの更新がロールバックされてしまう。そうなると、再度同じ更新をサーバ２０ｂから行おうとしても、その前に別のサーバ２０からページＡが更新されてしまう可能性がある。
そこで、本実施の形態では、データベースシステムにおけるあるサーバ２０がダウンしても、そこで実行中のトランザクションのデータに対するロック情報は保持したままにし、クライアント１０から別のサーバ２０を利用して、実行中であったトランザクションと同じトランザクションスコープで、再度、同じＳＱＬ文を発行するようにする。
より詳細には、次のような動作を行う。
第一に、クライアント１０が、発行したＳＱＬ文をログする。
第二に、各トランザクションを、トランザクションＩＤ等でクライアント１０からも識別できるようにする。
第三に、データベースシステムにおけるあるサーバ２０がダウンしても、そのサーバ２０で実行中のトランザクションのロック情報は保持し、全てのサーバ２０で共有できるようにする。
第四に、サーバ２０で障害が発生した旨を受信し、又は、サーバ２０での障害の発生を検出したクライアント１０は、別のサーバ２０を利用して、同じトランザクションＩＤで、ＳＱＬ文を再実行する。
第五に、このＳＱＬ文を受信したサーバ２０は、指定されたトランザクションＩＤで、ＳＱＬ文を処理する。
【００３４】
以下、このような概略動作を実現するデータベースシステムについて、詳細に説明する。
まず、図１のデータベースシステムにおけるソフトウェア構成について説明する。
図４は、本実施の形態のクライアント１０及びサーバ２０ａ，２０ｂ，２０ｃ，２０ｄにおけるソフトウェア構成について示した図である。
図示するように、クライアント１０は、クライアントアプリケーション５１と、データベースクライアント５２とを含む。
また、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄは、それぞれ、データベースサーバ５３ａ及び障害検出ソフトウェア５４ａ、データベースサーバ５３ｂ及び障害検出ソフトウェア５４ｂ、データベースサーバ５３ｃ及び障害検出ソフトウェア５４ｃ、データベースサーバ５３ｄ及び障害検出ソフトウェア５４ｄを含む。尚、図では、データベースサーバ５３ａ，５３ｂ，５３ｃ，５３ｄ、障害検出ソフトウェア５４ａ，５４ｂ，５４ｃ，５４ｄを示したが、これらを区別する必要がない場合は、それぞれ、データベースサーバ５３、障害検出ソフトウェア５４と称する。
【００３５】
クライアントアプリケーション５１は、ＳＱＬ文を発行する。例えば、ＳＱＬ文６１を発行したとする。
【００３６】
データベースクライアント５２は、トランザクションＩＤを取得し、クライアントアプリケーション５１からの要求に応じたＳＱＬ文を実行する。また、データベースクライアント５２は、サーバ２０ａ，２０ｂ，２０ｃ，２０ｄの障害を検出する。図では、サーバ２０ａに対してＳＱＬ文６２１を実行した時点で、サーバ２０ａに障害が発生したものとしている。すると、データベースクライアント５２は、別の正常なサーバ２０ｂに接続し、同じトランザクションＩＤを使用して、同じＳＱＬ文を実行する。その後、ＳＱＬ文６１のうち、未実行のＳＱＬを実行する。即ち、データベースクライアント５２は、サーバ２０ｂに対してＳＱＬ文６２２を実行する。
【００３７】
データベースサーバ５３は、トランザクション開始時にトランザクションＩＤをデータベースクライアント５２に返す。具体的には、データベース４０（図１参照）への接続時、トランザクションのコミット時等に、次のトランザクションＩＤを返す。また、データのロック情報は、全てのデータベースサーバ５３で共有し、障害が発生してもロックは解除しない。更に、トランザクションＩＤを指定してデータベースクライアント５２からＳＱＬ文を受けると、そのトランザクションＩＤに対応するロック情報を引き継ぐ。
尚、データベースサーバ５３は、ＳＱＬ文を発行する前に、最低限、以下の処理を行う。
即ち、発行するＳＱＬ文の実行結果が、障害により不整合な状態になっているデータにより、異なる結果となる場合、既存のリカバリ処理により、そのデータは障害が発生したトランザクションの開始時点のデータに戻し、整合性をとる。
但し、これらの処理は最低限必要な処理であり、全てのＳＱＬ文を再発行する前に、障害により不整合となった全てのデータのリカバリ処理を行ってもよい。
【００３８】
障害検出ソフトウェア５４は、自身が動作するサーバ２０におけるデータベースサーバ５３のプロセス障害又は自身が動作するサーバ２０以外の他のサーバ２０におけるハードウェア障害を検出する。具体的には、自身が動作するサーバ２０においてデータベースサーバ５３のプロセスがなくなったことを検知することにより、前者の障害を検出する。また、自身が動作するサーバ２０以外の他のサーバ２０の障害検出ソフトウェア５４からのハートビートが途絶えたことを検知することにより、後者の障害を検出する。そして、障害を検出すると、その旨を他のサーバ２０及び共有情報管理装置３０に通知し、自動的に回復処理を行う。
【００３９】
次に、クライアント１０及びサーバ２０のハードウェア構成について説明する。尚、クライアント１０及びサーバ２０は同様のハードウェア構成を有するため、ここではコンピュータ９０のハードウェア構成として説明する。
図５は、このようなコンピュータ９０のハードウェア構成例を示した図である。図示するように、コンピュータ９０は、演算手段であるＣＰＵ（Central Processing Unit）９０ａと、Ｍ／Ｂ（マザーボード）チップセット９０ｂを介してＣＰＵ９０ａに接続されたメインメモリ９０ｃと、同じくＭ／Ｂチップセット９０ｂを介してＣＰＵ９０ａに接続された表示機構９０ｄとを備える。また、Ｍ／Ｂチップセット９０ｂには、ブリッジ回路９０ｅを介して、ネットワークインターフェイス９０ｆと、磁気ディスク装置（ＨＤＤ）９０ｇと、音声機構９０ｈと、キーボード／マウス９０ｉと、フレキシブルディスクドライブ９０ｊとが接続されている。
【００４０】
尚、図５において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ９０ａとＭ／Ｂチップセット９０ｂの間や、Ｍ／Ｂチップセット９０ｂとメインメモリ９０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット９０ｂと表示機構９０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構９０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット９０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路９０ｅと接続する場合、ネットワークインターフェイス９０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置９０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス９０ｉ、及び、フレキシブルディスクドライブ９０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【００４１】
次いで、クライアント１０及びサーバ２０の機能及び動作について説明する。尚、以下の説明で、単に「ＳＱＬ文」というときは、コミット文及びロールバック文（以下、「コミット文等」という）を含まないものとする。
図６は、クライアント１０及びサーバ２０の機能構成例を示したブロック図である。図において、クライアント１０の機能としては、クライアントアプリケーション５１以外は、データベースクライアント５２により実現される機能を、サーバ２０の機能としては、データベースサーバ５３により実現される機能を示している。
まず、クライアント１０は、受送信部１１と、接続処理部１２と、トランザクションＩＤ記憶部１３と、ＳＱＬ処理部１４と、トランザクションログ記憶部１５と、障害通知受信部１６と、コミット・ロールバック処理部１８と、送受信部１９とを備えている。
【００４２】
受送信部１１は、クライアントアプリケーション５１からデータベース接続要求、ＳＱＬ文及びコミット文等を受信し、処理が終了したら結果を戻す。受送信部１１は既存技術と同じインターフェースを提供する。既存のクライアントアプリケーション５１は、この技術を修正することなく、使用することができる。既存技術では、複数のデータベース接続をクライアントアプリケーション５１が識別できるように接続ハンドルと呼ばれる識別子がデータベース接続時に割り当てられ、利用される。
【００４３】
接続処理部１２は、受送信部１１がデータベース接続要求をクライアントアプリケーション５１から受信すると、データベース接続要求をサーバ２０のデータベースサーバ５３に送信するよう送受信部１９に指示する。また、接続処理部１２は、送受信部１９がデータベース接続要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、応答に含まれる接続ハンドルと次のトランザクションＩＤ、及びデータベースサーバ５３の識別子（例えば、ＩＰアドレス）をトランザクションＩＤ記憶部１３に記憶する。そして、データベース接続要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。本実施の形態では、トランザクションを認識する認識部の一例として、接続処理部１２を設けている。
【００４４】
更に、接続処理中のサーバ２０で障害が発生した場合には、接続処理部１２は、データベース接続要求を別のサーバ２０のデータベースサーバ５３に送信するよう送受信部１９に指示する。また、この場合、接続処理部１２は、送受信部１９がデータベース接続要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、その接続ハンドルとデータベースサーバ５３の識別子とをトランザクションＩＤ記憶部１３に記憶する。そして、データベース接続要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。
更にまた、接続処理部１２は、障害が発生したサーバ２０のデータベースサーバ５３で処理している処理要求中フラグが処理要求中を示していない全てのトランザクションＩＤについて、別のサーバ２０に接続して順次ＳＱＬ文を送信する処理を障害通知受信部１６に依頼する。
【００４５】
トランザクションＩＤ記憶部１３は、接続処理部１２及びコミット・ロールバック処理部１８が出力したトランザクションＩＤ、接続ハンドル（クライアントアプリケーション５１が利用している接続ハンドル及び障害発生後は更にデータベースサーバ５３が利用している実ハンドル）、データベースサーバ５３の識別子、そのトランザクションＩＤがデータベースサーバ５３に処理を要求中であるかどうかを示す処理要求中フラグを記憶する。トランザクションＩＤ記憶部１３は、その他、接続に必要となる情報を保持してもよい。
【００４６】
ＳＱＬ処理部１４は、受送信部１１が接続ハンドルと共にＳＱＬ文をクライアントアプリケーション５１から受信すると、トランザクションＩＤ記憶部１３に記憶されたトランザクションＩＤと、このＳＱＬ文との対応をトランザクションログ記憶部１５に記憶する。同じトランザクションＩＤにおけるＳＱＬ文の発行順序も記憶する。そして、ＳＱＬ文の処理要求をサーバ２０のデータベースサーバ５３に送信するよう送受信部１９に指示する。また、ＳＱＬ処理部１４は、送受信部１９がＳＱＬ文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、ＳＱＬ文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。本実施の形態では、ＳＱＬ文による処理を要求する処理要求部、データを処理するように制御する処理制御部の一例として、ＳＱＬ処理部１４を設けている。
【００４７】
更に、処理中のサーバ２０で障害が発生した場合には、ＳＱＬ処理部１４は、トランザクションログ記憶部１５に記憶された同じトランザクションＩＤに対応する最初のＳＱＬ文の処理要求を別のサーバ２０におけるデータベースサーバ５３に送信するよう送受信部１９に指示する。また、この場合、送受信部１９がＳＱＬ文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文があれば、次のＳＱＬ文の処理要求をデータベースサーバ５３に送信するよう送受信部１９に指示し、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文がなければ、ＳＱＬ文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。障害発生後は、別のデータベースサーバ５３に接続してやり取りすることになるが、クライアントアプリケーション５１とのやり取りに使用する接続ハンドルは障害発生前と同じものを使用する。そのため、クライアントアプリケーション５１で使用する接続ハンドルと現在データベースサーバ５３で使用している実ハンドルの両方の情報を必要に応じてトランザクションＩＤ記憶部１３に記憶する。本実施の形態では、ＳＱＬ文による再処理を要求する再処理要求部、データを再処理するように制御する再処理制御部の一例としても、ＳＱＬ処理部１４を設けている。
更にまた、ＳＱＬ処理部１４は、障害が発生したサーバ２０のデータベースサーバ５３で処理している処理要求中フラグが処理要求中を示していない全てのトランザクションＩＤについて、別のサーバ２０に接続して順次ＳＱＬ文を送信する処理を障害通知受信部１６に依頼する。
【００４８】
トランザクションログ記憶部１５は、ＳＱＬ処理部１４により送られたトランザクションＩＤとＳＱＬ文との対応を記憶する。トランザクションログ記憶部１５は、その他、ＳＱＬ文を発行する際に必要となる情報を保持してもよい。本実施の形態では、ＳＱＬ文を記憶する記憶部の一例として、トランザクションログ記憶部１５を設けている。
【００４９】
障害通知受信部１６は、障害検出ソフトウェア５４等がデータベースサーバ５３の障害を検出すると、その障害の通知を受ける。また、接続処理部１２、ＳＱＬ処理部１４及びコミット・ロールバック処理部１８からもデータベースサーバ５３の障害の通知を受ける。このとき、障害通知受信部１６は、処理要求中フラグが処理要求中を示していない全てのトランザクションＩＤについて、次の処理を行う。即ち、まず、別のサーバ２０に接続し、その実ハンドルをトランザクションＩＤ記憶部１３の該当するトランザクションＩＤの実ハンドルに登録する。その後、そのトランザクションＩＤに対応する最初のＳＱＬ文の処理要求を別のサーバ２０におけるデータベースサーバ５３に送信するよう送受信部１９に指示する。また、この場合、送受信部１９がＳＱＬ文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文があれば、次のＳＱＬ文の処理要求をデータベースサーバ５３に送信するよう送受信部１９に指示し、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文がなければ、そのトランザクションＩＤに関する処理は終了とする。
【００５０】
コミット・ロールバック処理部１８は、受送信部１１がコミット文をクライアントアプリケーション５１から受信すると、コミット文の処理要求をサーバ２０のデータベースサーバ５３に送信するよう送受信部１９に指示する。また、コミット・ロールバック処理部１８は、送受信部１９がコミット文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、現在のトランザクションＩＤに関する全ての情報をトランザクションログ記憶部１５及びトランザクションＩＤ記憶部１３から削除すると共に、応答に含まれる次のトランザクションＩＤをトランザクションＩＤ記憶部１３に記憶する。そして、コミット文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。本実施の形態では、ＳＱＬ文による処理を要求する処理要求部、データを処理するように制御する処理制御部の一例として、コミット・ロールバック処理部１８を設けている。
【００５１】
更に、処理中のサーバ２０で障害が発生した場合には、コミット・ロールバック処理部１８は、トランザクションログ記憶部１５に記憶された同じトランザクションＩＤに対応する最初のＳＱＬ文の処理要求を別のサーバ２０におけるデータベースサーバ５３に送信するよう送受信部１９に指示する。また、この場合、送受信部１９がＳＱＬ文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文があれば、次のＳＱＬ文の処理要求をデータベースサーバ５３に送信するよう送受信部１９に指示し、要求が正常に処理されたことを示す戻り値が応答に含まれており、トランザクションログ記憶部１５に未送信のＳＱＬ文がなければ、コミット文の処理要求をデータベースサーバ５３に送信するよう送受信部１９に指示する。更に、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、現在のトランザクションＩＤに関する全ての情報をトランザクションログ記憶部１５及びトランザクションＩＤ記憶部１３から削除すると共に、応答に含まれる次のトランザクションＩＤをトランザクションＩＤ記憶部１３に記憶する。そして、コミット文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。本実施の形態では、ＳＱＬ文による処理を要求する処理要求部、データを処理するように制御する処理制御部の一例としても、コミット・ロールバック処理部１８を設けている。
更にまた、コミット・ロールバック処理部１８は、障害が発生したサーバ２０のデータベースサーバ５３で処理している処理要求中フラグが処理要求中を示していない全てのトランザクションＩＤについて、別のサーバ２０に接続して順次ＳＱＬ文を送信する処理を障害通知受信部１６に依頼する。
【００５２】
また、コミット・ロールバック処理部１８は、受送信部１１がロールバック文をクライアントアプリケーション５１から受信すると、ロールバック文の処理要求をサーバ２０のデータベースサーバ５３に送信するよう送受信部１９に指示する。また、コミット・ロールバック処理部１８は、送受信部１９がロールバック文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、現在のトランザクションＩＤに関する全ての情報をトランザクションログ記憶部１５及びトランザクションＩＤ記憶部１３から削除すると共に、応答に含まれる次のトランザクションＩＤをトランザクションＩＤ記憶部１３に記憶する。そして、ロールバック文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。
【００５３】
更に、ロールバック処理中のサーバ２０で障害が発生した場合には、コミット・ロールバック処理部１８は、ロールバック文の処理要求を別のサーバ２０におけるデータベースサーバ５３に送信するよう送受信部１９に指示する。また、この場合、送受信部１９がロールバック文の処理要求に対する応答をデータベースサーバ５３から受信すると、要求が正常に処理されたことを示す戻り値が応答に含まれていれば、現在のトランザクションＩＤに関する全ての情報をトランザクションログ記憶部１５及びトランザクションＩＤ記憶部１３から削除すると共に、応答に含まれる次のトランザクションＩＤをトランザクションＩＤ記憶部１３に記憶する。そして、ロールバック文の処理要求が正常に処理されたことを示す応答をクライアントアプリケーション５１に送信するよう受送信部１１に指示する。
【００５４】
尚、本実施の形態では、トランザクションを認識する認識部の一例としても、コミット・ロールバック処理部１８を設けている。
【００５５】
送受信部１９は、サーバ２０のデータベースサーバ５３にデータベース接続要求、ＳＱＬ文の処理要求及びコミット文等の処理要求を送信し、処理が終了したら結果を受信する。結果には、要求が正常に処理されたかどうかを示す戻り値が含まれ、次のトランザクションＩＤが引数として含まれることもある。
【００５６】
尚、これらの機能部は、ソフトウェアとハードウェア資源とが協働することにより実現される。具体的には、クライアント１０において、ＣＰＵ９０ａが、データベースクライアント５２のうちの受送信部１１、接続処理部１２、ＳＱＬ処理部１４、障害通知受信部１６、コミット・ロールバック処理部１８、送受信部１９を実現する部分を例えば磁気ディスク装置９０ｇからメインメモリ９０ｃに読み込んで実行することにより、これらの機能部は実現される。
また、トランザクションＩＤ記憶部１３及びトランザクションログ記憶部１５は、例えば磁気ディスク装置９０ｇにより実現される。
【００５７】
また、サーバ２０は、受送信部２１と、接続処理部２２と、トランザクションＩＤ取得部２３と、ＳＱＬ処理部２４と、ロック情報処理部２６と、更新データ情報記憶部２７と、コミット・ロールバック処理部２８と、共有情報送受信部２９とを備えている。
【００５８】
受送信部２１は、データベースクライアント５２からデータベース接続要求、ＳＱＬ文の処理要求及びコミット文等の処理要求を受信し、その処理が終了すると、その結果を戻す。
【００５９】
接続処理部２２は、受送信部２１がデータベース接続要求をデータベースクライアント５２から受信すると、データベース４０（図１参照）への接続処理を行う。そして、トランザクションＩＤ取得部２３に共有情報管理装置３０ａから未使用のトランザクションＩＤを取得させ、このトランザクションＩＤをデータベースクライアント５２に送信するよう受送信部２１に指示する。
【００６０】
トランザクションＩＤ取得部２３は、接続処理部２２又はコミット・ロールバック処理部２８からの要求に応じて、トランザクションＩＤの取得要求を共有情報管理装置３０ａに送信するよう共有情報送受信部２９に指示し、共有情報送受信部２９がトランザクションＩＤを共有情報管理装置３０ａから受信すると、このトランザクションＩＤを要求元に返す。
【００６１】
ＳＱＬ処理部２４は、受送信部２１がＳＱＬ文の処理要求をデータベースクライアント５２から受信した場合に、ロック情報処理部２６にトランザクションＩＤとロック対象のデータとを対応付けたロック情報の保持要求を出力させ、ＳＱＬ文による更新内容と更新が確定しているかを示す情報とを対応付けた更新データ情報を更新データ情報記憶部２７に記憶する。そして、ＳＱＬ文の処理要求に対する応答をデータベースクライアント５２に送信するよう受送信部２１に指示する。本実施の形態では、データを処理する処理部、データを再処理する再処理部の一例として、ＳＱＬ処理部２４を設けている。
【００６２】
ロック情報処理部２６は、ＳＱＬ処理部２４からの要求に応じて、トランザクションＩＤとロック対象のデータとを対応付けたロック情報の保持要求を共有情報管理装置３０ａに送信するよう共有情報送受信部２９に指示し、共有情報送受信部２９がロック情報を保持した旨を共有情報管理装置３０ａから受信すると、その旨をＳＱＬ処理部２４に伝える。また、ロック情報処理部２６は、コミット・ロールバック処理部２８からの要求に応じて、トランザクションＩＤに対応するロック情報の削除要求を共有情報管理装置３０ａに送信するよう共有情報送受信部２９に指示し、共有情報送受信部２９がロック情報を削除した旨を共有情報管理装置３０ａから受信すると、その旨をコミット・ロールバック処理部２８に伝える。
【００６３】
更新データ情報記憶部２７は、ＳＱＬ処理部２４により送られたＳＱＬ文による更新内容と更新が確定しているかを示す情報とを対応付けた更新データ情報を記憶する。本実施の形態では、データに対するＳＱＬ文による更新内容を示す更新情報の一例として、更新情報を用いている。
【００６４】
コミット・ロールバック処理部２８は、受送信部２１がコミット文の処理要求をデータベースクライアント５２から受信した場合に、処理要求に含まれるトランザクションＩＤに対応するロック情報の削除要求を出力させ、コミット文に対応する更新データ情報を確定させる。また、コミット・ロールバック処理部２８は、受送信部２１がロールバック文の処理要求をデータベースクライアント５２から受信した場合に、そのトランザクションの更新データを全て取り消すと共に、処理要求に含まれるトランザクションＩＤに対応するロック情報の削除要求を出力させる。
【００６５】
共有情報送受信部２９は、トランザクションＩＤ取得部２３及びロック情報処理部２６からの要求を共有情報管理装置３０ａに送信し、結果を受信する。
【００６６】
尚、これらの機能部は、ソフトウェアとハードウェア資源とが協働することにより実現される。具体的には、サーバ２０において、ＣＰＵ９０ａが、データベースサーバ５３のうちの受送信部２１、接続処理部２２、トランザクションＩＤ取得部２３、ＳＱＬ処理部２４、ロック情報処理部２６、コミット・ロールバック処理部２８、共有情報送受信部２９を実現する部分を例えば磁気ディスク装置９０ｇからメインメモリ９０ｃに読み込んで実行することにより、これらの機能部は実現される。
また、更新データ情報記憶部２７は、例えば磁気ディスク装置９０ｇにより実現される。
【００６７】
図７は、クライアントアプリケーション５１、データベースクライアント５２、データベースサーバ５３ａの間での処理の流れの一例を示したシーケンス図である。ここでは、サーバ２０ａで障害が発生しない場合について示している。
まず、クライアントアプリケーション５１は、データベース接続要求をデータベースクライアント５２に送信する（ステップ１０１）。
すると、データベースクライアント５２は、データベース接続要求をデータベースサーバ５３ａに送信する（ステップ２０１）。具体的には、受送信部１１が、データベース接続要求をクライアントアプリケーション５１から受信し、接続処理部１２が、データベース接続要求の送信を送受信部１９に指示し、送受信部１９が、データベース接続要求をデータベースサーバ５３ａに送信する。
【００６８】
これにより、データベースサーバ５３ａは、「接続ＯＫ」の応答にトランザクションＩＤ「１０」を含めてデータベースクライアント５２に送信する（ステップ２０２）。具体的には、受送信部２１が、データベース接続要求を受信し、接続処理部２２が、データベース４０への接続処理を行うと共に、トランザクションＩＤ取得部２３によりトランザクションＩＤ「１０」を取得し、データベース接続要求が正常に処理されたことを示す「接続ＯＫ」とトランザクションＩＤ「１０」とを含む応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００６９】
すると、データベースクライアント５２は、「ＯＫ」の応答を既存技術で得られた接続ハンドルと共にクライアントアプリケーション５１に送信する（ステップ１０２）。その際、データベースクライアント５２は、トランザクションＩＤ情報１３１に示すように、トランザクションＩＤ「１０」及び接続ハンドル等を保持しておく。具体的には、送受信部１９が、データベース接続要求に対する応答をデータベースサーバ５３ａから受信し、接続処理部１２が、応答に含まれるトランザクションＩＤ「１０」、接続ハンドル、実ハンドル（接続ハンドルと同じ）、データベースサーバ５３ａの識別子、処理要求中フラグの初期値（処理要求中でないことを示す「０」）をトランザクションＩＤ記憶部１３に記憶すると共に、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部１１に指示し、受送信部１１が、応答をクライアントアプリケーション５１に送信する。
【００７０】
次に、クライアントアプリケーション５１が、ＳＱＬ文「insert into t1 values (100, 200)」をデータベースクライアント５２に送信したとする（ステップ１０３）。
すると、データベースクライアント５２は、トランザクションログ１５１に示すように、このＳＱＬ文をトランザクションＩＤ「１０」の発行順「１」の行に保持する。そして、ＳＱＬ文「insert into t1 values (100, 200)」の処理要求をデータベースサーバ５３ａに送信する（ステップ２０３）。具体的には、受送信部１１が、ＳＱＬ文をクライアントアプリケーション５１から受信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを処理要求中であることを示す「１」にし、トランザクションＩＤ記憶部１３に記憶されたトランザクションＩＤと受信したＳＱＬ文とを対応付けてトランザクションログ記憶部１５に記憶すると共に、ＳＱＬ文の処理要求の送信を送受信部１９に指示し、送受信部１９が、ＳＱＬ文の処理要求をデータベースサーバ５３ａに送信する。
【００７１】
これにより、データベースサーバ５３ａは、共有情報管理装置３０ａ（図１参照）がロック情報２６１を保持するようにし、自身が更新データ情報２７１を保持するようにする。尚、ロック情報及び更新データ情報において、表ＩＤ「１」はＳＱＬ文の表「t1」を示し、行ＩＤ「１２３」はＳＱＬ文の「values (100, 200)」を挿入する行を示す。また、ロック情報の「Ｌｏｃｋ」欄の「Ｘ」は、排他ロック（eXclusive lock）が掛けられていることを意味しており、更新データ情報の「Ｄｉｒｔｙ」欄の「Ｄ」は、対応する更新がコミットされておらず未確定であることを意味する。そして、データベースサーバ５３は、「ＯＫ」の応答をデータベースクライアント５２に送信する（ステップ２０４）。具体的には、受送信部２１が、ＳＱＬ文の処理要求を受信し、ＳＱＬ処理部２４が、ロック情報処理部２６によりロック情報２６１の保持要求を共有情報管理装置３０ａに出力し、更新データ情報２７１を更新データ情報記憶部２７に記憶すると共に、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００７２】
すると、データベースクライアント５２は、「ＯＫ」の応答をクライアントアプリケーション５１に送信する（ステップ１０４）。具体的には、送受信部１９が、ＳＱＬ文の処理要求に対する応答を受信し、ＳＱＬ処理部１４が、要求が正常に処理されたことを示す「ＯＫ」応答の送信を受送信部１１に指示し、受送信部１１が、応答をクライアントアプリケーション５１に送信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「０」にする。
【００７３】
次いで、クライアントアプリケーション５１が、コミット文をデータベースクライアント５２に送信したとする（ステップ１０５）。
すると、データベースクライアント５２は、コミット文の処理要求をデータベースサーバ５３ａに送信する（ステップ２０５）。具体的には、受送信部１１が、コミット文をクライアントアプリケーション５１から受信し、コミット・ロールバック処理部１８が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「１」にすると共に、コミット文の処理要求の送信を送受信部１９に指示し、送受信部１９が、コミット文の処理要求をデータベースサーバ５３ａに送信する。
【００７４】
これにより、データベースサーバ５３ａは、自身が更新データ情報２７２を確定する。また、共有情報管理装置３０ａ（図１参照）が、このトランザクションのロック情報２６１を解放し、ロック情報２６２の状態となるようにする。そして、「ＯＫ」の応答に次のトランザクションＩＤ「１１」を含めてデータベースクライアント５２に送信する（ステップ２０６）。具体的には、受送信部２１が、コミット文の処理要求を受信し、コミット・ロールバック処理部２８が、更新データ情報記憶部２７に記憶された更新データ情報２７１を確定させると共に、ロック情報処理部２６によりロック情報２６１の解放要求を共有情報管理装置３０に出力し、要求が正常に処理されたことを示す「ＯＫ」と次のトランザクションＩＤ「１１」とを含む応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００７５】
すると、データベースクライアント５２は、トランザクションログ１５２に示すように、保持していたＳＱＬ文を削除し、トランザクションＩＤ情報１３２に示すように、トランザクションＩＤ「１１」を保持する。そして、「ＯＫ」の応答をクライアントアプリケーション５１に送信する（ステップ１０６）。具体的には、送受信部１９が、コミット文の処理要求に対する応答を受信し、コミット・ロールバック処理部１８が、トランザクションログ記憶部１５の対象のトランザクションＩＤに対応するＳＱＬ文を削除し、応答に含まれるトランザクションＩＤ「１１」をトランザクションＩＤ記憶部１３に記憶し、コミット文の処理要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部１１に指示し、受送信部１１が、応答をクライアントアプリケーション５１に送信し、コミット・ロールバック処理部１８が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「０」にする。
【００７６】
図８は、クライアントアプリケーション５１、データベースクライアント５２、データベースサーバ５３ａの間での処理の流れの一例を示したシーケンス図である。ここでは、サーバ２０ａで障害が発生する場合について示している。尚、図８の処理の流れは、図７の処理の流れに引き続いて行われることを前提とするので、処理開始時に、データベースクライアント５２は、トランザクションＩＤ情報１３３に示すように、トランザクションＩＤ「１１」を保持しているものとする。
まず、クライアントアプリケーション５１が、ＳＱＬ文「update t1 set c2=c2+50 where c1=100」をデータベースクライアント５２に送信したとする（ステップ１１１）。
すると、データベースクライアント５２は、トランザクションログ１５４に示すように、このＳＱＬ文をトランザクションＩＤ「１１」の発行順「１」の行に保持する。そして、ＳＱＬ文「update t1 set c2=c2+50 where c1=100」の処理要求をデータベースサーバ５３ａに送信する（ステップ２１１）。具体的には、受送信部１１が、ＳＱＬ文をクライアントアプリケーション５１から受信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「１」にし、トランザクションＩＤ記憶部１３に記憶されたトランザクションＩＤと受信したＳＱＬ文とを対応付けてトランザクションログ記憶部１５に記憶すると共に、ＳＱＬ文の処理要求の送信を送受信部１９に指示し、送受信部１９が、ＳＱＬ文の処理要求をデータベースサーバ５３ａに送信する。
【００７７】
これにより、データベースサーバ５３ａは、共有情報管理装置３０ａ（図１参照）がロック情報２６４を保持するようにし、自身が更新データ情報２７４を保持するようにする。そして、「ＯＫ」の応答をデータベースクライアント５２に送信する（ステップ２１２）。具体的には、受送信部２１が、ＳＱＬ文の処理要求を受信し、ＳＱＬ処理部２４が、ロック情報処理部２６によりロック情報２６４の保持要求を共有情報管理装置３０ａに出力し、更新データ情報２７４を更新データ情報記憶部２７に記憶すると共に、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００７８】
すると、データベースクライアント５２は、「ＯＫ」の応答をクライアントアプリケーション５１に送信する（ステップ１１２）。具体的には、送受信部１９が、ＳＱＬ文の処理要求に対する応答を受信し、ＳＱＬ処理部１４が、要求が正常に処理されたことを示す「ＯＫ」応答の送信を受送信部１１に指示し、受送信部１１が、応答をクライアントアプリケーション５１に送信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「０」にする。
【００７９】
次いで、クライアントアプリケーション５１が、ＳＱＬ文「insert into t1 values (120, 300)」をデータベースクライアント５２に送信したとする（ステップ１１３）。
すると、データベースクライアント５２は、トランザクションログ１５５に示すように、このＳＱＬ文をトランザクションＩＤ「１１」の発行順「２」の行に保持する。そして、ＳＱＬ文の処理要求をデータベースサーバ５３ａに送信する（ステップ２１３）。具体的には、受送信部１１が、ＳＱＬ文をクライアントアプリケーション５１から受信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「１」にし、トランザクションＩＤ記憶部１３に記憶されたトランザクションＩＤと受信したＳＱＬ文とを対応付けてトランザクションログ記憶部１５に記憶すると共に、ＳＱＬ文の処理要求の送信を送受信部１９に指示し、送受信部１９が、ＳＱＬ文の処理要求をデータベースサーバ５３ａに送信する。
【００８０】
ここで、このデータベースサーバ５３ａが動作するサーバ２０ａで障害が発生したとする。
すると、データベースサーバ５３ａは、データベースクライアント５２に障害の発生を通知する（ステップ２１４）。但し、サーバ２０ａでハードウェア障害が発生した場合等、データベースサーバ５３ａがサーバ２０ａでの障害の発生を通知できないこともある。そのような場合は、サーバ２０ａで動作する障害検出ソフトウェア５４ａからのハートビートが途絶えることにより、サーバ２０ａ以外のサーバ２０で動作する障害検出ソフトウェア５４が、サーバ２０ａでの障害の発生を検知できるので、この障害検出ソフトウェア５４がデータベースクライアント５２に障害の発生を通知してもよい。
【００８１】
図９は、クライアントアプリケーション５１、データベースクライアント５２、データベースサーバ５３ｂの間での処理の流れの一例を示したシーケンス図である。ここでは、サーバ２０ａで障害が発生したので、サーバ２０ｂを接続先とした場合について示している。
まず、図８のステップ２１４で障害の発生が通知されたが、共有情報管理装置３０ａ（図１参照）は、ロック情報２６６に示すように、図８のロック情報２６４をそのまま保持しているものとする。
また、サーバ２０ａのみが未確定の更新データ情報を保持していた場合は、その未確定の更新データ情報は、サーバ２０ａの障害により失われるため、処理は不要であるが、サーバ２０ｂも未確定の更新データ情報を保持している場合は、所定の処理を行う必要がある。尚、サーバ２０ｂが未確定の更新データ情報を保持しているという状況は、例えば、サーバ２０ｂが対象のデータを含むページをキャッシュしているような場合に生じ得る。そして、この場合は、復旧処理を行うことにより、自身が、直前のコミット済みの更新データ情報である更新データ情報２７６（図７の更新データ情報２７２と同じ）を保持するようにする。尚、この復旧処理を行う機能は、更新情報をトランザクションが開始される前の状態に復旧する復旧部の一例である。
【００８２】
さて、障害の発生が通知されると、データベースクライアント５２は、トランザクションＩＤ「１１」での接続要求をデータベースサーバ５３ｂに送信する（ステップ２２１）。具体的には、送受信部１９が、障害発生通知を例えばデータベースサーバ５３ａから受信し、接続処理部１２が、トランザクションＩＤ記憶部１３からトランザクションＩＤ「１１」を取得し、トランザクションＩＤ「１１」での接続要求の送信を送受信部１９に指示し、送受信部１９が、トランザクションＩＤ「１１」での接続要求をデータベースサーバ５３ｂに送信する。
【００８３】
これにより、データベースサーバ５３ｂは、「ＯＫ」の応答をデータベースクライアント５２に送信する（ステップ２２２）。具体的には、受送信部２１が、接続要求を受信し、接続処理部２２が、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００８４】
すると、データベースクライアント５２は、トランザクションＩＤ情報１３６に示すように、トランザクションＩＤ記憶部１３に記憶されている該当トランザクションＩＤに対する実ハンドル及び接続先のデータベースサーバ５３の識別子を更新し、トランザクションログ１５６に示すように保持されているトランザクションＩＤ「１１」に対応するＳＱＬ文を順に発行する。
即ち、まず、データベースクライアント５２は、ＳＱＬ文「update t1 set c2=c2+50 where c1=100」の処理要求をデータベースサーバ５３ｂに送信する（ステップ２２３）。具体的には、ＳＱＬ処理部１４が、トランザクションログ記憶部１５からトランザクションＩＤ「１１」の発行順「１」のＳＱＬ文を読み出し、ＳＱＬ文の処理要求の送信を送受信部１９に指示し、送受信部１９が、ＳＱＬ文の処理要求をデータベースサーバ５３ｂに送信する。
【００８５】
これにより、データベースサーバ５３ｂは、共有情報管理装置３０ａ（図１参照）がロック情報２６７を保持するようにし、自身が更新データ情報２７７を保持するようにする。そして、「ＯＫ」の応答をデータベースクライアント５２に送信する（ステップ２２４）。具体的には、受送信部２１が、ＳＱＬ文の処理要求を受信し、ＳＱＬ処理部２４が、ロック情報処理部２６によりロック情報２６７の保持要求を共有情報管理装置３０ａに出力し、更新データ情報２７７を更新データ情報記憶部２７に記憶すると共に、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。尚、ロック情報２６７の保持要求を受けた共有情報管理装置３０ａは、ロック情報２６７と同じ内容のロック情報２６６を既に保持しているので、特に処理は行わない。
【００８６】
また、データベースクライアント５２は、ＳＱＬ文「insert into t1 values (120, 300)」の処理要求をデータベースサーバ５３ｂに送信する（ステップ２２５）。具体的には、ＳＱＬ処理部１４が、トランザクションログ記憶部１５からトランザクションＩＤ「１１」の発行順「２」のＳＱＬ文を読み出し、ＳＱＬ文の処理要求の送信を送受信部１９に指示し、送受信部１９が、ＳＱＬ文の処理要求をデータベースサーバ５３ｂに送信する。
【００８７】
これにより、データベースサーバ５３ｂは、共有情報管理装置３０ａ（図１参照）がロック情報２６８を保持するようにし、自身が更新データ情報２７８を保持するようにする。そして、「ＯＫ」の応答をデータベースクライアント５２に送信する（ステップ２２６）。具体的には、受送信部２１が、ＳＱＬ文の処理要求を受信し、ＳＱＬ処理部２４が、ロック情報処理部２６によりロック情報２６８の保持要求を共有情報管理装置３０ａに出力し、更新データ情報２７８を更新データ情報記憶部２７に記憶すると共に、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部２１に指示し、受送信部２１が、応答をデータベースクライアント５２に送信する。
【００８８】
すると、データベースクライアント５２は、「ＯＫ」の応答をクライアントアプリケーション５１に送信する（ステップ１２１）。具体的には、送受信部１９が、ＳＱＬ文の処理要求に対する応答をデータベースサーバ５３から受信し、ＳＱＬ処理部１４が、トランザクションＩＤ「１１」に対応する未処理のＳＱＬ文がトランザクションログ記憶部１５に記憶されていないことを確認し、要求が正常に処理されたことを示す「ＯＫ」の応答の送信を受送信部１１に指示し、受送信部１１が、応答をクライアントアプリケーション５１に送信し、ＳＱＬ処理部１４が、トランザクションＩＤ記憶部１３の該当するトランザクションＩＤの処理要求中フラグを「０」にする。
【００８９】
以上述べたように、本実施の形態では、クライアントアプリケーション５１が発行したＳＱＬ文をデータベースクライアント５２がログしておき、あるトランザクションＩＤで処理中にサーバ２０ａがダウンした場合に、そのトランザクションＩＤに対応するロック情報は他のサーバ２０と共有可能な状態で保持したまま、データベースクライアント５２はログしておいたＳＱＬ文を同じトランザクションＩＤで再度実行するようにした。これにより、データベース４０に障害があったことをクライアントアプリケーション５１に知られることなく、クライアントアプリケーション５１が発行したＳＱＬ文の実行を継続することが可能となった。
【００９０】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００９１】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００９２】
１０…クライアント、２０…サーバ、１１，２１…受送信部、１２，２２…接続処理部、１３…トランザクションＩＤ記憶部、２３…トランザクションＩＤ取得部、１４，２４…ＳＱＬ処理部、１５…トランザクションログ記憶部、１６…障害通知受信部、２６…ロック情報処理部、２７…更新データ情報記憶部、１８，２８…コミット・ロールバック処理部、１９…送受信部、２９…共有情報送受信部、３０…共有情報管理装置、４０…データベース、５１…クライアントアプリケーション、５２…データベースクライアント、５３…データベースサーバ、５４…障害検出ソフトウェア、８１，８２，８３…ネットワーク
【図１】
2014038564.tif 000003
【図２】
2014038564.tif 000004
【図３】
2014038564.tif 000005
【図４】
2014038564.tif 000006
【図５】
2014038564.tif 000007
【図６】
2014038564.tif 000008
【図７】
2014038564.tif 000009
【図８】
2014038564.tif 000010
【図９】
2014038564.tif 000011