(57)【要約】【課題】  簡易な構成によりデータベースの内容に不整合が生じないよう、排他制御を行う。【解決手段】  データベースサーバ１００と１０１とはデータベースに同じデータを格納している。そして、データのロックに関するタイムアウト時間は、データベースサーバ１０１よりデータベースサーバ１００の方が短く設定されている。データを更新しようとするトランザクションが競合すると、データベースサーバ１００に対してロックをかけたトランザクション以外の競合トランザクションは、タイムアウト発生により更なるロックに失敗し、すでにかけたロックを解除する。このため、データベースサーバ１００に対してロックをかけたトランザクションは、データベースサーバ１０１からロックを獲得でき、不整合を引き起こすことなくデータを更新することができる。【選択図】  図１
2005310012.tif 000002
【特許請求の範囲】
【請求項１】
同一の内容が複製されている複数のデータベースを格納するデータベースシステムであって、
データを更新するトランザクションを受け付ける受け付け手段と、
前記受け付け手段で受け付けたトランザクションで指定されたデータに対応する各データベース上のデータを指定された順序でデータベース毎にロックする排他制御手段と、
前記排他制御手段でデータがロックされた場合に、ロックされたデータを更新するデータ更新手段と、
を具備し、
前記排他制御手段は、
前記受け付け手段において、ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、
該複数のトランザクションがデータをロックする順序が異なるか否かを判別し、
前記複数のトランザクションのデータをロックする順序が異なることを判別した場合に、さらに該複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、
該更新を許可すべきトランザクションのために前記データをロックすること、
を特徴とするデータベースシステム。
【請求項２】
前記排他制御手段は、該更新を許可すべきトランザクションでないトランザクションが前記データをロックしている場合には、そのロックを解除した後に、更新を許可すべきトランザクションのために前記データをロックする、ことを特徴とする請求項１に記載のデータベースシステム。
【請求項３】
１つのデータベースに対し、データのロックに関し、他のデータベースと比較して短いタイムアウト時間が設定されており、
前記排他制御手段は、
データをロックする順序が異なることを、タイムアウトが発生したか否かにより判別し、
前記複数のトランザクションのうち、最も短いタイムアウト時間が設定されているデータベース上のデータをロックしているトランザクションを前記更新を許可すべきトランザクションとして判別するものであること、
を特徴とする請求項１または２に記載のデータベースシステム。
【請求項４】
同一の内容が複製されている複数のデータベースを格納するデータベースシステムが、
データを更新するトランザクションを受け付ける受け付けステップと、
前記受け付けステップで受け付けたトランザクションで指定されたデータに対応する各データベース上のデータを指定された順序でデータベース毎にロックする排他制御ステップと、
前記排他制御ステップでデータがロックされた場合に、ロックされたデータを更新するデータ更新ステップと、
を備え、
前記排他制御ステップは、
前記受け付けステップにおいて、ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、該複数のトランザクションがデータをロックする順序が異なるか否かを判別し、
複数のトランザクションのデータをロックする順序が異なることを判別した場合に、該複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、該更新を許可すべきトランザクションのために前記データをロックすること、
を特徴とするデータベース不整合回避方法。
【請求項５】
同一の内容が複製されている複数のデータベースを格納するコンピュータ装置を、
データベースに格納されているデータを更新するトランザクションを受け付け、
前記トランザクションで指定されたデータベース上のデータを指定された順序でロックして、
ロックされたデータを更新する、
データベース装置であって、
ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、該複数のトランザクションのデータをロックする順序が異なるか否かを判別し、
ロックする順序が異なる場合に、
前記複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、
該更新を許可すべきトランザクションのために前記データをロックする、
データベース装置として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステム、データベース不整合回避方法およびプログラムに関する。
【背景技術】
【０００２】
システムの可用性向上のため、データベースサーバを複数台用意し、データベースの冗長化を図る仕組みを構築する場合、各データベースに格納されているデータが一致していなければならない。
【０００３】
しかし、データベース間で同一のテーブル内の同一レコードに対する更新トランザクションの実行順序が異なった場合に、データベース間で格納されているデータが一致しなくなることがある。
【０００４】
例えば、同じデータを格納するデータベースＸ、Ｙから構成され、２つの更新トランザクションＡ、Ｂが、ほぼ同時に、ある同じデータを更新する場合を例に説明する。この場合、更新トランザクションＡはデータベースＸ、Ｙの順にデータを更新し、更新トランザクションＢはデータベースＹ、Ｘの順にデータを更新すると、データベースＸには更新トランザクションＢが更新したデータが格納され、データベースＹには更新トランザクションＡが更新したデータが格納される。したがって、データが一致しなくなる。
【０００５】
更新トランザクションの際にすべてのデータベースをロックできた場合に更新できるようにすると、上記場合では、デッドロックが発生し、データベースシステムのスループットが低下する。
【０００６】
デッドロックの発生を回避するため、例えば、特許文献１に記載されたデータベースシステムでは、ロックに関する排他制御処理のデータ単位で、複数のアプリケーションプログラムから不定期に発行される更新トランザクションをデータベース管理システムが受け取り、更新トランザクションの実行順序が各データベース間で異ならないように、シーケンシャルに実行する。この方法により、デッドロックの発生を防止しつつ、各データベースに格納されているデータの整合性を保っている。
【特許文献１】特開平１０−２８３２４３号公報（第４、５頁、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記データベース管理システムでは、更新トランザクションを一括して受け取るデータベース管理システムが性能向上のボトルネックとなるという点がある。例えば、同じデータを更新する２つの更新トランザクションがあり、これらの更新トランザクションが実行されるタイミングが異なっていれば、本来、デッドロック回避制御を実行しなくてもよい。しかし、上記データベース管理システムでは、これらの更新トランザクションが同じロックに関する排他制御処理のデータ単位にあると、デッドロック回避制御を実行してしまう。
【０００８】
本発明は、上記問題点に鑑みてなされたもので、データベースの不整合を防止するデータベースシステム、データベース不整合回避方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、この発明の第１の観点にかかるデータベースシステムは、
同一の内容が複製されている複数のデータベースを格納するデータベースシステムであって、
データを更新するトランザクションを受け付ける受け付け手段と、
前記受け付け手段で受け付けたトランザクションで指定されたデータに対応する各データベース上のデータを指定された順序でデータベース毎にロックする排他制御手段と、
前記排他制御手段でデータがロックされた場合に、ロックされたデータを更新するデータ更新手段と、
を具備し、
前記排他制御手段は、
前記受け付け手段において、ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、
該複数のトランザクションがデータをロックする順序が異なるか否かを判別し、
前記複数のトランザクションのデータをロックする順序が異なることを判別した場合に、さらに該複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、
該更新を許可すべきトランザクションのために前記データをロックすること、
を特徴とする。
【００１０】
この発明によれば、ほぼ同時に同一のデータを更新する、複数のトランザクションのデータベースをロックする順序が異なることを判別し、複数のトランザクションのうち、所定の基準に基づいて、データを更新できるトランザクションを判別する。そして、データを更新できるトランザクションのためにデータをロックする。このため、本データベースシステムは、デッドロックの発生を回避しつつ、データベース間のデータの不整合を回避してデータを更新（コミット）できる。また、本データベースシステムが、複数のトランザクションのデータをロックする順序が異なることを判別するのは、複数のトランザクションがほぼ同時に同一のデータを更新する場合であり、複数のトランザクションが同一のデータを更新する場合であっても、更新するタイミングが異なる場合には、データをロックする順序が異なることを判別する必要はない。
【００１１】
上記データベースシステムにおいて、
前記排他制御手段は、該更新を許可すべきトランザクションでないトランザクションが前記データをロックしている場合には、そのロックを解除した後に、更新を許可すべきトランザクションのために前記データをロックする、ことが望ましい。
【００１２】
上記データベースシステムにおいて、
１つのデータベースに対し、データのロックに関し、他のデータベースと比較して短いタイムアウト時間が設定されていることが望ましい。
この場合、前記排他制御手段は、
データをロックする順序が異なることを、タイムアウトが発生したか否かにより判別し、
前記複数のトランザクションのうち、最も短いタイムアウト時間が設定されているデータベース上のデータをロックしているトランザクションを前記更新を許可すべきトランザクションとして判別する。
【００１３】
この発明によれば、データのロックに関し、１つのデータベースのタイムアウト時間が他のデータベースのタイムアウト時間より、短く設定されている。このため、あるデータベースでタイムアウトが発生すると、本データベースシステムは複数のトランザクションのデータをロックする順序が異なっていることが判別できる。この場合、タイムアウト時間が最も短く設定されているデータをロックしたトランザクションが、データを更新する。
【００１４】
この発明の第２の観点にかかるデータベース不整合回避方法は、
同一の内容が複製されている複数のデータベースを格納するデータベースシステムが、
データを更新するトランザクションを受け付ける受け付けステップと、
前記受け付けステップで受け付けたトランザクションで指定されたデータに対応する各データベース上のデータを指定された順序でデータベース毎にロックする排他制御ステップと、
前記排他制御ステップでデータがロックされた場合に、ロックされたデータを更新するデータ更新ステップと、
を備え、
前記排他制御ステップは、
前記受け付けステップにおいて、ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、該複数のトランザクションがデータをロックする順序が異なるか否かを判別し、
複数のトランザクションのデータをロックする順序が異なることを判別した場合に、該複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、該更新を許可すべきトランザクションのために前記データをロックすること、
を特徴とする。
【００１５】
この発明の第３の観点にかかるプログラムは、
同一の内容が複製されている複数のデータベースを格納するコンピュータ装置を、
データベースに格納されているデータを更新するトランザクションを受け付け、
前記トランザクションで指定されたデータベース上のデータを指定された順序でロックして、
ロックされたデータを更新する、
データベース装置であって、
ほぼ同時に同一のデータを更新する複数のトランザクションを受け付けた場合に、該複数のトランザクションのデータをロックする順序が異なるか否かを判別し、
ロックする順序が異なる場合に、
前記複数のトランザクションのうち、所定の基準に従って、データの更新を許可すべきトランザクションを判別し、
該更新を許可すべきトランザクションのために前記データをロックする、
データベース装置として機能させる。
【発明の効果】
【００１６】
本発明によれば、同一のデータに対する複数のトランザクションがほぼ同時に実行された場合に、複数のデータベース間で格納されているデータに不整合が生じることを回避できる。
【発明を実施するための最良の形態】
【００１７】
本発明にかかる実施の形態を、以下図面を参照して説明する。
以下、データベースの更新とは、フィールド値の更新、テーブルやレコード、フィールドの生成・追加・削除などのデータベースに格納されているデータの内容を変更すること一般を指すものとする。
【００１８】
図１は、本発明の実施の形態にかかるデータベースシステムの構成を示すブロック図である。図示するように、本実施の形態にかかるデータベースシステム１は、通信ネットワークＣを介して相互接続された、データベースサーバ１００、１０１と、クライアント端末２００、２０１とから構成される。
【００１９】
通信ネットワークＣは、例えば、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）などの所定の通信プロトコルに基づくＬＡＮ（Local Area Network）などの通信ネットワークである。なお、データベースシステム１内での通信遅延については無視する。
【００２０】
データベースサーバ１００は、クライアント端末２００と２０１からトランザクションを受け付け、処理結果に応じたデータをトランザクションを送信してきたクライアント端末に送信する。ここで、トランザクションは、データベースに格納されているデータを更新するものと更新しないものとに分類することができる。以下、データベースに格納されているデータを更新するトランザクションを更新トランザクションと称し、データを更新しないトランザクションを参照トランザクションと称する。
【００２１】
データベースサーバ１００は、更新トランザクションを受け付けると、当該更新トランザクションで指定されたデータをロックする。その後、当該更新トランザクションを送信したクライアント端末２００、２０１からデータを更新する旨の指示を受信すると、データを更新し、ロックを解除する。すでに、別の更新トランザクションにより、データがロックされている場合、データベースサーバ１００は、データをロックする旨の要求を拒否する。さらに、所定の時間（以下、タイムアウト時間と称する）が経過するまで、ロック状態が継続していれば、データベースサーバ１００はタイムアウトが発生したことをデータベースサーバ１０１と、データのロック要求を拒否したクライアント端末とに送信する。
【００２２】
データベースサーバ１００は、参照トランザクションを受け付けると、参照しようとしているデータが更新トランザクションによりロックされていなければ、データベースにアクセスし、参照トランザクションで必要なデータを読み出し、トランザクションを送信してきたクライアント端末２００あるいは２０１に送信する。
【００２３】
図２に示すように、データベースサーバ１００は、制御部１１０と、プログラム格納部１２０と、入力制御部１３０と、出力制御部１４０と、通信制御部１５０と、データベース（ＤＢ）１６０とを備える。
【００２４】
制御部１１０は、中央演算処理装置（ＣＰＵ、Central Processing Unit）やワークエリアとなる記憶装置（ＲＡＭ（Random Access Memory））等から構成される。制御部１１０は、プログラム格納部１２０に格納されている所定の動作プログラム等を読み出して実行することにより、例えば図３に示すような、トランザクション管理部１１１、ロック管理部１１２、タイムアウト管理部１１３等を実現する。そして、これら各部が以下に示すような処理を行って、データベースサーバ１０１内のＤＢに格納されている内容と同期をとる。
【００２５】
図３を参照して、制御部１１０が実現する各機能について説明する。
トランザクション管理部１１１は、通信ネットワークＣと通信制御部１５０とを介して、クライアント端末２００と２０１とから送信されたトランザクションを受け付け、トランザクションの処理結果を送信してきたクライアント端末２００あるいは２０１に返信する。参照トランザクションの場合には、トランザクション管理部１１１は、ＤＢ１６０からこの参照トランザクションで必要となるデータを読み出し、クライアント端末２００あるいは２０１に送信する。更新トランザクションの場合には、ＤＢ１６０内の更新トランザクションで指定されたデータに対し、ロックをかけ、かけたロックをロック管理部１１２に管理させる。
【００２６】
ロック管理部１１２は、トランザクションがＤＢ１６０に対して要求したデータのロックを、ロック管理情報として管理する。ロック管理部１１２は、どのデータに対してロックがかけられているか、そして、そのロックはどのトランザクションが要求したものなのかを管理する。
【００２７】
ロック管理部１１２は、トランザクション管理部１１１からロックの管理を指示されると、当該ロックをかけたデータとロックを要求したトランザクションとを組にして（以下、ロック情報と称する）、ロック管理情報に追加する。そして、トランザクション管理部１１１が、データの参照や更新などが正常終了したことを示す旨の情報を通知してきた際に、関係するロック情報をロック管理情報から削除する。また、データ更新が競合した場合には、関係するロック情報に競合していることを示すリンク情報を付加する。このリンク情報は、一方の更新トランザクションが終了した際に削除される。
【００２８】
また、ロック管理部１１２は、新たなトランザクションがデータベースサーバ１００に送信されると、タイムアウト管理部１１３に時間を計測させ、所定の時間（以下、タイムアウト時間と称する）を経過した場合にその旨を通知することを指示する。
【００２９】
タイムアウト管理部１１３は、タイマなどを備え、トランザクションが最初にデータベースサーバ１００に送信してきた時点からの経過時間を計測し、タイムアウト時間を経過すると、その旨をロック管理部１１２に通知する。
【００３０】
図２に戻って、プログラム格納部１２０は、ＲＯＭ（Read Only Memory）等の記憶装置から構成され、制御部１１０が実行する動作プログラムを記憶する。
【００３１】
入力制御部１３０は、例えば、キーボードやポインティングデバイス等の入力装置１３を接続し、入力装置１３から入力された制御部１１０への指示などを受け付けて制御部１１０に伝達する。
【００３２】
出力制御部１４０は、例えば、ディスプレイなどの出力装置１４を接続し、制御部１１０の処理結果などを必要に応じて出力装置１４に出力する。
【００３３】
通信制御部１５０は、例えば、ＮＩＣ（Network Interface Card）やルータなどの通信装置から構成され、データベースサーバ１００と通信ネットワークＣとを接続し、データベースサーバ１０１と、クライアント端末２００、２０１との通信を行う。
【００３４】
ＤＢ１６０は、本データベースシステム１の利用者が読み書きできるデータを格納する。
【００３５】
データベースサーバ１０１の構成はデータベースサーバ１００の構成と同一である。なお、データベースサーバ１０１のタイムアウト時間はデータベースサーバ１００のタイムアウト時間より短く設定される。このように設定することにより、データベースサーバ１００と１０１とは以下に示すようなデータ更新処理を実行することができる。
【００３６】
クライアント端末２００は、このデータベースシステム１を利用する者が使用する端末装置であり、通常のパーソナルコンピュータ等から構成される。図４に図示するように、クライアント端末２００は、ＣＰＵなどの制御部２１と、ハードディスクなどの記憶部２２と、キーボードなどの入力部２３と、ディスプレイなどの出力部２４と、ＮＩＣなどの通信制御部２５とを備える。なお、記憶部２２には、データベースサーバ１００、１０１内のＤＢに格納されているデータにアクセスして所定の処理を実行するアプリケーションプログラムと、本発明の実施の形態に特有なデータベースクライアントプログラムと、がインストールされているものとする。
クライアント端末２０１の構成はクライアント端末２００の構成と同一である。
【００３７】
クライアント端末２００と２０１とで、利用者はアプリケーションプログラムを操作して、データベース内のデータを検索したり更新したりする。アプリケーションプログラムは利用者からの指示に応じて、データベースを操作する指示をデータベースクライアントプログラムに送信する。データベースクライアントプログラムは、データベースを操作する指示をトランザクション単位に分割して各データベースサーバに送信する。そして、各データベースサーバから送信された処理結果を示す情報に基づいて、トランザクションをリトライするか、アプリケーションプログラムに処理結果（例えば、データベースから読み出したデータや、処理結果が成功したか否かを示す情報など）を送信するかを判別し、処理を継続する。
【００３８】
ここで、データをロックする際のリトライ時間間隔を、ロック要求がタイムアウトした際のリトライ時間間隔より短く設定することが望ましい。このように設定すれば、例えば、データベースサーバ１０１側でロックが解除された後、ロックを解除された更新トランザクションがデータのロックを再要求するより前に、データベースサーバ１００内のデータベースに対しロックをかけた更新トランザクションが、データベースサーバ１０１内のデータベースに対しロックをかけることが保証される。
【００３９】
以下、図面を参照して本実施の形態にかかるデータベースシステム１の動作例について説明する。なお、動作例において、データベースサーバ１００、１０１およびクライアント端末２００、２０１は、単にサーバ１００、１０１、端末２００、２０１と称する。
【００４０】
図５は、端末２００からサーバ１００、１０１に格納されている各データベースのデータを更新する場合の、端末２００のデータ更新処理時の動作を示したフローチャートである。図６は、この場合のサーバ１００のデータ更新処理時の動作を示したフローチャートである。
【００４１】
第１の動作例は、端末２００が更新トランザクションの実行をサーバ１００、１０１に要求する場合であり、競合する他のトランザクションは無いものとする。第２の動作例は、端末２００と２０１とが更新トランザクションの実行をサーバ１００、１０１に要求する場合であり、これらの更新トランザクションは競合するものとする。
【００４２】
（第１の動作例）
第１の動作例では、サーバ１００の動作とサーバ１０１の動作とは同一である。
まず、端末２００は、通信ネットワークＣを介して、更新対象のデータのロックをサーバ１００と１０１とに指示を出すとともに（図５：ステップＳ１０１）、更新するデータをサーバ１００と１０１とに送信する。
【００４３】
すると、サーバ１００は更新データとロック指示とを受け付け（図６：ステップＳ２０１）、更新対象のデータのロックを試みる（ステップＳ２０２）。そして、トランザクション管理部１１１は、ロック管理部１１２にロックを管理させる指示を出す。
【００４４】
次に、サーバ１００はロックが成功したか否かを判別する（ステップＳ２０３）。当該データをロックできていれば（ステップＳ２０３：ＹＥＳ）、その旨を示す情報を端末２００に送信し、端末２００からデータの確定指示が来るのを待機する（ステップＳ２０４）。当該データをロックできなければ（ステップＳ２０３：ＮＯ）、ステップＳ２０２に処理を戻し、再びロックを試みる。ここで、トランザクション管理部１１１は、すでに当該データが他のトランザクションによりロックされ、競合状態にあるか否かを、ロック管理部１１２が保持しているロック管理情報に基づいて判別する。競合状態にあると判別すれば、競合対象となっているトランザクションに対応するロック情報とこの要求に対応するロック情報との間にリンク情報を設定する。
【００４５】
端末２００は、サーバ１００と１０１とから当該データをロックしたという旨を示す情報が送信されたか否かを判別する（図５：ステップＳ１０２）。すべてのサーバから当該データをロックしたという旨を示す情報が送信されたと判別すれば（ステップＳ１０２：ＹＥＳ）、端末２００はサーバ１００と１０１とにデータの更新を確定する旨の指示を送信する（ステップＳ１０３）。
【００４６】
すると、サーバ１００は、送信されているデータをＤＢ１６０に格納し、データを更新し（図６：ステップＳ２０６）、更新した旨を示す情報を端末２００に送信する。
【００４７】
最後に、端末２００は、サーバ１００と１０１に対し、ロックしたデータの解放を指示し（図５：ステップＳ１０４）、データ更新処理を終了する。
【００４８】
ロックしたデータの解放の指示を受けたサーバ１００は、データに対してかけていたロックを解除し（図６：ステップＳ２０７）、データ更新処理を終了する。ここで、サーバ１００は、ロック管理部１１２に作成されたロック情報を削除する。もし、このロック情報と関連づけられたロック情報がロック管理情報に含まれていれば、ロック管理部１１２はリンク情報を削除する。
【００４９】
一方、タイムアウトなどの理由により、サーバ１００あるいは１０１からロックに失敗した旨が送信され、サーバ１００、１０１の双方から当該データをロックしたという旨を示す情報が送信されなかったと判別すれば（図５：ステップＳ１０２：ＮＯ）、端末２００は、サーバ１００と１０１とに対し、ロック解除の指示を送信する（ステップＳ１０５）。そして、ステップＳ１０１に処理を戻し、すべてのデータベースの当該データにロックをかけることを繰り返す。ただし、第１の動作例では、競合する更新トランザクションは存在しないので、端末２００はサーバ１００、１０１の双方から当該データをロックしたという旨を示す情報が送信されなかったと判別することはない。なお、図６のステップＳ２０９およびＳ２１０でのサーバ１００の動作に関しては、第２の動作例で説明を行う。
【００５０】
上述したデータ更新処理は、更新トランザクション毎に実行される。ロックするデータが他の更新トランザクションと競合しない限り、各更新トランザクションは正常に終了する。
【００５１】
なお、本動作例において、端末２００がデータ更新の指示とロック解除の指示とを同時に出すようにしてもよい。
【００５２】
（第２の動作例）
第２の動作例は、第１の動作例で使用した図５、６と共に、図７を参照して説明する。図７は、サーバ１０１のデータ更新処理時の動作を示したフローチャートである。図７の各ステップにおいて、図６に示したステップと同じ処理には、下２桁に同じ数字を付している。以下、動作例１で説明したステップについては説明を省略する。
【００５３】
本動作例では、端末２００から送信された更新トランザクション（以下、トランザクション１と称する）はサーバ１００、１０１の順にデータをロックしようとし、端末２０１から送信された更新トランザクション（以下、トランザクション２）はサーバ１０１、１００の順にデータをロックしようとする。そして、端末２００から送信された更新トランザクションはサーバ１００に格納されているデータをロックし、端末２０１から送信された更新トランザクションはサーバ１０１に格納されているデータをロックしているものとする。この場面で、端末２００、２０１側では図５のステップＳ１０１の処理が終了している。トランザクション１に関し、サーバ１００側では、図６のステップＳ２０４の処理中であり、サーバ１０１側では、図７のステップＳ３０１が終了している。また、トランザクション２に関し、サーバ１０１側では、図７のステップＳ３０４の処理中であり、サーバ１００では、図６のステップＳ２０１が終了している。
【００５４】
トランザクション１に関し、サーバ１０１は、データをロックしようとする（図７：ステップＳ３０２）。しかし、トランザクション２がそのデータをロックしているので、ロックに失敗する。したがって、サーバ１０１は、ロックに失敗したと判別する（ステップＳ３０３：ＮＯ）。次に、サーバ１０１は、タイムアウト管理部から当該ロック要求に関しタイムアウトが通知されているか否かに基づいて、データのロックに関し、タイムアウトが発生したか否かを判別する（ステップＳ３０９）。上述したように、サーバ１００のタイムアウト時間がサーバ１０１のタイムアウト時間より短く設定されているため、タイムアウトが発生していないと判別する（ステップＳ３０９：ＮＯ）。したがって、サーバ１０１は、ステップＳ３０２に処理を戻す。
【００５５】
一方、トランザクション２に関し、サーバ１００は、データをロックしようとする（図６：ステップＳ２０２）。しかし、トランザクション１がそのデータをロックしているので、ロックに失敗する。したがって、サーバ１００は、ロックに失敗したと判別する（ステップＳ２０３：ＮＯ）。次に、サーバ１００は、タイムアウト管理部１１３から当該ロック要求に関しタイムアウトが通知されているか否かに基づいて、データのロックに関し、タイムアウトが発生したか否かを判別する（ステップＳ２０９）。タイムアウトが発生していないと判別した場合には（ステップＳ２０９：ＮＯ）、サーバ１００は処理をステップＳ２０２に戻し、データのロックをリトライする。上述したように、サーバ１００のタイムアウト時間がサーバ１０１のタイムアウト時間より短く設定されているため、何回かロックをかけることをリトライしているうちに、タイムアウトが発生する。すると、サーバ１００はタイムアウトが発生したと判別し（ステップＳ２０９：ＹＥＳ）、端末２０１に対し、トランザクション２のロックが失敗したことを示す旨の情報を送信する（ステップＳ２１０）。トランザクション２に関し、データ更新処理は異常終了する。このとき、ロック管理部１１２は、異常終了であるので、対応するロック情報は削除しない。
【００５６】
すると、端末２０１は、サーバ１００からトランザクション２のロックが失敗したことを示す旨の情報を受信する。すると、ステップＳ１０２では、データのロックに失敗したと判別し（図５：ステップＳ１０２：ＮＯ）、サーバ１００と１０１に対して、ロック解除の指示を出す（ステップＳ１０５）。そして、ステップＳ１０１に処理を戻し、再び、サーバ１０１にデータのロックの指示を出す。ただ、トランザクション１が当該データに対しロックをかけている間は、再びタイムアウトが発生し、ステップＳ１０１とＳ１０２とＳ１０５を繰り返す。
【００５７】
トランザクション２に関し、サーバ１０１は、端末２０１からロックの解除を指示する旨の情報を受信すると（図７：ステップＳ３０５：ＹＥＳ）、トランザクション２がすべてのデータベース上のデータに対しロックを獲得できなかったと判別し、トランザクション２がかけたロックを解除し（ステップＳ３０８）、データ更新処理を異常終了する。この時、ロック管理部は、対応するロック情報とリンク情報とを削除する。同様に、サーバ１００も、トランザクション２に関し、データ更新処理を異常終了する。この時、ロック管理部１１２は、対応するロック情報とリンク情報とを削除する。
【００５８】
トランザクション１に関し、サーバ１０１は、データをロックしようとする（図７：ステップＳ３０２）。しかし、トランザクション２がそのデータをロックしているので、ロックに失敗する。したがって、サーバ１０１は、ロックに失敗したと判別し（ステップＳ３０３：ＮＯ）、次に、サーバ１０１のタイムアウト管理部から当該ロック要求に関しタイムアウトが通知されているか否かに基づいて、データのロックに関し、タイムアウトが発生したか否かを判別する（ステップＳ３０９）。タイムアウトが発生していないと判別した場合には、サーバ１０１は処理をステップＳ３０２に戻し、データのロックをリトライする。
【００５９】
上述したように、サーバ１００のタイムアウト時間がサーバ１０１のタイムアウト時間より短く設定されているため、タイムアウトが発生する前に、トランザクション２に関し、サーバ１０１がかけたロックが解除され、サーバ１０１は当該データをロックできる。サーバ１０１は、トランザクション１のためにデータをロックできると、データがロックできたことを示す旨の情報を端末２００に送信する。
【００６０】
端末２００は、サーバ１０１からデータがロックできたことを示す旨の情報を受信すると、すべてのサーバにおいて、データをロックできたと判別し（図５：ステップＳ１０２：ＹＥＳ）、データ更新の指示をサーバ１００と１０１とに送信する（ステップＳ１０３）。以下の処理動作は第１の動作例と同一である。
【００６１】
トランザクション１によりデータが更新された後、端末２０１がデータのロックをサーバ１００と１０１とに要求すると（ステップＳ１０１）、サーバ１０１と１００とは、データをロックする（図７：ステップＳ３０２、図６：ステップＳ２０２）。以下の処理動作は第１の動作例と同一である。
【００６２】
なお、２つの更新トランザクションが同じデータを更新するものの、本動作例よりも更新するタイミングの差がもう少し長い場合（データをロックする順序は本動作例と同一とする）は、先に実行されている更新トランザクションはデータのロックを再試行することなく、データを更新することができる。そして、後に実行される更新トランザクションは最初にロックをかけようとしたときに、リトライを繰り返す。
【００６３】
なお、本動作例では、理解を容易にするため、サーバ１００のデータ更新処理のフローとサーバ１０１のデータ更新処理のフローとが異なるものとしていた。しかし、タイムアウト時間を運用途中で変更することも考えられる。サーバ間でタイムアウト時間がどのように設定されていたとしても、上述の動作を実現できるようにするため、サーバ１００のデータ更新処理のフローはサーバ１０１のデータ更新処理のフローと同一であることが望ましい。
【００６４】
以上説明したように、上記実施の形態にかかるデータベースシステム１によれば、複数の更新トランザクションのデータをロックする順序が異なることを判別し、その場合に最もタイムアウト時間の短いサーバ内のデータベースに対して、ロックを行った更新トランザクションがデータを最初に更新する。他の更新トランザクションは獲得したロックを解除されるので、再びロックの獲得からやり直す。データベースシステム１がこのように動作するため、各データベースに格納されるデータに不整合が発生しない。なお、３つ以上の更新トランザクションが競合したとしても、最もタイムアウト時間の短いサーバ内のデータベースに対して、上述した処理動作により、ロックを行った更新トランザクションがデータを最初に更新できる。
【００６５】
なお、本発明は上記実施の形態に限定されず、種々の変形および応用が可能である。例えば、上記実施の形態では、クライアントサーバ方式のデータベースシステムの場合を説明したが、データベースサーバ１００とクライアント端末２００との機能を合わせ持つ情報処理装置により、上記データベースシステムを構築してもよい。この場合、その情報装置はデータベースの複製を複数格納し、上述した処理動作を実行する。
【００６６】
また、データベースサーバの台数とクライアント端末の台数とは、上記実施例に開示した数に限られるものではなく、それぞれ任意の台数であってもよい。データのロックに関し、１つのデータベースのタイムアウト時間が他のデータベースのタイムアウト時間よりも短く設定されていれば、この場合のデータベースシステムは上記実施の形態で説明した更新処理を実行することができる。
【００６７】
また、上記動作例２では、ロック解除の指示が端末側から出されていたが、これをデータベースサーバ同士間で行うようにしてもよい。この場合、データベースサーバ側から端末側にはロックを解除した旨を示す情報が送信され、端末側ではその情報を受信してロック獲得のリトライを行う。
【００６８】
なお、本発明の実施の形態にかかるデータベースサーバ１００およびクライアント端末２００を実現するための情報処理装置は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。例えば、汎用コンピュータに、上述の処理を実行するためのプログラムを格納した媒体（ＣＤ−ＲＯＭなど）から当該プログラムをプログラム格納部１２０にインストールすることにより、上述の処理を実行するデータベースサーバ１００を構成することができる。
【００６９】
また、上述の機能を、ＯＳ（Operating System）とアプリケーションとの分担、またはＯＳとアプリケーションとの協動により実現する場合などには、ＯＳ以外の部分のみを媒体に格納してもよい。
【００７０】
また、搬送波にプログラムを重畳し、通信ネットワークを介して配信することも可能である。例えば、通信ネットワーク上の掲示板（ＢＢＳ、Bulletin Board System）に該プログラムを掲示し、ネットワークを介して該プログラムを配信してもよい。そして、このプログラムを起動し、オペレーティングシステムの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行できるように構成しても構わない。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態にかかるデータベースシステムの構成を示すブロック図である。
【図２】図１のデータベースサーバの構成を示すブロック図である。
【図３】図２の制御部に実現される機能を示す機能ブロック図である。
【図４】図１のクライアント端末の構成を示すブロック図である。
【図５】データ更新処理を説明するためのフローチャートである。
【図６】データ更新処理を説明するためのフローチャートである。
【図７】データ更新処理を説明するためのフローチャートである。
【符号の説明】
【００７２】
１      データベースシステム
１００、１０１  データベースサーバ
１１０  制御部
１２０  プログラム格納部
１３    入力装置
１３０  入力制御部
１４    出力装置
１４０  出力制御部
１５０  通信制御部
１６０  データベース
２００、２０１  クライアント端末
２１    制御部
２２    記憶部
２３    入力部
２４    出力部
２５    通信制御部
【図１】
2005310012.tif 000003
【図２】
2005310012.tif 000004
【図３】
2005310012.tif 000005
【図４】
2005310012.tif 000006
【図５】
2005310012.tif 000007
【図６】
2005310012.tif 000008
【図７】
2005310012.tif 000009