(57)【特許請求の範囲】
【請求項１】
管理対象データ毎にマスタ／ローカルを問わずデータベース内で唯一の識別子であるデータ識別子の発番手段を有し、該データ識別子によりデータベース内の各データの管理を行うデータベース管理システムであって、マスタデータベースからデータ集合の一部を複写して一時的にローカルデータベースを作成し、該ローカルデータベース上でデータの更新を行った後、該更新データに基づき前記マスタデータベースのデータを更新するサイクルであるロングトランザクションをとる分散型データベース管理システムにおいて、
マスタデータベース上の各データについて、当該データがどのトランザクションに占有されているかを示すロック制御フラグと、
現在実行中のロングトランザクションを識別する、データベース内でユニークなロングトランザクション識別子と、当該ロングトランザクションを実行させている利用者を識別する利用者識別子とからなるトランザクション管理表と、
を設け、
利用者が更新対象データを特定する条件式とともにロングトランザクションの開始要求を行なうと、該ロングトランザクションの識別子を払い出すとともに、該ロングトランザクション識別子を該利用者の利用者識別子とともトランザクション管理表に記憶し、
与えられた更新対象データを特定する条件式により前記マスタデータベースを検索して、検索された各データの、該データを占有しているロングトランザクションの識別子であるロック制御フラグにより、それぞれの占有状況をチェックし、
該データがどのロングトランザクションからも占有されていない場合、該データのロック制御フラグに該ロングトランザクションの識別子を設定して該データを占有し、
該データが他のロングトランザクションにより占有されている場合は、該データのロック制御フラグに記録されたロングトランザクション識別子と前記トランザクション管理表から先行ロングトランザクションの利用者である先行利用者を特定し、
該先行利用者と当該利用者の間でお互いのロングトランザクションのどちらで該データを占有すべきかを調整し、
先行ロングトランザクションに占有権があるとした場合は、該データを当該ロングトランザクションでの更新対象データから除き、
当該ロングトランザクション、すなわち後行ロングトランザクションに占有権があるとした場合、前記マスタデータベース上の該データのロック制御フラグに後行ロングトランザクションの識別子を設定して占有権を先行ロングトランザクションから後行ロングトランザクションに変更し、後行ロングトランザクションに該データの更新権を与えることを特徴とするデータベース排他制御方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、管理対象データ毎にマスタ／ローカルを問わずデータベース内で唯一の識別子であるデータ識別子の発番手段を有し、該データ識別子によりデータベース内の各データの管理を行うデータベース管理システムであって、マスタデータベースからデータ集合の一部を複写して一時的にローカルデータベースを作成し、ローカルデータベース上でデータの更新を行った後、該更新データに基づきマスタデータベースのデータを更新するサイクルであるロングトランザクションをとる分散型データベース管理システムにおいて、マスタデータベース上の各データに対する占有処理を司る、データベース排他制御方法に関する。
【０００２】
【従来の技術】
従来、データベース上の各データに対する占有処理は、データベースにアクセスする各トランザクションの中でアクセスしたデータから逐次ロックし、トランザクションの終了時に該トランザクションで占有したデータのロックを全て解除する方法で行われていた。そして先行のトランザクションで占有されているデータを後行のトランザクションでアクセスしたい場合は、後行のトランザクションが先行トランザクションの終了、即ち該データのロック解除を一定時間待ち、一定時間内にロックが解除されたらデータベースアクセスを再開し、一定時間内にロックが解除されない場合はエラーとしていた。
【０００３】
【発明が解決しようとする課題】
このため、マスタデータベースから業務上必要となるデータの一部を複写して、一時的にローカルデータベースを作成し、業務終了後にローカルデータベース上での更新内容をマスタデータベースに反映するサイクルを取るデータベースシステムにおいて、ＣＡＤ／ＣＡＭあるいはガス・水道・電気等の施設設計業務のように、大量のデータを長時間に渡って更新する業務を行う場合は、一回のトランザクション当たりの処理時間が非常に長くなり、同一データに対する複数トランザクションからのアクセス競合があると、先行トランザクションでアクセスしたデータがなかなか占有解除されず、業務処理上は後行のトランザクションにアクセス優先権を割り当てなければならない状況下では円滑な業務遂行に支障をきたす。また、トランザクションが長時間に渡り、かつアクセス対象データが非常に多い場合、従来のようにアクセス対象データを逐次ロックする方法では、トランザクション間で、互いにアクセス対象資源の一部を占有し合って、相互にウエイト状態に陥るデッドロックが多発し、業務処理が停止してしまうという問題もある。
【０００４】
本発明の目的は、上記問題点を解決するもので、一つの処理時間が長期間にわたるトランザクション（ロングトランザクション）が複数競合するデータベースシステムにおいても、トランザクション内でアクセス対象となるデータの占有処理を遅滞無く行うことができ、かつ同一データに対して複数のトランザクションから占有要求があった場合も、トランザクションの先行／後行に関係無く、業務上最も優先順位の高いトランザクションで該データの占有が行えるようにした、データベース排他制御方法を提供することにある。
【０００５】
【課題を解決するための手段】
本発明のデータベース排他制御方法は、
マスタデータベース上の各データについて、当該データがどのトランザクションに占有されているかを示すロック制御フラグと、
現在実行中のロングトランザクションを識別するデータベース内ユニークなロングトランザクション識別子と、当該ロングトランザクションを実行させている利用者を識別する利用者識別子とからなるトランザクション管理表と、
を設け、
利用者が更新対象データを特定する条件式とともにロングトランザクションの開始要求を行なうと、該ロングトランザクションの識別子を払い出すとともに、該ロングトランザクション識別子を該利用者の利用者識別子とともトランザクション管理表に記憶し、
与えられた更新対象データを特定する条件式によりマスタデータベースを検索して、検索された各データの、該データを占有しているロングトランザクションの識別子であるロック制御フラグにより、それぞれの占有状況をチェックし、
該データがどのロングトランザクションからも占有されていない場合、該データのロック制御フラグに該ロングトランザクションの識別子を設定して該データを占有し、
該データが他のロングトランザクションにより占有されている場合は、該データのロック制御フラグに記録されたロングトランザクション識別子とトランザクション管理表から先行ロングトランザクションの利用者である先行利用者を特定し、
該先行利用者と当該利用者の間でお互いのロングトランザクションのどちらで該データを占有すべきかを調整し、
先行ロングトランザクションに占有権があるとした場合は、該データを当該ロングトランザクションでの更新対象データから除き、
当該ロングトランザクション、すなわち後行ロングトランザクションに占有権があるとした場合、マスタデータベース上の該データのロック制御フラグに後行ロングトランザクションの識別子を設定して占有権を先行ロングトランザクションから後行ロングトランザクションに変更し、後行ロングトランザクションに該データの更新値を与えるものである。
【０００６】
【作用】
本発明は、同一のデータに対して複数のトランザクションから占有要求があった場合、後行トランザクション側で該データを占有している先行トランザクションの識別子をキーに該トランザクションの利用者を特定し、先行および後行トランザクションの利用者同志で該データの優先権がどちらにあるかを調整し、必要ならば該データの占有権を後行トランザクション側に変更することによって、業務上最も優先すべきトランザクションに更新対象データの占有権を遅滞無く委譲できるようにしたことを特徴とする。
【０００７】
従来の技術とは、１つのデータに対して複数のトランザクションから占有要求があった場合、占有要求を先に発行したトランザクションに占有権を一意に設定するのではなく、占有要求の競合が発生した都度、トランザクション間（即ちトランザクションを実行している利用者間）で該データの占有権を調整して、業務上最も優先すべきトランザクションに該データの占有権を遅滞なく変更できるようにした点が異なる。
【０００８】
【実施例】
次に、本発明の実施例について図面を参照して説明する。
【０００９】
図１は本発明の一実施例を示すシステム構成図である。
【００１０】
データベース管理システム１は、データベース内での唯一の識別子であるデータ識別子を発番するデータ識別子発番機構１３と、ロングトランザクション識別子を発番するロングトランザクション識別子発番機構１１と、各ロングトランザクションを実行している利用者の識別子である利用者識別子とロングトランザクション識別子の対応表であるトランザクション管理表１２を含み、マスタデータベース２からデータの集合の一部を複写して一時的にローカルデータベース３を作成し、ローカルデータベース３上でデータの更新を行なった後、該更新データに基づきマスタデータベース２のデータを更新するサイクル（ロングトランザクション）を行なう。マスタデータベース２は、マスタデータベース２上の各データ毎に該データを占有しているロングトランザクションの識別子であるロック制御フラグ４１と、データ識別子４２と、データ実体が格納されるカラム４３からなるテーブル４を含んでいる。ローカルデータベース３は、マスタデータベース２内のテーブル４に対応し、データ識別子５１とデータ実体が格納されるカラム５２からなるテーブル５を含んでいる。データベース管理システム１外にはデータベースの利用者６が存在し、利用者間の対話手段７が設けられている。
【００１１】
図２はデータベース管理システム１における排他制御動作のフローチャートである。利用者が更新対象データを特定する条件式とともにロングトランザクションの開始要求を行なうと、要求のあった利用者の利用者識別子と払い出されたロングトランザクション識別子がトランザクション管理表１２に格納される。あるデータ（レコード）の占有（ロック）要求時は、まず当該データのロック制御フラグ４１を検査する（ステップ８１）。すでにロック済み、すなわち別のロングトランザクション識別子が設定されているかどうか調べる（ステップ８２）。別のロングトランザクション識別子が設定されていなければ、マスタデータベース２内のテーブル４のロック制御フラグ４１に当該ロングトランザクション識別子を設定する（ステップ８８）。別のロングトランザクション識別子が設定されていれば、まず先行のロングトランザクションのトランザクション識別子を得る（ステップ８３）。次に、トランザクション管理表１２から、先行のロングトランザクションに対応する利用者識別子を得る（ステップ８４）。次に、電話等の対話手段７を用いて、先行ロングトランザクションの利用者と占有の優先権について調整する（ステップ８５，８６）。当該ロングトランザクションが優先権を得られなかった場合は、当該データに対する更新は断念し、更新対象データから除外する（ステップ８７）。当該ロングトランザクションが優先権を得た場合は、当該データのロック制御フラグ４１に当該ロングトランザクション識別子を設定（書き換えを含む）し、データのロック状態を設定する（ステップ８８）。
【００１２】
なお、あるデータについてロック状態の設定が不要になった場合は、随時、該データに付帯するロック制御フラグ４１のロングトランザクション識別子を削除する。また、ロングトランザクション実行中に、当該ロングトランザクションで占有していないマスタデータベース２上のデータを、当該ロングトランザクションで新たに占有する必要が生じた場合は、該データのロック制御フラグ４１をチェックし、ロングトランザクション開始時と同様の処理を行なう。また、ロングトランザクション終了時には、当該ロングトランザクションで占有したデータのロック制御フラグ４１から当該ロングトランザクション識別子を削除するとともに、トランザクション管理表１２からロングトランザクション識別子と利用者識別子を削除する。
【００１３】
図３は、初期状態で、ある利用者（仮にＡ氏）がロングトランザクションの開始要求を行い、マスタデータベース２のデータ集合の一部をローカルデータベース３に複写した様子を示す図である。図４は、Ａ氏のロングトランザクション実行期間中に、別の利用者（仮にＢ氏）が、ロングトランザクションを開始した時の様子を示す図である。Ｂ氏は、データ識別子４２がＭのデータについて、図３のテーブル４からロック制御フラグ４１が“００００１”であることを知り、さらにトランザクション管理表１２からロングトランザクション識別子“００００１”のロングトランザクションの利用者がＡ氏であることを知る。そこで、Ｂ氏はＡ氏と占有権の調整を行ない、占有権を獲得した。その結果、Ａ氏のローカルデータベース３からデータ識別子Ｍのデータは削除され、代りにＢ氏のローカルデータベース３に加えられる。そして、マスタデータベース２のデータ識別子Ｍのロック制御フラグ４１が“００００２”に書き換えられる。
【００１４】
図４に示すように、あるデータ集合を占有対象として複数のロングトランザクションが同じ期間に実行されても、占有（ロック）するデータの単位を最小のレコード単位としているため、データのアクセス競合を極小化することができる。さらに、ロック制御フラグ４１、トランザクション管理表１２により、占有している利用者が特定できるため、アクセス競合が発生した場合でも、占有優先権の調整が可能であり、デッドロックを回避することができる。
【００１５】
【発明の効果】
以上説明したように本発明は、１つのデータに対して複数のトランザクションから占有要求があった場合、占有要求の競合が発生した都度、トランザクション間、即ちトランザクションを実行している利用者間で該データの占有権を調整して、業務上最も優先すべきトランザクションに該データの占有権を遅滞なく変更できるようにしたことにより、アクセス競合の極小化とデッドロックの回避が可能となるため、ＣＡＤ／ＣＡＭあるいはガス・水道・電気等の施設設計業務のように、大きな図面をベースに図形データや属性データを更新する作業を複数の作業者で分担して実施する際に、待ち時間を少なくし、効率的な業務遂行が図れる効果がある。
【図面の簡単な説明】
【図１】本発明の一実施例のシステム構成図である。
【図２】データベース管理システム１における排他制御動作のフローチャートである。
【図３】初期状態である利用者がロングトランザクションの開始要求を行ない、マスタデータベース２のデータ集合の一部をローカルデータベース３に複写する動作の説明図である。
【図４】先行利用者がロングトランザクション実行期間中に、別の利用者がロングトランザクションを開始したときの説明図である。
【符号の説明】
１    データベース管理システム
２    マスタデータベース
３    ローカルデータベース
４    マスタデータベース２内のテーブル
５    テーブル４に対応するローカルデータベース３内のテーブル
６    データベースの利用者
７    対話手段
１１    ロングトランザクション識別子発番機構
１２    トランザクション管理表
１３    データ識別子発番機構
４１    ロック制御フラグ
４２    データ識別子の格納カラム
４３    テーブル４のデータ実体を格納するカラム
５１    テーブル５におけるデータ識別子の格納カラム
５２    テーブル５のデータ実体を格納するカラム
８１〜８８    ステップ
【図１】
0003621433.tif 000002
【図２】
0003621433.tif 000003
【図３】
0003621433.tif 000004
【図４】
0003621433.tif 000005