本発明の一実施の形態に係るシステム概要を図1に示す。例えばインターネットやLAN(Local Area Network)であるネットワーク1には、業務処理クライアント・プログラムが実行され且つ業務処理要求をネットワーク1を介してAP(Application)サーバに送信する1又は複数のクライアント端末3と、業務処理サーバ・プログラムであるユーザアプリケーション(図1では、ユーザアプリケーションa、b及びc)を実行する複数のAPサーバ5(図1では、APサーバA、APサーバB及びAPサーバC)とが接続されている。各APサーバ5は、LAN等のネットワーク7を介して相互に接続されており、さらにネットワーク7を介してDBサーバ9に接続されている。
各APサーバ5で実行されているユーザアプリケーションは、クライアント端末3からの業務処理要求に応じて自ら必要な処理を実施すると共に、互いに連携しつつ処理を実行する。例えばユーザアプリケーションaがユーザアプリケーションbやcを呼び出して処理を依頼する場合もある。また、各ユーザアプリケーションは、DBサーバ9が管理するデータベースに対する参照及び更新が必要な場合には、それぞれ対応付けられているDBアクセス部品(図1の例では、DBアクセス部品a、DBアクセス部品b、DBアクセス部品c)を利用するようになっている。
本実施の形態では、DBサーバ9は、ユーザDBAとユーザDBBを管理しており、本実施の形態のための発行SQL(Structured Query Language)ログテーブル93も併せて管理している。
図2に、DBアクセス部品の機能ブロック図を示す。DBアクセス部品は、ユーザDBAアクセス部品511と、ユーザDBBアクセス部品513と、更新SQL一括実行部品515と、業務トランザクション制御部品517とを含む。ユーザDBAアクセス部品511は、ユーザDBA用のアクセス部品であり、更新SQL発行部5111と、発行SQL待避部5113とを有する。ユーザDBBアクセス部品513は、ユーザDBB用のアクセス部品であり、更新SQL発行部5131と、発行SQL待避部5133とを有する。更新SQL一括実行部品515は、DB一括更新部5151を有する。さらに、業務トランザクション制御部品517は、ROLLBACK(ロールバック)部5171と、COMMIT(コミット)部5173とを有する。
図3に、発行SQLログテーブル93のデータ構造を示す。発行SQLログテーブル93は、発行SQL毎に、業務処理要求受信から応答返信までの一連の処理全体に対して付与されるトランザクションIDと、1の業務処理要求に応じて発行される複数の発行SQLの発行順番の管理するための発行SQLシーケンス番号と、ユーザアプリケーションからの依頼に対してDBアクセス部品が発行したSQLである発行SQLと、発行SQLが更新対象としているテーブルである更新対象テーブルと、発行SQLにおいて更新対象を特定するための抽出条件を指定する文字列である更新対象特定キーと、発行SQL発行後にDBMS(DB Management System)から返却されるコードであるSQL実行結果と、トランザクションが完了したか否かを表すフラグであるトランザクション状態とを保持する。
次に、図4乃至図12を用いて、本実施の形態の処理の概要を説明する。ここでは、クライアント端末3からの業務処理要求をAPサーバAが受信するものとする。図4に示すように、ユーザアプリケーションaは、業務処理要求を受信すると、トランザクションIDを採番すると共に、自らの業務処理を実施し、必要な場合には、ユーザアプリケーションaのユーザアプリケーションb呼出部611は、APサーバBで実行されているユーザアプリケーションbを呼び出し、処理を依頼する。この際には、トランザクションIDをAPサーバBに通知する。
次に、図5に示すように、APサーバBのユーザアプリケーションbは、呼び出されると所定の業務処理を実行すると共に、必要な場合には、DBアクセス部品bに対してユーザDBAに対するDB更新依頼を出力する。DBアクセス部品bでは、ユーザDBAに対するDB更新依頼を受け取ると、ユーザDBAアクセス部品511の更新SQL発行部5111が、DB更新依頼に応じた更新SQL文を発行し、DBサーバ9に対して送信する。DBサーバ9は、APサーバBから更新SQL文を受信すると、ユーザDBAに対して指示のとおりの更新処理を実施して、処理結果を要求元のユーザDBAアクセス部品511の更新SQL発行部5111に返信する。ユーザDBAでは、更新SQL文に応じた更新後レコード911が保持されるようになる。
その後、図6に示すように、ユーザDBAアクセス部品511の発行SQL待避部5113は、DBサーバ9に対して、図5で発行したSQL文を発行SQLログテーブル93に登録するように依頼する。DBサーバ9は、APサーバBから、発行SQLログテーブル93に対する発行SQL文の登録依頼を受信すると、当該発行SQL文を、発行SQLログテーブル93に登録する。発行SQL文は、発行SQL文931として発行SQLログテーブル93に登録される。上で述べたように、図3に示したデータ構造にて発行SQLログテーブル93に登録される。なお、この段階で、発行SQLシーケンス番号として最初を意味する「1」が登録され、トランザクション状態としては、仕掛中を表す「1」がセットされる。
さらに、図7に示すように、APサーバBのユーザアプリケーションbは、必要な場合には、DBアクセス部品bに対してユーザDBBに対するDB更新依頼を出力する。DBアクセス部品bでは、ユーザDBBに対するDB更新依頼を受け取ると、ユーザDBBアクセス部品513の更新SQL発行部5131が、DB更新依頼に応じた更新SQL文を発行し、DBサーバ9に対して送信する。DBサーバ9は、APサーバBから更新SQL文を受信すると、ユーザDBBに対して指示のとおりの更新処理を実施して、処理結果を要求元のユーザDBBアクセス部品513の更新SQL発行部5131に返信する。ユーザDBBでは、更新SQL文に応じた更新後レコード912が保持されるようになる。
その後、図8に示すように、ユーザDBBアクセス部品513の発行SQL待避部5133は、DBサーバ9に対して、図7で発行したSQL文を発行SQLログテーブル93に登録するように依頼する。DBサーバ9は、APサーバBから、発行SQLログテーブル93に対する発行SQL文の登録依頼を受信すると、当該発行SQL文を、発行SQLログテーブル93に登録する。発行SQL文は、発行SQL文932として発行SQLログテーブル93に登録される。上で述べたように、図3に示したデータ構造にて発行SQLログテーブル93に登録される。なお、この段階で、発行SQLシーケンス番号として2番目を意味する「2」が登録され、トランザクション状態としては、仕掛中を表す「1」がセットされる。
そして、図9に示すように、ユーザアプリケーションbの処理が完了すると、正常終了か異常終了かを問わずに、ユーザアプリケーションbのROLLBACK部625は、DBアクセス部品bの業務トランザクション制御部品517に対してロールバック(ROLLBACK)を要求する。業務トランザクション制御部品517のROLLBACK部5171は、ユーザアプリケーションbからの要求に応じて、ROLLBACKのためのSQL文をDBサーバ9に送信する。これによって、DBサーバ9は、ユーザDBAにおける更新後レコード911を更新前レコード911’に戻し、ユーザDBBにおける更新後レコード912を更新前レコード912’に戻す。そして、ユーザアプリケーションbは、APサーバAのユーザアプリケーションaに、処理終了を表す復帰値を返す。なお、ユーザアプリケーションbにおける処理において、エラーが発生した場合には、エラーを表す復帰値をユーザアプリケーションaに返す。
その後、図10に示すように、ユーザアプリケーションaは、ユーザアプリケーションbから復帰値を受信すると、必要な業務処理を実施し、さらに必要な場合には、ユーザアプリケーションaのユーザアプリケーションc呼出部613が、APサーバCで実行されているユーザアプリケーションcを呼び出し、処理を依頼する。この際には、トランザクションIDをAPサーバCに通知する。
APサーバCでは、APサーバBと同様の処理を実施し、ユーザDBA又はユーザDBBに対する更新が必要な場合には、ユーザアプリケーションcはDBアクセス部品cに依頼を出力する。DBアクセス部品cは、更新SQL文をDBサーバ9に送信して一旦ユーザDBA又はユーザDBBを更新させ、発行SQLログテーブル93にも更新SQL文を登録させる。そして、更新の成否を問わず、ROLLBACKを実行させユーザDBA又はユーザDBBを元の状態に戻す。そして、ユーザアプリケーションcは、処理結果として復帰値をAPサーバAのユーザアプリケーションaに返す。
APサーバAのユーザアプリケーションaで処理が完了したと判断した場合には、図11に示すように、ユーザアプリケーションaの一括COMMIT処理呼出部615は、DBアクセス部品aの更新SQL一括実行部品617のDB一括更新部6171に、DB一括更新を要求する。そうすると、更新SQL一括実行部品617のDB一括更新部6171は、DBサーバ9に対して、処理に係るトランザクションIDを含む発行SQL取得要求を送信する。DBサーバ9は、トランザクションIDを含む発行SQL取得要求を受信すると、発行SQLログテーブル93から、当該トランザクションIDに係る発行SQL文を発行SQLシーケンス番号の小さい順に読み出し、APサーバAのDBアクセス部品aに返信する。APサーバAのDBアクセス部品aにおける更新SQL一括実行部品617のDB一括更新部6171は、ユーザDBAに対する更新SQL文とユーザDBBに対する更新SQL文とをDBサーバ9から受信すると、順番にDBサーバ9に送信する。DBサーバ9は、ユーザDBAに対する更新SQL文を受信すると、ユーザDBAに対して更新SQL文に応じた更新処理を実施し、ユーザDBAに更新後レコード911を保持させる。同様に、DBサーバ9は、ユーザDBBに対する更新SQL文を受信すると、ユーザDBBに対して更新SQL文に応じた更新処理を実施し、ユーザDBBに更新後レコード912を保持させる。
DB一括更新部6171によるユーザDBA及びユーザDBBに対する更新が正常に成功した場合には、図12に示すように、DBアクセス部品aにおける業務トランザクション制御部品619のCOMMIT部6193は、DBサーバ9に対してユーザDBAに対する更新SQL文のCOMMIT用のSQL文を出力し、さらにDBサーバ9に対してユーザDBBに対する更新SQL文のCOMMIT用のSQL文を出力する。DBサーバ9は、COMMIT用のSQL文を受信すると、ユーザDBA及びユーザDBBに対する更新を確定させる。以上の処理が完了すると、業務トランザクション制御部品619のCOMMIT部6193は、DBサーバ9に対して、発行SQLログテーブル93に、処理に係るトランザクションIDに対応するレコードのトランザクション状態が処理完了を表す「0」になるように登録させる。
さらに、以上の処理が正常に完了した場合には、ユーザアプリケーションaの一括COMMIT処理呼出部615は、業務処理要求の送信元であるクライアント端末3に、応答通知を送信する。これによって、上記業務処理要求に対応する処理を終了する。なお、いずれかの段階で異常が発生した場合には、その段階で異常終了を応答として、業務処理要求の送信元であるクライアント端末3に返信する。
このような処理を実行することにより、ユーザDBに対する更新は必ずROLLBACKされ、ユーザDBに対する更新が全て正常に完了することが確認されなければ、COMMITされることはない。但し、発行SQLログテーブル93においてトランザクションID及び発行SQLシーケンス番号で更新SQL文は管理されており、ユーザDBに対する更新が全て正常に完了することが確認されれば、発行SQLログテーブル93に登録されたデータを用いて、必要な更新がユーザDBに対して行われて、COMMITされる。このような2段階の処理を実施することによって、図4乃至図12で示したようにDB更新処理を実施するプロセスやサーバが分散しているために統一的なトランザクション管理ができない場合においても、途中で異常が発生しても、そのための個別の取消処理を用意・実行することなく、ユーザDBを元の状態に戻すことができるようになる。すなわち、ユーザDBに対する確認のための更新を必ずROLLBACKすることと、後で一括して更新を行うための発行SQLログテーブル93を用意することで、上で述べたような効果を得ることができるようになる。
次に、具体的な処理内容を図13乃至図18を用いて説明する。最初に、例えばAPサーバAのユーザアプリケーションaは、クライアント端末3から、業務処理要求を受信する(ステップS1)。そうすると、ユーザアプリケーションaは、DBアクセス部品aにトランザクションID採番依頼を出力する(ステップS3)。DBアクセス部品aは、ユーザアプリケーションaからトランザクションID採番依頼を受信し(ステップS5)、トランザクションIDを発行する(ステップS7)。この際、DBアクセス部品aは、独自にトランザクションIDを発行するようにしても良いし、例えば、DBサーバ9の発行SQLログテーブル93に対して、現在の最も新しいトランザクションIDを読み出す依頼を出力し、当該現在の最も新しいトランザクションIDに応じて、今回のトランザクションIDを発行するようにしても良い。DBアクセス部品aは、今回発行されたトランザクションIDを保持しておく。
そして、DBアクセス部品aは、採番されたトランザクションIDを、ユーザアプリケーションaに出力する(ステップS9)。ユーザアプリケーションaは、DBアクセス部品aからトランザクションIDを受信し、メインメモリなどの記憶装置に保持しておく(ステップS11)。そして、ユーザアプリケーションaは、所定の業務処理を実施する(ステップS13)。この所定の業務処理においてDBサーバ9が管理するユーザDBAやユーザDBBに保持されたデータの更新が必要になると、トランザクションIDを含むDB更新依頼をDBアクセス部品aに出力する(ステップS15)。DB更新依頼は、更新SQL文そのものであってもよいし、更新SQL文を構成するために必要なデータ(更新対象テーブル名、更新対象レコードを特定するための条件節、更新内容など)を含む場合もある。
DBアクセス部品aは、ユーザアプリケーションaからトランザクションIDを含むDB更新依頼を受信すると(ステップS17)、当該DBアクセス部品a(更新対象のDB(テーブルとも呼ぶ)用のユーザDBアクセス部品の更新SQL発行部)は、排他エラーが発生しないことを確認するために、同一テーブル・同一レコードへの仕掛処理の有無を確認する依頼を、DBサーバ9に対して送信する(ステップS19)。具体的には、更新SQL文を構成するために必要なデータのうち更新対象テーブル名及び更新対象レコードを特定するための条件節を用いて、発行SQLログテーブル93を検索するように、DBサーバ9に依頼する。DBサーバ9は、発行SQLログテーブル93における更新対象テーブル及び更新対象特定キーを、受信した更新対象テーブル名及び更新対象レコードを特定するための条件節に基づき検索する。この検索結果によって、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在するか否か、そして存在する場合にはトランザクション状態が仕掛中を表す「1」であるかを判断する。判断するのはDBサーバ9でもよいし、DBアクセス部品aであってもよい。
ここで同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在しており、且つトランザクション状態が仕掛中を表している場合には、排他エラーということでこれ以上の処理を実施せず、DBアクセス部品aは、排他エラーをユーザアプリケーションaに通知する。ユーザアプリケーションaは、業務処理要求元のクライアント端末3に、エラーを通知する。
一方、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在せず、又は存在する場合であってもトランザクション状態が完了状態を表している場合には、DBアクセス部品a(ユーザDBアクセス部品の更新SQL発行部)は、さらに、DBサーバ9に対して、受信したトランザクションIDで発行SQLログテーブル93を検索するように依頼する。DBサーバ9は、トランザクションIDを含む依頼を受信し、発行SQLログテーブル93を検索し、該当するレコードの発行SQLシーケンス番号を抽出する。DBサーバ9は、例えば発行SQLシーケンス番号のうち最も大きな番号を、DBアクセス部品aに送信する。抽出された全ての発行SQLシーケンス番号をDBアクセス部品aに送信するようにしても良い。DBアクセス部品aは、例えば発行SQLシーケンス番号のうち最も大きな番号を受信すると、当該最も大きな発行SQLシーケンス番号を1インクリメントして、今回用いる発行SQLシーケンス番号を発行する(ステップS21)。
そして、DBアクセス部品a(ユーザDBアクセス部品の更新SQL発行部)は、DB更新依頼に基づく更新SQL文をDBサーバ9に対して発行する(ステップS23)。DBサーバ9は、DBアクセス部品aから更新SQL文を受信すると、更新SQL文に基づき、ユーザDBの仮の更新を実施する。なお、この際にエラーが発生することもある。エラーが発生した場合には、その旨DBアクセス部品aに通知する。
一方、更新SQL文による更新処理が正常に完了すると、DBサーバ9は、その旨DBアクセス部品aに通知する。そうすると、DBアクセス部品a(ユーザDBアクセス部品の発行SQL待避部)は、トランザクションID、発行SQLシーケンス番号、更新SQL文、更新対象テーブル名(DB名)、更新対象特定キー、SQL実行結果(成功又は失敗)、及び仕掛中を表す「1」であるトランザクション状態を含む更新SQL文の登録要求を、DBサーバ9に送信する(ステップS25)。DBサーバ9は、上で述べたような更新SQLの登録要求を受信し、発行SQLログテーブル93に登録する。そして、DBサーバ9は、処理結果をDBアクセス部品aに返信する。なお、この更新処理については、即時コミット(COMMIT)される。
DBアクセス部品aは、DBサーバ9から正常終了を表す処理結果を受信すると、正常処理終了をユーザアプリケーションaに通知する(ステップS27)。ユーザアプリケーションaは、DBアクセス部品aから正常処理終了通知を受信する(ステップS29)。処理は端子Aを介して図14の処理に移行する。
ユーザアプリケーションaは、業務処理要求に応じてAPサーバBのユーザアプリケーションbに処理を依頼しなければならない場合には、必要なデータ及びトランザクションIDを含むユーザアプリケーションb呼出を、APサーバBに送信する(ステップS31)。APサーバBのユーザアプリケーションbは、APサーバAから必要なデータ及びトランザクションIDを含むユーザアプリケーションb呼出を受信し、トランザクションIDをメインメモリなどの記憶装置に格納する(ステップS33)。
そして、ユーザアプリケーションbは、所定の業務処理を実施する(ステップS35)。この所定の業務処理においてDBサーバ9が管理するユーザDBAやユーザDBBに保持されたデータの更新が必要になると、トランザクションIDを含むDB更新依頼をDBアクセス部品bに出力する(ステップS37)。
DBアクセス部品bは、ユーザアプリケーションbからトランザクションIDを含むDB更新依頼を受信すると(ステップS39)、当該DBアクセス部品b(更新対象のDB(テーブルとも呼ぶ)用のユーザDBアクセス部品の更新SQL発行部)は、排他エラーが発生しないことを確認するために、同一テーブル・同一レコードへの仕掛処理の有無を確認する依頼を、DBサーバ9に対して送信する(ステップS41)。具体的には、更新SQL文を構成するために必要なデータのうち更新対象テーブル名及び更新対象レコードを特定するための条件節を用いて、発行SQLログテーブル93を検索するように、DBサーバ9に依頼する。DBサーバ9は、発行SQLログテーブル93における更新対象テーブル及び更新対象特定キーを、受信した更新対象テーブル名及び更新対象レコードを特定するための条件節に基づき検索する。この検索結果によって、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在するか否か、そして存在する場合にはトランザクション状態が仕掛中を表す「1」であるかを判断する。判断するのはDBサーバ9でもよいし、DBアクセス部品bであってもよい。
ここで同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在しており、且つトランザクション状態が仕掛中を表している場合には、排他エラーということでこれ以上の処理を実施せず、DBアクセス部品bは、排他エラーをユーザアプリケーションbに通知する。ユーザアプリケーションbは、呼出元のユーザアプリケーションaにエラーを通知する。
一方、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在せず、又は存在する場合であってもトランザクション状態が完了状態を表している場合には、DBアクセス部品b(ユーザDBアクセス部品の更新SLQ発行部)は、さらに、DBサーバ9に対して、受信したトランザクションIDで発行SQLログテーブル93を検索するように依頼する。DBサーバ9は、トランザクションIDを含む依頼を受信し、発行SQLログテーブル93を検索し、該当するレコードの発行SQLシーケンス番号を抽出する。DBサーバ9は、例えば発行SQLシーケンス番号のうち最も大きな番号を、DBアクセス部品bに送信する。抽出された全ての発行SQLシーケンス番号をDBアクセス部品bに出力するようにしても良い。DBアクセス部品bは、例えば発行SQLシーケンス番号のうち最も大きな番号を受信すると、当該最も大きな発行SQLシーケンス番号を1インクリメントして、今回用いる発行SQLシーケンス番号を発行する(ステップS43)。
そして、DBアクセス部品b(ユーザDBアクセス部品の更新SLQ発行部)は、DB更新依頼に基づく更新SQL文をDBサーバ9に対して発行する(ステップS45)。DBサーバ9は、DBアクセス部品bから更新SQL文を受信すると、更新SQL文に基づき、ユーザDBの仮の更新を実施する。なお、この際にエラーが発生することもある。エラーが発生した場合には、その旨DBアクセス部品bに通知する。
一方、更新SQL文による更新処理が正常に完了すると、DBサーバ9は、その旨DBアクセス部品bに通知する。そうすると、DBアクセス部品b(ユーザDBアクセス部品の発行SQL待避部)は、トランザクションID、発行SQLシーケンス番号、更新SQL文、更新対象テーブル名(DB名)、更新対象特定キー、SQL実行結果(成功又は失敗)、及び仕掛中を表す「1」であるトランザクション状態を含む更新SQL文の登録要求を、DBサーバ9に送信する(ステップS47)。DBサーバ9は、上で述べたような更新SQLの登録要求を受信し、発行SQLログテーブル93に登録する。そして、DBサーバ9は、処理結果をDBアクセス部品bに返信する。なお、この更新処理については、即時コミット(COMMIT)される。
DBアクセス部品bは、DBサーバ9から正常終了を表す処理結果を受信すると、正常な処理終了をユーザアプリケーションbに通知する(ステップS49)。ユーザアプリケーションbは、DBアクセス部品bから正常処理終了通知を受信する(ステップS51)。
そうすると、ユーザアプリケーションbのROLLBACK部625は、DBアクセス部品bにDBトランザクションロールバック(ROLLBACK)を依頼する(ステップS53)。DBアクセス部品bの業務トランザクション制御部品517におけるROLLBACK部5171は、ユーザアプリケーションbからのDBトランザクションロールバックの依頼を受信し、DBトランザクションロールバックを実施する(ステップS55)。すなわち、ステップS45でDBサーバ9に実行させたユーザDBの更新を、元の状態に戻すようにDBサーバ9に依頼する。DBサーバ9は、DBアクセス部品bの業務トランザクション制御部品517におけるROLLBACK部5171からのロールバック依頼に応じて、ユーザDBの更新を元の状態に戻す。DBサーバ9は、ロールバック完了の通知をDBアクセス部品bに送信する。DBアクセス部品bは、DBサーバ9からロールバック完了通知を受信すると、ユーザアプリケーションbにロールバック完了通知をさらに送信する。
ユーザアプリケーションbは、DBアクセス部品bからロールバック完了通知を受信すると、正常終了を、呼出元のユーザアプリケーションaに通知する(ステップS57)。呼出元のユーザアプリケーションaは、正常終了通知を、呼出先のユーザアプリケーションbから受信する(ステップS59)。処理は、端子Bを介して図15の処理に移行する。
ユーザアプリケーションaは、業務処理要求に応じてAPサーバCのユーザアプリケーションcに処理を依頼しなければならない場合には、必要なデータ及びトランザクションIDを含むユーザアプリケーションc呼出を、APサーバCに送信する(ステップS61)。APサーバCのユーザアプリケーションcは、APサーバAから必要なデータ及びトランザクションIDを含むユーザアプリケーションc呼出を受信し、トランザクションIDをメインメモリなどの記憶装置に格納する(ステップS63)。
そして、ユーザアプリケーションcは、所定の業務処理を実施する(ステップS65)。この所定の業務処理においてDBサーバ9が管理するユーザDBAやユーザDBBに保持されたデータの更新が必要になると、トランザクションIDを含むDB更新依頼をDBアクセス部品cに出力する(ステップS67)。
DBアクセス部品cは、ユーザアプリケーションcからトランザクションIDを含むDB更新依頼を受信すると(ステップS69)、当該DBアクセス部品c(更新対象のDB(テーブルとも呼ぶ)用のユーザDBアクセス部品の更新SQL発行部)は、排他エラーが発生しないことを確認するために、同一テーブル・同一レコードへの仕掛処理の有無を確認する依頼を、DBサーバ9に対して送信する(ステップS71)。具体的には、更新SQL文を構成するために必要なデータのうち更新対象テーブル名及び更新対象レコードを特定するための条件節を用いて、発行SQLログテーブル93を検索するように、DBサーバ9に依頼する。DBサーバ9は、発行SQLログテーブル93における更新対象テーブル及び更新対象特定キーを、受信した更新対象テーブル名及び更新対象レコードを特定するための条件節に基づき検索する。この検索結果によって、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在するか否か、そして存在する場合にはトランザクション状態が仕掛中を表す「1」であるかを判断する。判断するのはDBサーバ9でもよいし、DBアクセス部品cであってもよい。
ここで同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在しており、且つトランザクション状態が仕掛中を表している場合には、排他エラーということでこれ以上の処理を実施せず、DBアクセス部品cは、排他エラーをユーザアプリケーションcに通知する。ユーザアプリケーションcは、呼出元のユーザアプリケーションaにエラーを通知する。
一方、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在せず、又は存在する場合であってもトランザクション状態が完了状態を表している場合には、DBアクセス部品c(ユーザDBアクセス部品の更新SQL発行部)は、さらに、DBサーバ9に対して、受信したトランザクションIDで発行SQLログテーブル93を検索するように依頼する。DBサーバ9は、トランザクションIDを含む依頼を受信し、発行SQLログテーブル93を検索し、該当するレコードの発行SQLシーケンス番号を抽出する。DBサーバ9は、例えば発行SQLシーケンス番号のうち最も大きな番号を、DBアクセス部品cに送信する。抽出された全ての発行SQLシーケンス番号をDBアクセス部品cに送信するようにしても良い。DBアクセス部品cは、例えば発行SQLシーケンス番号のうち最も大きな番号を受信すると、当該最も大きな発行SQLシーケンス番号を1インクリメントして、今回用いる発行SQLシーケンス番号を発行する(ステップS73)。
そして、DBアクセス部品c(ユーザDBアクセス部品の更新SQL発行部)は、DB更新依頼に基づく更新SQL文をDBサーバ9に対して発行する(ステップS75)。DBサーバ9は、DBアクセス部品cから更新SQL文を受信すると、更新SQL文に基づき、ユーザDBの仮の更新を実施する。なお、この際にエラーが発生することもある。エラーが発生した場合には、その旨DBアクセス部品cに通知する。
一方、更新SQL文による更新処理が正常に完了すると、DBサーバ9は、その旨DBアクセス部品cに通知する。そうすると、DBアクセス部品c(ユーザDBアクセス部品の発行SQL待避部)は、トランザクションID、発行SQLシーケンス番号、更新SQL文、更新対象テーブル名(DB名)、更新対象特定キー、SQL実行結果(成功又は失敗)、及び仕掛中を表す「1」であるトランザクション状態を含む更新SQL文の登録要求を、DBサーバ9に送信する(ステップS77)。DBサーバ9は、上で述べたような更新SQLの登録要求を受信し、発行SQLログテーブル93に登録する。そして、DBサーバ9は、処理結果をDBアクセス部品cに返信する。なお、この更新処理については、即時コミット(COMMIT)される。
DBアクセス部品cは、DBサーバ9から正常終了を表す処理結果を受信すると、正常な処理終了をユーザアプリケーションcに通知する(ステップS79)。ユーザアプリケーションcは、DBアクセス部品cから正常処理終了通知を受信する(ステップS81)。
そうすると、ユーザアプリケーションcのROLLBACK部は、DBアクセス部品cにDBトランザクションロールバック(ROLLBACK)を依頼する(ステップS83)。DBアクセス部品cの業務トランザクション制御部品におけるROLLBACK部は、ユーザアプリケーションcからのDBトランザクションロールバックの依頼を受信し、DBトランザクションロールバックを実施する(ステップS85)。すなわち、ステップS75でDBサーバ9に実行させたユーザDBの更新を、取り消して元の状態に戻すようにDBサーバ9に依頼する。DBサーバ9は、DBアクセス部品cの業務トランザクション制御部品におけるROLLBACK部からのロールバック依頼に応じて、ユーザDBの更新を取り消して元の状態に戻す。DBサーバ9は、ロールバック完了の通知をDBアクセス部品cに送信する。DBアクセス部品cは、DBサーバ9からロールバック完了通知を受信すると、ユーザアプリケーションcにロールバック完了通知をさらに送信する。
ユーザアプリケーションcは、DBアクセス部品cからロールバック完了通知を受信すると、正常終了を、呼出元のユーザアプリケーションaに通知する(ステップS87)。呼出元のユーザアプリケーションaは、正常終了通知を、呼出先のユーザアプリケーションcから受信する(ステップS89)。処理は、端子Dを介して図16の処理に移行する。
ユーザアプリケーションaは、これまでの処理結果に基づき所定の業務処理を実施する(ステップS91)。そして所定の業務処理が完了すると、ユーザアプリケーションaのROLLBACK部は、DBアクセス部品aにDBトランザクションロールバック(ROLLBACK)を依頼する(ステップS93)。DBアクセス部品aの業務トランザクション制御部品619におけるROLLBACK部6191は、ユーザアプリケーションaからのDBトランザクションロールバックの依頼を受信し、DBトランザクションロールバックを実施する(ステップS95)。すなわち、ステップS23でDBサーバ9に実行させたユーザDBの更新を、取り消して元の状態に戻すようにDBサーバ9に依頼する。DBサーバ9は、DBアクセス部品aの業務トランザクション制御部品619におけるROLLBACK部6191からのロールバック依頼に応じて、ユーザDBの更新を取り消して元の状態に戻す。DBサーバ9は、ロールバック完了の通知をDBアクセス部品aに送信する。DBアクセス部品aは、DBサーバ9からロールバック完了通知を受信すると、ユーザアプリケーションaにロールバック完了通知をさらに送信する。
ユーザアプリケーションaは、DBアクセス部品aからロールバック完了通知を受信すると、ユーザアプリケーションaの一括COMMIT処理呼出部615に、処理に係るトランザクションIDを含むDB一括更新依頼をDBアクセス部品aに出力させる(ステップS97)。DBアクセス部品aの更新SQL一括実行部品617のDB一括更新部6171は、ユーザアプリケーションaからトランザクションIDを含むDB一括更新依頼を受信し(ステップS99)、DBサーバ9に対して、発行SQLログテーブル93からトランザクションIDに該当する更新SQL文を発行SQLシーケンス番号順に読み出すように要求する。DBサーバ9は、DBアクセス部品aから、トランザクションIDに該当する更新SQL文を発行SQLシーケンス番号順に発行SQLログテーブル93から読み出す要求を受信し、発行SQLログテーブル93から、トランザクションIDに該当する更新SQL文を発行SQLシーケンス番号順に読み出し、DBアクセス部品aに送信する。DBアクセス部品aの更新SQL一括実行部品617のDB一括更新部6171は、DBサーバ9から、トランザクションIDに該当する更新SQL文を発行SQLシーケンス番号順に受信する(ステップS101)。
そして、DBアクセス部品aの更新SQL一括実行部品617におけるDB一括更新部6171は、発行SQLシーケンス番号順に、受信した更新SQL文を、DBサーバ9に送信し、更新SQL文の実行を要求する(ステップS103)。DBサーバ9は、DBアクセス部品aから、更新SQL文を発行SQLシーケンス番号順に受信し、更新SQL文に従ってユーザDBA又はユーザDBBに対して更新処理を実施する。更新処理の結果は、DBサーバ9からDBアクセス部品aに通知される。
更新処理の結果を受信し、更新処理の結果が正常終了であれば、DBアクセス部品aの更新SQL一括実行部品617におけるDB一括更新部6171は、DBサーバ9に対して、処理に係るトランザクションIDに対応するトランザクション状態を処理完了に変更するように要求する(ステップS105)。DBサーバ9は、要求を受信すると、発行SQLログテーブル93において、処理に係るトランザクションIDに対応するトランザクション状態が、処理完了を表す値「0」になるように登録する。DBサーバ9は、処理結果をDBアクセス部品aに通知する。
処理結果を受信し、処理結果が正常終了であれば、DBアクセス部品aの業務トランザクション制御部品619におけるCOMMIT部6193は、ステップS103の各更新SQL文についてDBトランザクションコミット(COMMIT)を、DBサーバ9に要求する(ステップS107)。DBサーバ9は、DBアクセス部品aからDBトランザクションコミットを受信すると、ユーザDBAやユーザDBBに対する更新を確定させる。そして、DBサーバ9は、処理終了をDBアクセス部品aに通知する。
DBアクセス部品aは、DBサーバ9から処理終了通知を受信すると、処理終了をユーザアプリケーションaに通知する(ステップS109)。ユーザアプリケーションaは、DBアクセス部品aから処理終了通知を受信すると(ステップS111)、業務処理要求に対する応答を、要求元のクライアント端末3に送信する(ステップS113)。
正常に処理が完了した場合には、以上のような処理が実施される。全ての処理が正常に完了していれば、更新SQL文のROLLBACK(ロールバック)及び発行SQLログテーブル93に対する登録分だけ処理が重くなるが、以下に説明するように、正常終了しなかった場合に、大きなメリットが生ずる。
次に、ユーザアプリケーションcが呼び出された後にエラーが発生する場合について、図17及び図18を用いて説明する。具体的には、端子B以降の処理を説明する。
まず、ユーザアプリケーションaは、業務処理要求に応じてAPサーバCのユーザアプリケーションcに処理を依頼しなければならない場合には、必要なデータ及びトランザクションIDを含むユーザアプリケーションc呼出を、APサーバCに送信する(ステップS121)。APサーバCのユーザアプリケーションcは、APサーバAから必要なデータ及びトランザクションIDを含むユーザアプリケーションc呼出を受信し、トランザクションIDをメインメモリなどの記憶装置に格納する(ステップS123)。
そして、ユーザアプリケーションcは、所定の業務処理を実施する(ステップS125)。この所定の業務処理においてDBサーバ9が管理するユーザDBAやユーザDBBに保持されたデータの更新が必要になると、トランザクションIDを含むDB更新依頼をDBアクセス部品cに出力する(ステップS127)。ユーザアプリケーションcの処理は端子Eを介して図18の処理に移行する。
DBアクセス部品cは、ユーザアプリケーションcからトランザクションIDを含むDB更新依頼を受信すると(ステップS129)、当該DBアクセス部品c(更新対象のDB(テーブルとも呼ぶ)用のユーザDBアクセス部品の更新SQL発行部)は、排他エラーが発生しないことを確認するために、同一テーブル・同一レコードへの仕掛処理の有無を確認する依頼を、DBサーバ9に対して送信する(ステップS131)。具体的には、更新SQL文を構成するために必要なデータのうち更新対象テーブル名及び更新対象レコードを特定するための条件節を用いて、発行SQLログテーブル93を検索するように、DBサーバ9に依頼する。DBサーバ9は、発行SQLログテーブル93における更新対象テーブル及び更新対象特定キーを、受信した更新対象テーブル名及び更新対象レコードを特定するための条件節に基づき検索する。この検索結果によって、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在するか否か、そして存在する場合にはトランザクション状態が仕掛中を表す「1」であるかを判断する。判断するのはDBサーバ9でもよいし、DBアクセス部品cであってもよい。
ステップS131で、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在し、且つトランザクション状態が仕掛中を表す「1」である場合には(ステップS133:Yesルート)、DBアクセス部品cは、ユーザアプリケーションcに対して排他エラーを通知する。ユーザアプリケーションcは、DBアクセス部品cから排他エラーを受信すると(ステップS135)、これ以上の処理は実施できない。処理は端子Fを介して図18の処理に移行する。
一方、同一テーブル且つ同一レコードを更新しようとしている他のトランザクションが存在せず、又は存在する場合であってもトランザクション状態が完了状態を表している場合には(ステップS133:Noルート)、DBアクセス部品c(ユーザDBアクセス部品の更新SQL発行部)は、さらに、DBサーバ9に対して、受信したトランザクションIDで発行SQLログテーブル93を検索するように依頼する。DBサーバ9は、トランザクションIDを含む依頼を受信し、発行SQLログテーブル93を検索し、該当するレコードの発行SQLシーケンス番号を抽出する。DBサーバ9は、例えば発行SQLシーケンス番号のうち最も大きな番号を、DBアクセス部品cに送信する。抽出された全ての発行SQLシーケンス番号をDBアクセス部品cに出力するようにしても良い。DBアクセス部品c(ユーザDBアクセス部品の更新SQL発行部)は、例えば発行SQLシーケンス番号のうち最も大きな番号を受信すると、当該最も大きな発行SQLシーケンス番号を1インクリメントして、今回用いる発行SQLシーケンス番号を発行する(ステップS137)。
そして、DBアクセス部品cは、DB更新依頼に基づく更新SQL文をDBサーバ9に対して発行する(ステップS139)。DBサーバ9は、DBアクセス部品cから更新SQL文を受信すると、更新SQL文に基づき、ユーザDBの仮の更新を実施しようとする。処理は端子Gを介して図18の処理に移行する。
図18の処理の説明に移行して、DBサーバ9は、更新SQL文による更新処理の結果をDBアクセス部品cに通知する。DBアクセス部品c(ユーザDBアクセス部品の更新SQL発行部)は、DBサーバ9から、更新SQL文による更新処理の結果を受信し、エラーが発生したか判断する(ステップS141)。エラーが発生していれば、DBアクセス部品cは、エラーをユーザアプリケーションcに出力する(ステップS142)。ユーザアプリケーションcは、DBアクセス部品cからエラーを受信すると(ステップS143)、ステップS153に移行する。すなわち、念のためROLLBACK(ロールバック)を実行する。
一方、DBアクセス部品c(ユーザDBアクセス部品の発行SQL待避部)は、エラー発生がなかった場合又はステップS142の後に、後に解析などで利用するために、トランザクションID、発行SQLシーケンス番号、更新SQL文、更新対象テーブル名(DB名)、更新対象特定キー、SQL実行結果(成功又は失敗など)、及び仕掛中を表す「1」であるトランザクション状態を含む更新SQL文の登録要求を、DBサーバ9に送信する(ステップS145)。DBサーバ9は、上で述べたような更新SQLの登録要求を受信し、発行SQLログテーブル93に登録する。そして、DBサーバ9は、処理結果をDBアクセス部品cに返信する。
DBアクセス部品c(ユーザDBアクセス部品の発行SQL待避部)は、処理結果をDBサーバ9から受信すると、処理結果がエラー発生を表しているか判断する(ステップS147)。ステップS141も含めてエラーが発生していない場合には、正常終了と同じなので端子Cを介して図15の処理に移行する。なお、ステップS145が成功した場合には、即時コミット(COMMIT)される。一方、ステップS139ではエラーが発生したがステップS145ではエラーは発生しなかった場合には、図には示していないが、DBアクセス部品cは、ユーザアプリケーションcにステップS145の処理が正常に終了したことを通知する。ユーザアプリケーションcでは、ステップS153に移行する。
一方、ステップS145でエラーが発生した場合には、DBアクセス部品c(ユーザDBアクセス部品の発行SQL待避部)は、ユーザアプリケーションcに対してエラーを出力する(ステップS149)。ユーザアプリケーションcは、DBアクセス部品cからエラーを受信する(ステップS151)。そして、ステップS151又はステップS143の後に、ユーザアプリケーションcのROLLBACK部は、DBアクセス部品cにDBトランザクションロールバック(ROLLBACK)を依頼する(ステップS153)。ステップS139で更新処理に失敗している場合についても、念のため、ステップS153を実行する。
DBアクセス部品cの業務トランザクション制御部品におけるROLLBACK部は、ユーザアプリケーションcからのDBトランザクションロールバックの依頼を受信し、DBトランザクションロールバックを実施する(ステップS155)。すなわち、ステップS139でDBサーバ9に実行させたユーザDBの更新を、取り消して元の状態に戻すようにDBサーバ9に依頼する。DBサーバ9は、DBアクセス部品cの業務トランザクション制御部品におけるROLLBACK部からのロールバック依頼に応じて、ユーザDBの更新を取り消して元の状態に戻す。DBサーバ9は、ロールバック完了の通知をDBアクセス部品cに送信する。DBアクセス部品cは、DBサーバ9からロールバック完了通知を受信すると、ユーザアプリケーションcにロールバック完了通知をさらに送信する。
このようにすれば、いずれかの段階にてエラーが発生していても、ユーザDBAやユーザDBBは、元の状態に戻されているので、個別の取消処理は用意しておく必要もなく且つ実行する必要もない。
ユーザアプリケーションcは、DBアクセス部品cからロールバック完了通知を受信すると、呼出元のユーザアプリケーションaにエラー通知を送信する(ステップS157)。ユーザアプリケーションaは、ユーザアプリケーションcからエラー通知を受信すると(ステップS159)、以下の業務処理を行うことはできない。従って、ユーザアプリケーションaのROLLBACK部は、DBアクセス部品aにDBトランザクションロールバック(ROLLBACK)を依頼する(ステップS161)。DBアクセス部品aの業務トランザクション制御部品619におけるROLLBACK部6191は、ユーザアプリケーションaからのDBトランザクションロールバックの依頼を受信し、DBトランザクションロールバックを実施する(ステップS163)。すなわち、ステップS23でDBサーバ9に実行させたユーザDBの更新を、取り消して元の状態に戻すようにDBサーバ9に依頼する。DBサーバ9は、DBアクセス部品aの業務トランザクション制御部品619におけるROLLBACK部6191からのロールバック依頼に応じて、ユーザDBの更新を取り消して元の状態に戻す。DBサーバ9は、ロールバック完了の通知をDBアクセス部品aに送信する。DBアクセス部品aは、DBサーバ9からロールバック完了通知を受信すると、ユーザアプリケーションaにロールバック完了通知をさらに送信する。
さらに、例えばユーザアプリケーションaの一括COMMIT処理呼出部615は、トランザクションIDを含むDB更新キャンセル要求をDBアクセス部品aに出力する(ステップS165)。DBアクセス部品aの更新SQL一括実行部品617は、トランザクションIDを含むDB更新キャンセル要求を受信すると(ステップS167)、DBサーバ9に対して、発行SQLログテーブル93においてトランザクションIDに係るレコードのトランザクション状態が処理完了を表す値「0」になるように登録を要求する(ステップS169)。DBサーバ9は、要求に応じて、発行SQLログテーブル93に、トランザクションIDに係るレコードのトランザクション状態が処理完了を表す値「0」になるように登録する。この処理についても即時COMMITである。そして、DBアクセス部品aは、処理完了をユーザアプリケーションaに通知する。なお、発行SQLログテーブル93には、更新SQL文に従った更新処理でエラーが発生した場合にはSQL実行結果にその旨登録されるが、その他の部分でエラーが発生した場合には、別途この段階にて発行SQLログテーブル93に登録するようにしても良い。なお、本ステップを実行することによって、同一テーブル且つ同一レコードに対する更新が他のトランザクションで発生しても排他エラーが生じなくなる。
ユーザアプリケーションaは、処理完了をDBアクセス部品aから受信し、業務処理要求に対してエラーが発生した旨の通知を、要求元のクライアント端末3に送信する(ステップS171)。
このように、更新SQL文による更新処理が、ロールバック(ROLLBACK)によって一旦元に戻されるため、他の処理部分でエラーが発生しても、複雑な取消処理を実施する必要が無く、ユーザDBに影響を残すことなく、他のトランザクション処理に移行することができるようになる。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で述べた例では、発行SQLログテーブル93において、トランザクション状態を管理するようになっているが、トランザクション状態が「仕掛中」であれば発行SQLログテーブル93にレコードを登録しておき、「処理完了」であれば発行SQLテーブル93からレコードを削除するようにしてもよい。この場合には、レコードが残らないので、後にエラーの解析などを行うことができないようになる。
また、図1及び図2による機能ブロック構成は一例であって、必ずしも実際のプログラム構成と一致しない場合もある。
さらに、処理フローについても、処理結果が変わらない限りにおいて、処理順番を入れ替えるようにしても良い。例えば、上で述べた処理フローでは、APサーバAについてのロールバック処理は、他のユーザアプリケーションを呼び出した後に実施するようになっているが、DBアクセス部品aから処理完了が通知される毎にロールバックを実施させるようにしても良い。
なお、APサーバやクライアント端末、DBサーバについては、図19に示すように、メモリ2501(記憶部)とCPU2503(処理部)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。OS及びWebブラウザを含むアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。このようなコンピュータは、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
(付記1)
関連を有する複数の業務処理プログラムによって1の業務処理要求に応じて実行される複数のデータベース更新処理におけるデータ整合性を確保するためのプログラムであって、
前記業務プログラムを実行するコンピュータに、
業務処理クライアントからの業務処理要求に応じて、一意のトランザクションIDを発行するステップと、
前記業務処理要求を処理するいずれかの業務処理プログラムからの第1のデータベース更新要求に応じて、当該第1のデータベース更新要求に基づく第1の更新命令をデータベースに出力し、前記トランザクションIDに対応して前記第1の更新命令を発行命令ログテーブルに登録し、前記第1の更新命令による更新処理の成否を問わず前記第1の更新命令のキャンセル命令を前記データベースに出力する処理ステップと、
前記業務処理要求に対する処理が正常に完了した場合には、前記業務処理要求に対して発行された前記トランザクションIDに対応して前記発行命令ログテーブルに登録されている前記第1の更新命令を前記データベースに出力し、さらに前記第1の更新命令による更新を確定させるコミット命令を前記データベースに出力する確定ステップと、
を実行させるためのプログラム。
(付記2)
前記業務処理要求に対する処理が正常に完了しなかった場合には、前記業務処理要求に対して発行された前記トランザクションIDに対応して前記発行命令ログテーブルに登録されている更新命令の破棄、又は、当該更新命令を無効にするデータの前記発行命令ログテーブルへの登録の少なくともいずれかを実行するエラー処理ステップ
をさらに前記コンピュータに実行させるための付記1記載のプログラム。
(付記3)
前記第1処理ステップにおいて
前記データベースに更新命令を出力する前に、前記発行命令ログテーブルを参照して同一テーブル且つ同一レコードに対する更新命令が有効に保持されているか判断し、
前記エラー処理ステップにおいて、前記処理ステップにより前記発行命令ログテーブルに同一テーブル且つ同一レコードに対するデータベース更新要求が有効に保持されていると判断された場合に、前記業務処理要求に対する処理が正常に完了しなかったものとして、前記業務処理要求に対して発行された前記トランザクションIDに対応して前記発行命令ログテーブルに登録されている更新命令の破棄、または、当該更新命令を無効にするデータの前記発行命令ログテーブルへの登録の少なくともいずれかを実行する。
付記2記載のプログラム。
(付記4)
関連を有する複数の業務処理プログラムによって1の業務処理要求に応じて実行される複数のデータベース更新処理におけるデータ整合性を確保するための方法であって、
前記業務プログラムを実行するコンピュータが、
業務処理クライアントからの業務処理要求に応じて、一意のトランザクションIDを発行するステップと、
前記業務処理要求を処理するいずれかの業務処理プログラムからの第1のデータベース更新要求に応じて、当該第1のデータベース更新要求に基づく第1の更新命令をデータベースに出力し、前記トランザクションIDに対応して前記第1の更新命令を発行命令ログテーブルに登録し、前記第1の更新命令による更新処理の成否を問わず前記第1の更新命令のキャンセル命令を前記データベースに出力する処理ステップと、
前記業務処理要求に対する処理が正常に完了した場合には、前記業務処理要求に対して発行された前記トランザクションIDに対応して前記発行命令ログテーブルに登録されている前記第1の更新命令を前記データベースに出力し、さらに前記第1の更新命令による更新を確定させるコミット命令を前記データベースに出力する確定ステップと、
を実行する方法。
(付記5)
関連を有する複数の業務処理プログラムによって1の業務処理要求に応じて実行される複数のデータベース更新処理におけるデータ整合性を確保するための処理を行うコンピュータ・システムであって、
業務処理クライアントからの業務処理要求に応じて、一意のトランザクションIDを発行する手段と、
前記業務処理要求を処理するいずれかの業務処理プログラムからの第1のデータベース更新要求に応じて、当該第1のデータベース更新要求に基づく第1の更新命令をデータベースに出力し、前記トランザクションIDに対応して前記第1の更新命令を発行命令ログテーブルに登録し、前記第1の更新命令による更新処理の成否を問わず前記第1の更新命令のキャンセル命令を前記データベースに出力する処理手段と、
前記業務処理要求に対する処理が正常に完了した場合には、前記業務処理要求に対して発行された前記トランザクションIDに対応して前記発行命令ログテーブルに登録されている前記第1の更新を前記データベースに出力し、さらに前記第1の更新命令による更新を確定させるコミット命令を前記データベースに出力する確定手段と、
を有するコンピュータ・システム。