説明

DBMSに格納されたデータの整合性を担保するためのシステム

【課題】 2フェーズコミットメント機能を有しないDBMSを利用した場合でも、データの整合性を担保する。
【解決手段】 インタフェースサーバ1がリクエスト要求元からのリクエストを受け付けて、このリクエストにリクエストIDを付与する。業務処理サーバ3は、このクエストに基づいてDBMS5に複数の更新処理を依頼した場合、このリクエストに付与された識別情報と関連づけられた各更新処理の内容に関するテーブル更新情報55を、DBMS5から取得する。さらに、業務処理サーバ3は、DBMS5に依頼したすべての更新処理の処理結果に基づいて、リクエストの成否を判定する。インタフェースサーバ1は、リクエスト成否とテーブル更新情報55とを、リクエストIDで関連づけてトランザクションジャーナル13へ記憶する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、DBMS(Database Management System)を利用するシステムにおいて、DBMSに格納された複数のテーブル間のデータの整合性を担保するための技術に関する。
【背景技術】
【0002】
近年、誰でもが自由に利用できるようにするため、ソフトウェアのソースコードをオープンソースとして、インターネットなどを通じて無償で公開することが行われている。そして、オープンソースのソフトウェアを利用すれば、低コストでアプリケーションシステムの構築が可能となることから、企業なども徐々に利用し始めている。
【発明の開示】
【発明が解決しようとする課題】
【0003】
DBMS(Database Management System;データベース管理システム)もオープンソースとして公開されているものがある。オープンソースのDBMSの場合、2フェーズコミットメントなどのような高度な機能が実装されていないものがある。このようなDBMSが利用された場合、データの整合性を担保するためには2フェーズコミットメントを行うべきときであっても、それが行われないことになる。そうなると、データの不整合が生じ、このデータを利用するアプリケーションシステムにおいて不都合が生じる。
【0004】
そこで、本発明の目的は、2フェーズコミットメント機能を有しないDBMSを利用した場合でも、データの整合性を担保するための技術を提供することである。
【課題を解決するための手段】
【0005】
本発明の一実施態様に従うDBMS(Database Management System)と接続され、前記DBMSに格納されたデータの整合性を担保するためのシステムは、リクエスト要求元からのリクエストを受け付けると、前記リクエストに識別情報を付与する手段と、前記DBMSに対して、前記リクエストに基づくデータの更新処理を依頼する更新手段と、前記更新手段が前記リクエストに基づいて前記DBMSに複数の更新処理を依頼した場合、前記リクエストに付与された識別情報と関連づけられた各更新処理の内容に関する更新情報を、前記DBMSから取得する更新情報取得手段と、前記更新手段が前記DBMSに依頼したすべての更新処理の処理結果に基づいて、前記リクエストの成否を判定するリクエスト成否判定手段と、前記リクエスト成否判定手段による判定結果と前記更新情報取得手段により取得した更新情報とを、前記リクエストに付与された識別情報で関連づけて記憶する記憶手段と、前記リクエスト成否判定手段による判定結果を、前記リクエスト要求元に対して出力する手段と、を備える。
【0006】
好適な実施形態では、前記更新情報は、前記更新手段が依頼した更新処理別になっていて、各更新処理が正常終了したときに、当該更新処理に関する更新情報が前記DBMSによって生成されてもよい。
【0007】
好適な実施形態では、リクエスト成否判定手段は、前記更新手段が依頼したすべての更新処理が正常終了したときはリクエスト成功と判定し、前記更新手段が依頼した更新処理のいずれか一つ以上が正常終了でないときはリクエスト不成功と判定するようにしてもよい。
【0008】
好適な実施形態では、前記記憶手段に、ある識別情報が付与されているリクエストの判定結果がリクエスト不成功と記憶されていて、かつ、前記更新情報取得手段が取得した、当該識別情報に係る一部の前記更新情報が記憶されているときは、前記DBMSに格納された複数のテーブル間で不整合が生じていると判定する整合性判定手段を、さらに備えてもよい。
【発明を実施するための最良の形態】
【0009】
本発明の一実施形態に係る、2フェーズコミットメントがサポートされていないDBMSを利用したトランザクション処理を行うシステムについて、図面を用いて説明する。
【0010】
図1は、本実施形態に係るトランザクション処理システム10とその監視装置20の構成を示す図である。トランザクション処理システム10は、外部とのデータ入出力を行うインタフェースサーバ1と、所定の業務処理を行う業務処理サーバ3と、DBMS5とを備える。監視装置20は、例えば、インタフェースサーバ1と接続されている。
【0011】
本実施形態では、DBMS5が在庫マスタを有し、業務処理サーバ3が商品の発注、在庫管理等を行っているときに、インタフェースサーバ1が商品の発注をリクエストするトランザクションを受け付けたときの処理を例にとって説明する。
【0012】
インタフェースサーバ1、業務処理サーバ3、DBMS5および監視装置20は、いずれも例えば汎用的なコンピュータシステムにより構成され、以下に説明する各サーバ等1,3,5、20内の個々の構成要素または機能は、例えば、コンピュータプログラムを実行することにより実現される。
【0013】
インタフェースサーバ1は、リクエスト要求元の装置からのリクエストをトランザクションとして受け付け、このリクエストが正常終了したか否かを示すリクエスト成否をリクエスト要求元へ返信する。また、インタフェースサーバ1は、内部の機能として、受け付けたトランザクションに含まれるリクエストに識別情報であるIDを付与するリクエストID付与部11と、トランザクションの処理履歴を記録するトランザクションジャーナル13とを有する。
【0014】
リクエストID付与部11は、トランザクション処理システム10内でユニークなリクエストIDを、各トランザクションに係るリクエストに対して付与し、業務処理サーバ3へ送る。
【0015】
トランザクションジャーナル13には、各トランザクションに係るリクエストごとに、その処理結果などの情報が格納される。例えば、業務処理サーバ3から返信されたリクエストに対するリプライが、トランザクションジャーナル13に格納される。
【0016】
図2には、トランザクションジャーナル13のデータ構造の一例を示す。トランザクションジャーナル13は、データ項目として、リクエストID21と、リクエスト成否22と、在庫マスタテーブルのテーブル更新情報23と、トランザクションテーブルのテーブル更新情報24とを有する。リクエスト成否22,及びテーブル更新情報23,24については後述する。
【0017】
再び図1を参照すると、DBMS5は、それぞれデータが格納されている種々のテーブル51,53と、テーブル更新情報55とが記憶されている。テーブル更新情報55には、各テーブルの更新(上書き及び挿入)が行われたときに、その更新内容などが格納される。テーブル更新情報55は、テーブル別になっている。
【0018】
テーブル更新情報55のデータ構造を図3に示す。テーブル更新情報55は、テーブル名41と、上書き/挿入種別42と、更新の主キー43と、更新前情報44と、更新後情報45と、リクエストID46とをデータ項目として有する。テーブル更新情報55は、各テーブルの更新処理が完了した時点で、その更新処理に係るレコードが追加される。従って、DBMS5が業務処理サーバ3からデータの更新依頼を受けた場合でも、その更新が正常終了しなければ、その更新処理に係るレコードが生成されない。この結果、リクエストID46をキーにしてテーブル更新情報55を参照することにより、各更新処理の成否を判定することができる。
【0019】
図1の例では、DBMS5は、在庫マスタテーブル51とトランザクションテーブル53とを有している。そして、テーブル更新情報55には、在庫マスタテーブルの更新情報551とトランザクションテーブルの更新情報552とが格納される。
【0020】
業務処理サーバ3は、トランザクション制御を行うトランザクション制御部31と、複数の個別処理331,332を有する業務処理部33とを備える。ここで、個別処理には在庫処理331と、注文処理332とがある。
【0021】
トランザクション制御部31は、インタフェースサーバ1から通知されたトランザクションを受け付けて、そのトランザクションに含まれるリクエストに応じた個別処理を業務処理部33から選択して実行させる。そして、トランザクション制御部31は、業務処理部33の個別処理の結果に応じて、リクエストに対する処理が正常に終了したか否か(リクエスト成否)を判定する。さらに、リクエストIDをキーにしてDBMS5からテーブル更新情報55を取得して、リクエスト成否とともにトランザクションに対するリプライとしてインタフェースサーバ1へ返信する。
【0022】
業務処理部33の各個別処理は、それぞれ所定の業務処理を実行する。さらに、各個別処理は、DBMS5内の各テーブルの参照、更新の際は、DBMS5に対して処理を依頼する。DBMS5へ処理を依頼するときは、リクエストIDもあわせて通知する。
【0023】
例えば、インタフェースサーバ1から商品発注リクエストのトランザクションが通知されると、トランザクション制御部31は、在庫処理331と注文処理332を順次呼び出してそれぞれの処理を実行させる。ここで、在庫処理331としては、在庫引き当て、在庫マスタテーブル51の更新等を行う。在庫マスタテーブル51の更新は、DBMS5に対して処理を依頼する。注文処理332としては、例えば、商品発注に対する注文IDを採番し、トランザクションテーブル53への注文情報の格納を、DBMS5に対して依頼する。
【0024】
次に、図4のフローチャートを用いて、商品発注のトランザクション処理について説明する。
【0025】
まず、インタフェースサーバ1が商品発注リクエストを含むトランザクションを受け付けると、リクエストID付与部11が、そのトランザクションにリクエストIDを付与する(S11)。そして、リクエストIDが付与されたトランザクションは、業務処理サーバ3へ通知される。
【0026】
業務処理サーバ3では、トランザクション制御部31がトランザクションを受け付けると、そのトランザクションに応じた、業務処理部33の個別処理331,332を順次実行させる(S12)。ここで実行される各個別処理の中で、DBMS5内のテーブルを更新するときは、DBMS5に対してテーブルの更新を依頼する(S13)。このテーブルの更新依頼には、受け付けたトランザクションに付与されているリクエストIDが付されている。
【0027】
本実施形態では、トランザクション制御部31は、商品発注のトランザクションに対して、まず在庫処理331を実行させる。在庫処理331では、在庫引き当て処理を行った後、DBMS5に在庫マスタテーブル51の更新要求を出力する。
【0028】
DBMS5がテーブル更新の依頼を受けると、それに応じてテーブルの更新を行う(S14)。そして、このテーブルの更新が成功すると、DBMS5がこのテーブルの更新に基づいてテーブル更新情報55(図3参照)を格納する(S15)。
【0029】
本実施形態では、DBMS5は、在庫マスタテーブル51を更新するとともに、在庫マスタのテーブル更新情報551に、その更新に係る情報を格納する。
【0030】
DBMS5での処理が終了すると、トランザクション制御部31へ個別処理が正常終了したか否かを示す処理結果が通知され、これにより個別処理が終了する(S16)。トランザクション制御部31は、他にも行うべき個別処理があるか否かを判定し、すべての個別業務処理を上記ステップS12〜S16に従って実行させる(S17)。
【0031】
本実施形態では、上述の在庫処理331が終了すると、トランザクション制御部31がこれに続いて注文処理332を実行させる。つまり、注文処理332について、ステップS12以降の処理が再び実行される。注文処理332では、注文IDを採番して、DBMS5にトランザクションテーブル53の更新要求を出力する。DBMS5は、トランザクションテーブル53を更新するとともに、トランザクションテーブルのテーブル更新情報552に、その更新に係る情報を格納する。そして、これらの処理結果をトランザクション制御部31へ通知して処理を終了する。
【0032】
すべての個別処理が終了すると(S17:Yes)、トランザクション制御部31は、リクエストの成否を判定する(S18)。すなわち、このトランザクションに基づいて処理を行った個別処理のすべてが正常終了していればトランザクションは成功であり、個別処理のいずれか一つでも正常終了でなければ、トランザクションは不成功(エラー)である。個別処理の成否判定は、DBMS5から通知される処理結果に基づいて行われる。さらに、トランザクション制御部31は、DBMS5からテーブル更新情報55を取得し、ここで取得したテーブル更新情報55と、リクエスト成否及びリクエストIDとを含むリプライを、インタフェースサーバ1へ返信する。
【0033】
本実施形態では、トランザクション制御部31は、在庫処理331及び注文処理332のいずれもが正常終了したときは、リクエスト成否を「成功」とし、いずれか一方または両方ともが正常終了でないときは、リクエスト成否を「エラー」とする。さらに、トランザクション制御部31は、在庫マスタ及びトランザクションテーブルのテーブル更新情報551,552を取得して、インタフェースサーバ1へリプライを返す。
【0034】
インタフェースサーバ1では、業務処理サーバ3からのリプライをトランザクションジャーナル13(図2参照)に格納し、リクエスト成否をトランザクションの処理結果として出力して処理を終了する(S19)。
【0035】
これにより、トランザクションジャーナル13には、各トランザクション(リクエストID21)について、そのトランザクションに係るリクエストの全処理が成功したか否かを示すリクエスト成否22と、各テーブルに対する個別の処理内容を示すテーブル更新情報23,24が格納される。従って、トランザクションジャーナル13を参照することにより、データの不整合が生じているか否かを確認することができる。例えば、監視装置20がトランザクションジャーナル13の記憶内容を取得して、表示装置などに出力することにより、システム管理者が確認できるようにしてもよい。出力された内容の整合性及び個別の対処方法は、次に説明するトランザクション整合性チェック表で確認できる。
【0036】
図5には、トランザクション整合性チェック表100を示す。このチェック表100は、リクエスト成否22に対して,テーブル更新情報(在庫マスタ)23及びテーブル更新情報(トランザクション)24が登録済みであるか否かに応じて、システム管理者が採るべき対処方法を示す。ここで、テーブル更新情報23,24は、テーブルの更新が正常終了したときにだけ生成されるので、テーブル更新情報23,24が未登録であるときは、テーブルの更新が正常終了していないことを意味する。
【0037】
例えば、項番3のリクエスト成否22が「エラー」でテーブル更新情報23,24がいずれも「未登録」であるときと、項番4のリクエスト成否22が「成功」でテーブル更新情報23,24がいずれも「登録済み」であるときは、データの整合性はとれているので、データベースに対する特別な対応は必要ない。
【0038】
一方、項番2のリクエスト成否22が「エラー」であり、テーブル更新情報23は「登録済み」であるが、テーブル更新情報24は「未登録」であるときは、データの不整合が生じている。つまり、この場合は、在庫マスタテーブル51を正常に更新した後、トランザクションテーブル53の更新に失敗をしているため、不整合となっている。この場合、システム管理者は、リクエストIDによりテーブル更新情報55を検索して、手動でロールバックを行う。
【0039】
2フェーズコミットメントがサポートされているDBMSの場合、上記のようなケースでは、在庫マスタテーブル51の更新処理はロールバックされ、整合性が保たれるようになっている。しかし、本実施形態のように2フェーズコミットメントがサポートされていないDBMSでは、在庫マスタテーブル51のロールバックがされないので、これを検出する必要がある。
【0040】
また、上記のようにシステム管理者が不整合を検出して、手動でロールバックを行ってもよいが、それ以外に、監視装置20が自動的に不整合判定を行ってその結果をシステム管理者へ通知してもよいし、さらには、自動的にロールバックまで行って、その結果をシステム管理者へ通知してもよい。自動、手動を問わず、不整合の検出及びロールバックの実行は、トランザクション処理とは同期していなくてもよい。
【0041】
なお、項番1,5〜7の場合は、システム障害またはDBMS障害が生じていると考えられるので、それぞれ適切な対応が必要である。
【0042】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【0043】
例えば、上述した実施形態では、同一のDBMS内の複数のテーブル間でのデータの整合性を担保する場合について説明したが、同様のやり方で異なるDBMS間の整合性を担保することもできる。
【図面の簡単な説明】
【0044】
【図1】本発明の一実施形態に係るトランザクション処理システム10とその監視装置20を示す図である。
【図2】トランザクションジャーナル13のデータ構造の一例を示す図である。
【図3】テーブル更新情報のデータ構造の一例を示す図である。
【図4】処理手順を示すフローチャートである。
【図5】トランザクション整合性チェック表の一例を示す図である。
【符号の説明】
【0045】
1 インタフェースサーバ
3 業務処理サーバ
5 DBMS
10 トランザクション処理システム
11 リクエストID付与部
13 トランザクションジャーナル
20 監視装置
31 トランザクション制御部
33 業務処理部
51 在庫マスタテーブル
53 トランザクションテーブル
55 テーブル更新情報

【特許請求の範囲】
【請求項1】
DBMS(Database Management System)と接続され、前記DBMSに格納されたデータの整合性を担保するためのシステムであって、
リクエスト要求元からのリクエストを受け付けると、前記リクエストに識別情報を付与する手段と、
前記DBMSに対して、前記リクエストに付与された識別情報を含む、前記リクエストに基づくデータの更新処理を依頼する更新手段と、
前記更新手段が前記リクエストに基づいて前記DBMSに複数の更新処理を依頼した場合、前記リクエストに付与された識別情報と関連づけられた各更新処理の内容に関する更新情報を、前記DBMSから取得する更新情報取得手段と、
前記更新手段が前記DBMSに依頼した前記複数の更新処理のすべての処理結果に基づいて、前記リクエストの成否を判定するリクエスト成否判定手段と、
前記リクエスト成否判定手段による判定結果と前記更新情報取得手段が取得した更新情報とを、前記リクエストに付与された識別情報で関連づけて記憶する記憶手段と、
前記リクエスト成否判定手段による判定結果を、前記リクエスト要求元に対して出力する手段と、を備えたシステム。
【請求項2】
前記更新情報取得手段が取得した更新情報は、前記更新手段が依頼した更新処理別になっていて、
各更新処理が正常終了したときに、当該更新処理に関する更新情報が前記DBMSによって生成されることを特徴とする請求項1記載のシステム。
【請求項3】
リクエスト成否判定手段は、前記更新手段が依頼したすべての更新処理が正常終了したときはリクエスト成功と判定し、前記更新手段が依頼した更新処理のいずれか一つ以上が正常終了でないときはリクエスト不成功と判定することを特徴とする請求項1記載のシステム。
【請求項4】
前記記憶手段に、ある識別情報が付与されているリクエストの判定結果がリクエスト不成功と記憶されていて、かつ、前記更新情報取得手段が取得した、当該識別情報に係る一部の前記更新情報が記憶されているときは、前記DBMSに格納された複数のテーブル間で不整合が生じていると判定する整合性判定手段を、さらに備える請求項1記載のシステム。
【請求項5】
DBMS(Database Management System)を利用するシステムが、前記DBMSに格納された複数のテーブル間のデータの整合性を担保するための方法であって、
リクエスト要求元からリクエストを受け付けると、前記リクエストに識別情報を付与するステップと、
前記DBMSに対して、前記リクエストに基づいて複数の更新処理を依頼するステップと、
前記リクエストに付与された識別情報と関連づけられた各更新処理の内容に関する更新情報を、前記DBMSから取得するステップと、
前記依頼したすべての更新処理の処理結果に基づいて、前記リクエストの成否を判定するステップと、
前記リクエスト成否の判定結果と前記取得した更新情報とを、前記リクエストに付与された識別情報で関連づけて記憶するステップと、
前記リクエスト成否判定手段による判定結果を、前記リクエスト要求元に対して出力するステップと、を有する方法。
【請求項6】
DBMS(Database Management System)に格納されたデータの整合性を担保するためのコンピュータプログラムであって、
コンピュータに実行されると、
リクエスト要求元からリクエストを受け付けると、前記リクエストに識別情報を付与するステップと、
前記DBMSに対して、前記リクエストに基づいて複数の更新処理を依頼するステップと、
前記リクエストに付与された識別情報と関連づけられた各更新処理の内容に関する更新情報を、前記DBMSから取得するステップと、
前記依頼したすべての更新処理の処理結果に基づいて、前記リクエストの成否を判定するステップと、
前記リクエスト成否の判定結果と前記取得した更新情報とを、前記リクエストに付与された識別情報で関連づけて記憶するステップと、
前記リクエスト成否判定手段による判定結果を、前記リクエスト要求元に対して出力するステップと、が行われるコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate