(57)【要約】【課題】後続トランザクションの待ち時間を低減しながら、先行トランザクションのログ書き込みが失敗した場合に生じる不都合を回避する技術を提供する。【解決手段】データベースが操作端末等からトランザクション完了の指示を受け付けたことを契機に、トランザクションが保持するデータのロックを解除するデータベースの制御方法を提供する。データベースは、排他制御機構とログ出力機構とログバッファを含み、ログ出力機構は、操作端末からのトランザクション完了の指示を契機にトランザクション完了のログをログバッファに格納する。排他制御機構は、トランザクション完了のログがログバッファに格納されたことを契機に該トランザクションが保持するロックを解除する。【選択図】図１
2008287548.tif 000002
【特許請求の範囲】
【請求項１】
計算機によって実行され、トランザクションの実行指示に従いデータの管理を行うデータベースの制御方法であって、
前記トランザクションの実行指示を受け付ける処理と、
前記トランザクションの実行指示で指定されたデータ更新を実行する処理と、
前記データ更新のログを出力する処理と、
前記更新したデータを排他的にロックする処理と、
前記トランザクションを完了させるトランザクション完了の指示を受け付ける処理と、
前記トランザクション完了の指示を受け付けたことを契機に、前記トランザクションが更新したデータのロックを解除する処理と、
を含むことを特徴とするデータベースの制御方法。
【請求項２】
前記トランザクション完了の指示を受け付ける処理は、
前記受け付けたトランザクション完了のログを前記計算機に設定されたログバッファに格納する処理を含み、
前記トランザクションが更新したデータのロックを解除する処理は、
前記トランザクション完了のログをログバッファに格納したことを契機に前記トランザクションが更新したデータのロックを解除することを特徴とする請求項１に記載のデータベースの制御方法。
【請求項３】
前記更新したデータを排他的にロックする処理は、
前記ロックに対してロック中を示す属性を設定して排他制御を行い、
前記トランザクションが更新したデータのロックを解除する処理は、
前記ロックに対して解除中を示す属性を設定して部分的な排他制御を行うことを特徴とする請求項２に記載のデータベースの制御方法。
【請求項４】
前記更新したデータを排他的にロックする処理は、
前記ロックに対してロック中を示す属性を設定して排他制御を行う処理を含み、
前記トランザクションが更新したデータのロックを解除する処理は、
前記トランザクション完了のログをログバッファに格納したことを契機に、前記トランザクションが更新したデータのロックに対して解除中を示す属性を設定して部分的な排他制御を行う処理と、
前記ログバッファに格納されたトランザクション完了のログを前記計算機に接続された記憶装置に格納したことを契機に、前記トランザクションが更新したデータのロックを解除する処理と、
を含むことを特徴とする請求項２に記載のデータベースの制御方法。
【請求項５】
前記トランザクションの実行中に、新たなトランザクションの実行指示を受け付ける処理と、
前記受け付けた新たなトランザクションの実行指示が参照指示または更新指示の何れであるかを判定する処理と、
前記判定した新たなトランザクションの実行指示が参照指示の場合には、前記参照指示で指定されるデータのロックが解除されるまで待機する処理と、
前記判定した新たなトランザクションの実行指示が更新指示の場合には、前記更新指示で指定されるデータのロックの属性が解除中であっても更新を実行する処理と、
を含むことを特徴とする請求項３に記載のデータベースの制御方法。
【請求項６】
前記参照指示に対して、ロック解除中のデータの参照を許可する参照許可属性を設定可能であって、
前記判定した新たなトランザクションの実行指示が参照指示の場合に、前記参照指示で指定されるデータのロックが解除されるまで待機する処理は、
前記参照指示に参照許可属性が付与されているか否かを判定する処理と、
前記参照指示に参照許可属性が付与されている場合には、参照指示の対象データのロックの属性が解除中の場合であってもデータの参照を実行する処理と、
を含むことを特徴とする請求項５に記載のデータベースの制御方法。
【請求項７】
前記データベースが管理するデータに対して、ロック解除中のデータの参照を許可する参照許可属性を設定可能であって、
前記判定した新たなトランザクションが参照指示の場合に、前記参照指示で指定されるデータのロックが解除されるまで待機する処理は、
前記参照指示で指定されたデータに参照許可属性が付与されているか否かを判定する処理と、
前記データに参照許可属性が付与されている場合には、参照指示の対象データのロックの属性が解除中の場合であってもデータの参照を実行する処理と、
を含むことを特徴とする請求項５に記載のデータベースの制御方法。
【請求項８】
前記データベースに対して、ロック解除中のデータに対する参照許可の属性を設定可能であって、
前記判定した新たなトランザクションの実行指示が参照指示の場合には、前記参照指示で指定されるデータのロックが解除されるまで待機する処理は、
前記参照指示の対象データのロックの属性が解除中の場合であってもデータの参照を実行することを特徴とする請求項５に記載のデータベースの制御方法。
【請求項９】
前記計算機は、データベースが管理するデータを退避する退避領域をさらに有し、
前記トランザクションで指定されたデータを更新する処理は、
更新前のデータを前記退避領域へ退避する処理を含み、
前記データを更新するトランザクションの実行中に、参照指示を含む新たなトランザクションを受け付ける処理と、
前記退避領域に退避されたデータのうち、トランザクション完了ログの出力が完了したトランザクションのデータを用いて、参照指示を実行する処理と、
を含むことを特徴とする請求項３に記載のデータベースの制御方法。
【請求項１０】
計算機によって実行されるデータベースが、前記データベースに対するトランザクションの実行指示を受信し、前記トランザクションを実行し、このトランザクションの実行結果を示すログを生成し、複数のログバッファを使用して、前記ログを前記計算機に接続された記憶装置へ格納するデータベースの制御方法であって、
前記計算機に設定されたログバッファに、トランザクションのログを格納する処理と、
前記ログバッファに格納されたログを前記計算機に接続された記憶装置に書き込む処理と、を含み、
前記各ログバッファに格納されたログを前記計算機に接続された記憶装置に書き込む処理は、
先行して書き込まれた全てのログの書き込みが完了したか否かを判定する処理と、
先行して書き込まれた全てのログの書き込みが完了している場合に、当該ログの書き込みが完了したと判定する処理と、
を含むことを特徴とするデータベースの制御方法。
【請求項１１】
プロセッサとメモリを備えた計算機によって実行され、トランザクションの実行指示に従いデータの管理を行うプログラムであって、
前記データベースがトランザクションの実行指示を受け付ける手順と、
前記トランザクションの実行指示で指定されたデータ更新を実行する手順と、
前記データ更新のログを前記メモリに設定されたログバッファへ出力する手順と、
前記更新したデータを排他的にロックする手順と、
前記トランザクションを完了させるトランザクション完了の指示を受け付ける手順と、
前記トランザクション完了の指示を受け付けたことを契機に、前記トランザクションが更新したデータのロックを解除する手順と、
を計算機に機能させることを特徴とするプログラム。
【請求項１２】
前記トランザクション完了指示を受け付ける手順は、
前記受け付けたトランザクション完了のログを前記ログバッファに格納する手順を含み、
前記トランザクションが更新したデータのロックを解除する手順は、
前記トランザクション完了のログをログバッファに格納したことを契機に前記トランザクションが更新したデータのロックを解除することを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記更新したデータを排他的にロックする手順は、
前記ロックに対してロック中を示す属性を設定して排他制御を行い、
前記トランザクションが更新したデータのロックを解除する手順は、
前記ロックに対して解除中を示す属性を設定して部分的な排他制御を行うことを特徴とする請求項１２に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報システムのデータ管理を行うデータベースの制御方法に関し、特にデータベースの排他制御の技術に関する。
【背景技術】
【０００２】
ＡＣＩＤ特性（Atomicity（原子性）、Consistency（一貫性）、Isolation（独立性）、Durability（永続性））は、データベースがトランザクションを処理する際の基本的な性質である。このうち原子性および永続性は、記憶装置にデータ更新記録（ログ）を書き込むことで実現される。すなわち、トランザクション完了のログが記憶装置に書き込まれたか否かによって、トランザクションが完了したか否かが一意に判定される（原子性）。また、記憶装置にログが書き込まれたトランザクションは、その結果が永続化される（永続性）。独立性はデータの排他制御（ロック）により実現される。すなわち、先行するトランザクションがデータをロックし、他のトランザクションの該当データに対する操作を制限することで、トランザクションの独立性が実現される。
【０００３】
ログ出力機構および排他制御機構を有するデータベースは以下のように動作する。データ操作の指示が操作端末１０１からデータベースに送信される。リレーショナル型データベースの場合、データ操作の指示は、ＳＱＬ文を用いて行われるのが一般的である。データベースは、操作端末からの指示に基づいてデータの操作を行い、操作端末に対して応答を返す。この際、データベースは、データの排他制御を行い、他のトランザクションからのデータ操作を制限する。操作端末は、トランザクションを終了する際に、トランザクション終了指示（コミット指示）をデータベースに送信する。データベースは、データ操作のログとトランザクション完了のログを記憶装置に書き込む。記憶装置に対するログの書き込みが完了すると、データベースは、データのロックを解除し、トランザクション完了を操作端末に通知する。
【０００４】
上記のロック技術に変えて、ＭＶＣＣ（Multi Version Concurrency Control）技術が用いられる場合もある。ＭＶＣＣ技術では、データを更新する際に、更新前のデータを退避領域に退避する。後続のトランザクションは退避領域のデータを使用して処理を行う。ＭＶＣＣ技術を用いることにより、後続のトランザクションの排他待ち時間が減少し、トランザクションの実行並列度が向上する。
【０００５】
また、ストレージのリモートコピーを利用したデータのリモートバックアップに用いるデータベースでは、ログをリモートサイトに転送するため、ログ出力に長時間を要する問題がある。そこで、データベースに複数個のログバッファを用意し、ログバッファの内容を逐次ストレージ装置に出力するログの多重転送技術が用いられる。ログの多重転送技術を用いることで、ログ出力の効率を向上することができる。
【０００６】
データベースのログ出力機構については特許文献１などに記載されている。データベースのロック機構については特許文献２などに記載されている。また、ＭＶＣＣ技術については特許文献３などに、ストレージのリモートコピーを利用したデータのリモートバックアップについては特許文献４などに、それぞれ記載されている。
【特許文献１】特開２００６−３２３８２６号公報
【特許文献２】特開２００４−３３４４６０号公報
【特許文献３】特開２００３−１４０９５１号公報
【特許文献４】特開２００６−４８１０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述のように、データベースシステムにおいて、記憶装置に対するログの書き込みは、重要な役割を果たしている。ここで、記憶装置としては、磁気記憶装置（ハードディスク装置）や不揮発性メモリなどが使用される。記憶装置にログを書き込むには一定の時間を要し、ログの書き込み時間に起因して、データのロック時間が増大する。ロック時間の増大は、後続のトランザクションの待ち時間の増大につながり、データベースシステムの性能低下をもたらす。
【０００８】
記憶装置に対するログ書き込み時間の影響を低減するため、操作端末からのトランザクション完了の指示を契機にデータのロックを解除することが考えられる。これにより、記憶装置にログが格納されるのを待たずにロックを解除できるため、後続トランザクションの待ち時間が短縮される。
【０００９】
このようにした場合、以下の問題が生じる。先行トランザクションのログの書き込みが失敗した場合、先行トランザクションのデータ操作は無効になる。そのため、先行トランザクションが更新したデータは無効なデータであり、このデータを参照した後続トランザクションは、無効なデータを参照したことになる。
【００１０】
本発明が解決しようとする一つ目の課題は、ログの書き込み時間に起因するデータのロックの時間を削減しつつ、先行トランザクションのログ書き込みが失敗した場合に生じる上記の不都合を回避する技術を提供することである。
【００１１】
なお、先行トランザクションが更新したデータを後続トランザクションが更新した場合は、以下のようにすることで不都合を回避できる。すなわち、先行トランザクションのログの書き込みが失敗した場合に、後続トランザクションも無効にすれば不都合は生じない。そこで、本発明では、後続トランザクションがデータを参照した場合に生じる不都合を回避する技術を提供する。
【００１２】
また、背景技術に記載したＭＶＣＣ技術を用いた場合にも、先行トランザクションのログ書き込みが失敗した場合に同様の不都合が生じる。ＭＶＣＣ技術では、後続トランザクションは、退避領域に格納された更新前のデータを参照する。しかしながら、そのデータを更新した先行トランザクションのログ書き込みが失敗すれば、そのデータ操作は無効になる。そのため、先行トランザクションが更新したデータは無効なデータであり、このデータを参照した後続トランザクションは、無効なデータを参照したことになる。
【００１３】
本発明が解決しようとする二つ目の課題は、ＭＶＣＣ技術を用いた場合に、先行トランザクションのログ書き込みの失敗により生じる上記の不都合を回避する技術を提供することである。
【００１４】
また、背景技術に記載した、リモートコピーを利用したデータのリモートバックアップに用いるデータベースでは、ログの多重転送技術が用いられる。ログの多重転送技術を用いた場合、データ更新ログが先行して転送され、それに続いてトランザクション完了ログが転送される場合がある。このような状況で、先行するデータ更新ログの転送が失敗し、後続のトランザクション完了ログの出力だけが成功すると、データ更新ログが消失したにも拘わらず、トランザクションが完了したと判断してしまう可能性がある。
【００１５】
本発明が解決しようとする三つ目の課題は、ログの多重転送技術を用いた場合に、先行のログ書き込みが失敗した場合に生じる上記の不都合を回避する技術を提供することである。
【課題を解決するための手段】
【００１６】
本発明は、データベースが操作端末等からトランザクション完了の指示を受け付けたことを契機に、トランザクションが保持するデータのロックを解除するデータベースの制御方法を提供する。データベースは、排他制御機構とログ出力機構とログバッファを含み、ログ出力機構は、操作端末からのトランザクション完了の指示を契機にトランザクション完了のログをログバッファに格納する。排他制御機構は、トランザクション完了のログがログバッファに格納されたことを契機に該トランザクションが保持するロックを解除する。
【００１７】
排他制御機構は、データのロックに「ロック中」または「解除中」の属性を付与して排他制御を行う。データベースは、操作端末から「解除中」のロックをされているデータに対する操作指示を受けた場合、操作指示が参照指示であるか更新指示であるかを判定し、操作指示が参照指示である場合にはロックが解除されるまで待機し、操作指示が更新指示である場合にはデータの更新を実行する。
【００１８】
また、操作端末は、参照指示に対する「ロック解除中のデータの参照許可」の属性や、データに対する「ロック解除中の参照許可」の属性を付与することができる。
【００１９】
また、データベースは、さらにデータ退避領域を含み、排他制御機構は、データを更新する際に、更新前のデータをデータ退避領域に退避する。データベースは、他のトランザクションの該データに対する参照指示を受けた場合に該データ退避領域のデータを参照する。この際、記憶装置にトランザクション完了のログが出力されたトランザクションのうち、最新のトランザクションが更新したデータを用いて参照指示を実行する。
また、ログの多重転送を用いる場合、ログ出力機構は、先行する全てのログ出力の完了している場合に、当該ログ出力が完了したと判断する。
【発明の効果】
【００２０】
したがって、本発明により、後続トランザクションが不正なデータを参照する問題を回避しつつ、後続トランザクションの更新指示を実行することができる。そのため、後続トランザクションの排他待ち時間を削減することができる。これにより、データベースシステムの性能を向上することができる。
【００２１】
また、参照指示に対する「ロック解除中のデータの参照許可」の属性や、データに対する「ロック解除中の参照許可」の属性を付与することにより、先行トランザクションのログ出力を待たずに後続トランザクションの参照指示を実行することが可能となり、後続トランザクションの排他待ち時間を削減することができる。
【００２２】
また、トランザクション完了のログの出力の状況により、データ退避領域に退避するデータを決定することにより、ログ出力が失敗した場合の不都合を回避できる。すなわち、記憶装置にトランザクション完了のログが出力されたトランザクションのデータを選択して参照指示を実行することにより、ログ出力が失敗した場合に無効になるデータが参照される可能性が無くなる。
【００２３】
また、先行する全てのログ出力が完了している場合にのみ、当該ログ出力が完了したと判断することで、ログの多重転送技術を使用する場合に生じる上記の不都合を回避する。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の一実施形態を添付図面を用いて説明する。
【００２５】
図１は、本発明を適用する計算機システムの構成を示す構成図である。図１の計算機システムは操作端末１０１、サーバ１０２、ストレージ１０３を含み、操作端末１０１とサーバ１０２、および、サーバ１０２とストレージ１０３はネットワークによって接続されている。サーバ１０２は、複数台の操作端末１０１と接続することができる。サーバ１０２は演算を実行する中央演算処理装置ＣＰＵ（プロセッサ）１０４とプログラムやデータを格納するメモリ１０５を含む。データベース１０６（データベース管理システム）は、サーバ１０２上で実行されるプログラムであり、メモリ１０５に格納されたプログラムをＣＰＵ１０４が実行することにより実現される。
【００２６】
また、操作端末１０１は、クライアントアプリケーション１０１１を実行する。クライアントアプリケーション１０１１は、サーバ１０２のデータベース１０６にデータ操作の指示を送信し、データベース１０６からの応答を受け付けるプログラムである。なお、操作端末１０１はデータベース１０６に対して、データの参照指示、更新指示、コミット指示を送信することができる。
【００２７】
ストレージ１０３はハードディスク装置や不揮発性半導体などの記憶装置を用いて、ログ格納部１１６と、データ格納部１１７を格納している。
【００２８】
図２は、ストレージ１０３が、ログ格納部１１６およびデータ格納部１１７を格納する方法を模式的に示した図である。ストレージ１０３は、ハードディスク装置などの記憶領域を５１２バイトなどの一定サイズの領域に区切って管理し、それぞれの領域にアドレス２０１を付与している。このアドレスは、ロジカルブロックアドレス（ＬＢＡ）と呼ばれる場合もある。図２では、アドレス０の領域にデータ「１、４０、２、５０」が、アドレス１の領域にデータ「３、４０、４、５０」が、アドレス２の領域にデータ「５、５０、６、７０」が格納されている例を示している。サーバ１０２は、このアドレスを指定して、ストレージ装置に格納されたデータを操作することができる。
【００２９】
データベース１０６は、メモリ１０５（図中メモリ領域）に、データ領域管理テーブル１１１、データ形式管理テーブル１１２、トランザクション管理テーブル１１３、ロック管理テーブル１１４、および、ログバッファ１１５を格納している。
【００３０】
データ領域管理テーブル１１１には、データを格納するテーブルの名称と格納位置を格納する。図３は、データ領域管理テーブル１１１の格納内容を例示している。データ領域管理テーブル１１１には、テーブル名３０１、開始ＬＢＡ３０２、終了ＬＢＡ３０３、および、解除中ロックのデータの参照許可フラグ３０４が格納される。テーブル名３０１には、テーブルを識別する名称を格納する。開始ＬＢＡ３０２には、テーブルが格納されるストレージ１０３上の開始位置を示すロジカルブロックアドレスを格納する。終了ＬＢＡ３０３には、テーブルが格納されるストレージ１０３上の終了位置を示すロジカルブロックアドレスを格納する。参照許可フラグ３０４には、データのロックの属性が解除中のときに、他のトランザクションのデータ参照の許可または不許可を示すフラグを格納する。参照許可フラグ３０４の「０」の記載は不許可を示し、参照許可フラグ３０４の「１」の記載は許可を示す。
【００３１】
図３の例では、テーブル名３０１「ＳＴＯＣＫ」のデータは、ＬＢＡ番号０からＬＢＡ番号７９９９に格納され、テーブル名３０２「ＣＵＳＴＯＭＥＲ」のデータは、ＬＢＡ番号１００００からＬＢＡ番号１７９９９に格納されていることを示している。
【００３２】
データ形式格納テーブル１１２には、テーブル毎のデータの形式を格納する。図４は、データ形式格納テーブル１１２の格納内容を例示している。データ形式格納テーブル１１２には、テーブルを識別する名称を格納するテーブル名４０１と、テーブル内のデータの形式を格納するデータ形式４０２が記載されている。図４に示す例では、テーブル名４０１がＳｔｏｃｋのテーブルには、Ｉｔｅｍ_ＩＤとＱｕａｎｔｉｔｙが整数型（ＩＮＴ）で格納されており、テーブル名４０１がＣｕｓｔｏｍｅｒのテーブルには、Ｃｕｓｔｏｍｅｒ_ＩＤが整数型で、Ｎａｍｅが３０個の文字列（ＣＨＡＲ［３０］）で格納されていることを示している。なお、Ｉｔｅｍ_ＩＤ、Ｑｕａｎｔｉｔｙ、Ｃｕｓｔｏｍｅｒ_ＩＤ、Ｎａｍｅなどはカラム名と呼ばれる場合がある。
【００３３】
データベース１０６は、データ領域管理テーブル１１１とデータ形式管理テーブル１１２を用いて、ＳＱＬ文の実行が可能である。例えば、「ＳＥＬＥＣＴ Ｑｕａｎｔｉｔｙ ＦＲＯＭ Ｓｔｏｃｋ Ｗｈｅｒｅ Ｉｔｅｍ_ＩＤ＝１」というＳＱＬ文は、「Ｓｔｏｃｋ」テーブルのＩｔｅｍ_ＩＤが１のＱｕａｎｔｉｔｙの値を参照する指示である。データベース１０６がこのような指示を受信した場合、データ領域管理テーブル１１１からＳｔｏｃｋテーブルが格納されているＬＢＡ番号を取得し、ストレージ１０３から読み込む。そして、データ形式管理テーブル１１２に記載のデータ形式を参照して、「Ｉｔｅｍ_ＩＤ＝１」に該当するデータを参照する。
【００３４】
以上では、データベース１０６がＳＱＬ文を実行する方法を例示した。データベース１０６は、データの参照をするＳＥＬＥＣＴ文だけでなく、データを更新するＵＰＤＡＴＥ文、データを削除するＤＥＬＥＴＥ文、データを挿入するＩＮＳＥＲＴ文についても、同様に実行可能である。
【００３５】
図１に示した操作端末１０１は、入出力機構１０７に指示を送信し、ストレージ１０３に格納されたデータ格納部１１７の操作を行う。一連のデータ操作はトランザクション単位で管理され、トランザクションを開始する際に、操作端末１０１はトランザクション開始の指示をデータベース１０６の入出力機構１０７に送信する。また、トランザクションを終了する際に、操作端末１０１はトランザクション終了の指示を入出力機構１０７に送信する。
【００３６】
図５は、データベース１０６の入出力機構１０７の動作を示すフローチャートである。入出力機構１０７は、操作端末１０１から指示を受信すると、ステップ５０１で受け付けた指示の種別の判定を行う。
【００３７】
操作端末１０１から受信した指示が、トランザクション開始の指示である場合、ステップ５０２において、トランザクションに番号付けを行う。入出力機構１０７は、操作端末１０１とトランザクション番号の対応を管理するトランザクション管理テーブル１１３に新たなトランザクションと操作端末１０１の識別子を格納する。そして、ステップ５０５において指示されたトランザクションを開始したことを操作端末１０１に送信する。
【００３８】
操作端末１０１から受信した指示が、データ操作の指示、または、トランザクション終了の指示である場合、ステップ５０３において、トランザクション番号と指示の内容をＳＱＬ実行機構１０８に送信する。ステップ５０４において、上記指示に対するＳＱＬ実行機構１０８からの応答を受信し、ステップ５０５において、ＳＱＬ実行機構１０８からの応答を操作端末１０１に送信する。ここで、入出力機構１０７は、トランザクション管理テーブル１１３を参照し、トランザクション番号に対応付けられた操作端末１０１にＳＱＬ実行機構１０８が実行したトランザクションに対する応答を送信する。
【００３９】
操作端末１０１から受信した指示が、ロック解除中のデータに対する参照許可の設定指示である場合、ステップ５０６において、データ領域管理テーブル１１１の参照許可フラグ（参照許可属性）３０４を更新する。ロック解除中のデータの参照設定の指示は、「ＳＥＴ ＴＡＢＬＥ ＳＴＯＣＫ ＬＯＣＫ ＲＥＦＥＲ ＹＥＳ」といった形式で与えられ、これは、テーブル名「ＳＴＯＣＫ」のデータについて、ロック解除中であっても他のトランザクションからの参照を許可する指示である。このような指示を受信した場合、図３に例示するデータ領域管理テーブル１１１の、テーブル名「Ｓｔｏｃｋ」のロック解除中のデータの参照許可フラグ３０４を「１」に設定する。また、「ＳＥＴ ＴＡＢＬＥ ＳＴＯＣＫ ＬＯＣＫ ＲＥＦＥＲ ＮＯ」という指示は、テーブル名「Ｓｔｏｃｋ」のデータは、解除中のロックがされている場合にデータの参照を不許可にする指示である。このような指示を受信した場合、ステップ５０６は、図４に例示するデータ領域管理テーブル１１１の、テーブル名「Ｓｔｏｃｋ」のロック解除中のデータの参照許可フラグ３０４を「０」に設定する。
【００４０】
図６は、ＳＱＬ実行機構１０８の動作を示すフローチャートである。ＳＱＬ実行機構１０８は、入出力機構１０７からトランザクション番号と指示の内容を受信することで動作を開始する。ＳＱＬ実行機構１０８はステップ６０１において、受信した指示種別の判定を行う。指示種別としては、データ更新指示、データ参照指示、および、コミット指示がある。ここで、データ更新指示とは、ＳＱＬ文のＵＰＤＡＴＥ文、ＩＮＳＥＲＴ文、および、ＤＥＬＥＴＥ文などを指し、データ参照指示とは、ＳＱＬ文のＳＥＬＥＣＴ文などを指す。
【００４１】
図７は、データ更新指示を受信した場合のＳＱＬ実行機構１０８の動作を示すフローチャートである。ステップ７０１では、データ更新指示の操作対象のデータを特定する。データ更新指示は、例えば、「ＵＰＤＡＴＥ ＳＴＯＣＫ ＳＥＴ Ｑｕａｎｔｉｔｙ ＝ １００ ＷＨＥＲＥ Ｉｔｅｍ_ＩＤ ＝ １」といった形式で与えられる。これは、「Ｓｔｏｃｋ」テーブルの「Ｉｔｅｍ_ＩＤ＝１」に該当するデータのＱｕａｎｔｉｔｙの値を１００に更新する指示である。この指示から、「Ｓｔｏｃｋ」テーブルの「Ｉｔｅｍ_ＩＤ＝１」のデータが操作対象のデータであることが分かる。このように、ステップ７０１では入出力機構１０７から受信した指示内容から、操作対象のデータを特定する。ステップ７０２では、図１０に示すロック管理テーブル１１４を参照して、データ格納部１１７のロック状態の判定を行う。ロック管理テーブル１１４には、ロックされているデータ格納部１１７の情報が記載される。
【００４２】
図１０にロック管理テーブル１１４の格納内容を例示する。ロック管理テーブル１１４には、データ格納部１１７のテーブルの名称を格納するテーブル名１００１と、テーブル内のカラムの識別子を格納する識別カラム名１００２と、識別カラム名１００２に対応するデータ（レコード）の値を示すカラム値１００３と、このデータを操作対象とするトランザクションの番号を格納するトランザクション番号１００４と、および、当該データがロック中であるか否かを示すロック状態１００５が格納される。テーブル名１００１、識別カラム名１００２、および、カラム値１００３はロックされているデータを特定するための情報であり、トランザクション番号１００４には当該データのロックを取得しているトランザクションの番号が記載され、ロック状態１００５にはロックの状態（「ロック中」または「解除中」）が記載される。ここに、ロック状態１００５の「０」は「ロック中」であることを示し、ロック状態１００５の「１」は「解除中」であることを示す。図１０の例では、テーブル名「Ｓｔｏｃｋ」で識別カラム名「Ｉｔｅｍ_ＩＤ」が値「１００」であるデータが、トランザクション番号「１」のトランザクションによって、「ロック中」のロックが取得されている例が示されている。
【００４３】
次に、図７のステップ７０２では、操作対象のデータが「ロック中」の場合にはステップ７０３に分岐し、操作対象のデータ「解除中」または「ロックなし」の場合はステップ７０４に分岐する。なお、ロック管理テーブル１１４に操作対象データのエントリが無い場合、ＳＱＬ実行機構１０８は「ロックなし」と判定して、ステップ７０４の処理へ進む。ステップ７０３では、操作対象のデータのロック状態が「解除中」になるまで待機する。ステップ７０４では、ＳＱＬ実行機構１０８が操作指示のデータ更新を実行する。上記のＵＰＤＡＴＥ文の例では、ＳＱＬ実行機構１０８は、ストレージ１０３に格納されている「Ｓｔｏｃｋ」テーブルの「Ｉｔｅｍ_ＩＤ＝１」に該当するデータのＱｕａｎｔｉｔｙの値を１００に更新する。次に、ステップ７０５では、ログ出力機構１１０にデータ更新のログをログバッファ１１５へ出力するよう指示する。上記のＵＰＤＡＴＥ文の例では、トランザクション番号と「ＳｔｏｃｋテーブルのＩｔｅｍ＿ＩＤ＝１に該当するデータのＱｕａｎｔｉｔｙの値を１００に更新」というログの出力をログ出力機構１１０に指示する。
【００４４】
ステップ７０６では、排他制御機構１０９にロックの取得を指示する。上記のＵＰＤＡＴＥ文の例では、トランザクション番号と「ＳｔｏｃｋテーブルのＩｔｅｍ＿ＩＤ＝１に該当するデータのロック状態をロック中に変更」という指示を排他制御機構１０９に送信する。ステップ７０７では、データ操作が完了したことの返答を入出力機構１０７に指示する。この指示にはトランザクション番号が含まれており、指示を受信した入出力機構１０７はトランザクション管理テーブル１１３を参照してデータ操作の指示を行った操作端末１０１に応答を返す。
【００４５】
図８は、データ参照指示を受信した場合のＳＱＬ実行機構１０８の動作を示すフローチャートである。ステップ８０１では、データ参照の操作対象となるデータを特定する。データ参照指示は、例えば、「ＳＥＬＥＣＴ Ｑｕａｎｔｉｔｙ ＦＲＯＭ ＳＴＯＣＫ ＷＨＥＲＥ Ｉｔｅｍ_ＩＤ＝１」といった形式で与えられる。これは、「Ｓｔｏｃｋ」テーブルの「Ｉｔｅｍ_ＩＤ＝１」に該当するデータのＱｕａｎｔｉｔｙの値を参照する指示である。この指示から、「Ｓｔｏｃｋ」テーブルの「Ｉｔｅｍ_ＩＤ＝１」が操作対象のデータであることが分かる。このように、ステップ８０１では入出力機構１０７から受信した指示内容から操作対象のデータを特定する。ステップ８０２では、ロック管理テーブル１１４を参照して、操作対象のデータについてロック状態の判定を行う。
【００４６】
ロック管理テーブル１１４に該当データのエントリがない場合、ロック無しと判定して、ステップ８０７に分岐する。ロック管理テーブル１１４に該当データのエントリがある場合は、ステップ８０３に分岐する。ステップ８０３では、データ参照の操作指示に、ロック解除中のデータ参照の許可の属性が付与されているか否かを判定する。操作端末１０１はデータ参照の指示に、ロック解除中のデータ参照の許可の属性を付与することが可能であり、例えば、「ＳＥＬＥＣＴ Ｑｕａｎｔｉｔｙ ＦＲＯＭ ＳＴＯＣＫ ＷＨＥＲＥ Ｉｔｅｍ_ＩＤ＝１ ＬＯＣＫ ＲＥＦＥＲ ＹＥＳ」という形式で指定される。
【００４７】
ステップ８０３では、データ操作指示に「ＬＯＣＫ ＲＥＦＥＲ ＹＥＳ」の指定があるか否かを判定して、この属性の指定があればステップ８０４の処理へ分岐し、この属性の指定がない場合には、ステップ８０６へ進む。ステップ８０４では、操作対象データにロック解除中のデータ参照の許可の属性が付与されているか否かを判定する。これは、図３に例示したデータ領域管理テーブル１１１のロック解除中のデータの参照許可フラグ３０４を参照して行う。該当データが格納されているテーブルのデータの参照許可フラグ３０４が「１」に設定されている場合、ロックの属性が解除中であるデータに対して、参照が許可されていると判定して、ステップ８０６の処理へ進む。参照許可フラグ３０４が「０」の場合は、解除中のデータ参照が許可されないのでステップ８０５に進む。
【００４８】
ステップ８０５では、操作対象のデータのロックが解除されるまで待機する。ここで、操作対象のデータのロックが解除されたことは、ロック管理テーブル１１４に該当データのエントリがなくなったことで判定できる。すなわち、ＳＱＬ実行機構１０８は、ロック管理テーブル１１４を監視して、操作対象のデータのエントリがロック管理テーブル１１４から削除されたことにより、当該データのロックが解除されたと判定する。
【００４９】
ステップ８０６では、データのロックが「解除中」になるまでＳＱＬ実行機構１０８は待機する。データのロックが「解除中」になったことは、ロック管理テーブル１１４のロック状態１００５が「１」に設定されたことで判定する。
【００５０】
ステップ８０７では、操作対象のデータをストレージ１０３から読み込む。ステップ８０８では、ストレージ１０３から読み込んだデータの返答を入出力機構１０７に指示する。この指示にはトランザクション番号が含まれ、入出力機構１０７はトランザクション管理テーブル１１３を参照し、データ操作の指示を行った操作端末１０１に応答を返す。
【００５１】
図９は、操作端末１０１からコミット指示を受信した場合のＳＱＬ実行機構１０８の動作を示すフローチャートである。ステップ９０１では、トランザクション番号とトランザクション完了のログ出力の指示をログ出力機構１１０に送信する。
【００５２】
ステップ９０２では、排他制御機構１０９にロック属性の「解除中」への変更を指示する。この指示は、コミットするトランザクションが保持するデータの全てのロックの状態を「解除中」に変更する指示である。ステップ９０３では、ステップ９０１で排他制御機構１０９へ指示したトランザクション完了のログ出力が完了するまで待機する。つまり、ＳＱＬ実行機構１０８は、トランザクション完了のログをログバッファ１１５へ書き込みが完了した通知を排他制御機構１０９から受信するまで待機する。
【００５３】
ステップ９０４では、排他制御機構１０９に該当するトランザクションがロックしていたデータのロックの解除を指示する。この指示は、コミットするトランザクションが取得した全てのロックを解除する指示である。
【００５４】
ステップ９０５では、コミット完了の応答を入出力機構１０７に指示する。この指示を受けて、入出力機構１０７はデータ操作の指示を行った操作端末１０１にコミット完了の応答を返す。
【００５５】
図１１は、排他制御機構１０９の動作を示すフローチャートである。排他制御機構１０９は、ＳＱＬ実行部１０８から排他制御に関する指示を受信することで動作を開始する。
【００５６】
排他制御機構１０９がＳＱＬ実行部１０８から受信する指示としては、ロック取得指示、ロック状態変更指示、および、ロック解除指示がある。ロック取得指示とは、例えば、「トランザクション１が、ＳｔｏｃｋテーブルのＩｔｅｍ＿ＩＤ＝１のデータのロックを取得」といった指示である。また、ロック状態変更指示とは「トランザクション１のロックを解除中に変更」といった指示であり、ロック解除指示とは「トランザクション１のロックを解除」といった指示である。ステップ１１０１では、ＳＱＬ実行部１０８から受信した指示の種別の判定を行う。受信した指示がロック取得指示の場合にはステップ１１０２へ進み、受信した指示がロック状態変更指示の場合にはステップ１０５ヘ進み、ロック解除指示の場合にはステップ１１０６へ進む。
【００５７】
ステップ１１０２では、ロック取得指示を受けたデータが既にロック管理テーブル１１４に登録されているか否かを判定する。上記のロック取得指示の例では、「ＳｔｏｃｋテーブルのＩｔｅｍ＿ＩＤ＝１のデータ」がロック管理テーブル１１４に登録されているか否かを判定する。該当データのエントリがロック管理テーブル１１４に存在する場合には、ステップ１１０３において該当エントリをロック管理テーブル１１４から削除する。ステップ１１０４では、受信した指示内容に従って、排他制御機構１０９がロック管理テーブル１１４に、受信した指示の対象となるデータのエントリを新たに追加する。このとき排他制御機構１０９は、新たに追加したエントリのロック状態１００５を「０」に設定し、ロック状態を「ロック中」に設定する。
【００５８】
排他制御機構１０９はＳＱＬ実行部１０８からロック状態変更指示を受信した場合、ステップ１１０５においてロック管理テーブル１１４を変更し、該当トランザクションのロックの属性を「ロック中」から「解除中」に変更する。すなわち、排他制御機構１０９は、ロック管理テーブル１１４のロック状態１００５を「１」に設定し、該当するトランザクション番号１００４のデータのロックの属性を、「ロック中」から「解除中」に変更する。
【００５９】
排他制御機構１０９がロック解除指示を受信した場合、ステップ１１０６に進み、ロック管理テーブル１１４を変更し、該当トランザクションのロックをロック管理テーブルから削除する。すなわち、排他制御機構１０９は、ロック管理テーブル１１４から、該当するトランザクション番号１００４のエントリを削除することで、該当するデータのロックを「解除中」から完全に開放された状態に変更する。
【００６０】
図１２は、ログ出力機構１１０の動作を示すフローチャートである。ログ出力機構１１０はＳＱＬ実行部１０８からの指示に従って、ログを生成してストレージ１０３のログ格納部１１６に追記する。
【００６１】
ステップ１２０１において、ストレージ１０３に対してログの書き込み中か否かを判定する。ログの書き込み中の場合、ステップ１２０２においてログの書き込みが完了するまで待機する。なお、ログ出力機構１１０は、ログ書き込みの完了を待っている間もＳＱＬ実行部１０８から指示を受信することが可能であり、ログの書き込みが完了次第、ＳＱＬ実行部１０８から指示されたログの書き込みをまとめて行う。
【００６２】
ステップ１２０３では、メモリ１０５のログバッファ１１５に格納されたログをストレージ１０３のログ格納部１１６に対して書き込む。ログ出力機構１１０が書き込むログとは、例えば、「トランザクション１がＳｔｏｃｋテーブルのＩｔｅｍ＿ＩＤ＝１のＱｕａｎｔｉｔｙを１００に変更」や、「トランザクション１完了」といった内容である。
【００６３】
ステップ１２０４では、ログバッファ１１５からストレージ１０３のログ格納部１１６へログの出力が完了したことをＳＱＬ実行機構１０８に応答する。なお、ログ出力機構１１０がストレージ１０３へのログ出力を完了した時点で、メモリ１０５のログバッファ１１５の内容をクリアできる。
【００６４】
図１３は、データベース１０６が操作端末１０１から受け付けた一連のトランザクションの処理の流れを示すタイムチャートである。図１３では、データベース１０６がデータ格納部１１７のデータ（レコード）に対して更新処理を行った後に、コミット処理を行うトランザクションの一例を示している。
【００６５】
時刻Ｔ０で、データベース１０６は操作端末１０１からデータ格納部１１７の解除中のデータについて更新指示を受信し、更新処理を開始する。ＳＱＬ実行機構１０８は、排他制御機構１０９に当該データのロックを指示し、当該データに対する他のトランザクションのアクセスを禁止する。時刻Ｔ１では、データベース１０６は操作端末１０１から更新処理を行ったデータ格納部１１７のデータについてコミット指示を受信し、コミット処理を開始する。
【００６６】
ＳＱＬ実行機構１０８は、図９で示したように、ログ出力機構１１０へ当該コミット処理のログ出力を指示した後に、「ロック中」のデータのロックの属性を「解除中」に変更する。これにより、更新処理、コミット処理の一連のトランザクションＡは、コミット処理が完了する以前に、トランザクションＡの対象となるデータのロックを制限付きで解除し、後続のトランザクションＢが、当該データに対するアクセスを許可することができる。
【００６７】
これにより、トランザクションが、データを排他的にロックする期間を短縮し、データベース１０６の処理性能を向上することができる。ただし、ＳＱＬ実行機構１０８は、ストレージ１０３のログ格納部１１６へログの書き込みが完了して、完了の通知を入出力機構１０７へ送信する時刻Ｔ２までロックを解除しない。これにより、ストレージ１０３へのログの書き込みが失敗した場合であっても、データの整合性が損なわれるのを防ぐことができる。そして、ＳＱＬ実行機構１０８は、ロックの属性が解除中のデータについては、更新指示、あるいは、ロック解除中のデータ参照許可の属性がある参照指示を実行する。このように、ロックの解除を部分的なものとして、トランザクションのログ書き込みが失敗した場合にデータの整合性が損なわれるのを防ぐ。一方、従来例では、図１４で示すように、時刻Ｔ０で更新を開始してからコミット処理が完了する時刻Ｔ２までロック中となる。そのため、後続のトランザクションＢは時刻Ｔ２以降までこのデータにアクセスできず、本発明に比してデータベースの処理性能は低下する。
【００６８】
なお、上記においては、参照指示にロック解除中のデータ参照の許可属性を付与する例を示したが、データ格納部１１７に格納されるデータに、ロック解除中のデータ参照の許可属性を付与するようにしても良く、上記と同様の作用及び効果を得ることができる。
【００６９】
また、データベース１０６は、操作端末１０１からロック解除中のデータ参照の許可の指示を受け付けることができ、当該指示を受け付けた以降の参照指示については、解除中のデータの参照を許可することができる。この場合、操作端末１０１のユーザが、データベース１０６またはサーバ１０２の負荷に応じて、ロック解除中の参照指示に対する制御を行うことが可能となる。
【００７０】
＜第２実施形態＞
図１５は、第２の実施形態を示し、前記第１実施形態のメモリ１０５の所定の領域に、一時的にデータを格納するデータ退避領域１３０１を設けたものである。その他の構成は前記第１実施形態と同様であり、同一のものに同一の符号を付した。
【００７１】
メモリ１０５の所定の領域には、後述するように排他的にロックされる更新前のデータを複写して他のトランザクションへ参照させるためのデータ退避領域１３０１が設定される。図１６は、データ退避領域１３０１の格納内容を例示する図である。データ退避領域１３０１には、更新前のデータを格納する退避データ１４０１と、このデータを排他的に使用するトランザクションのトランザクション番号１４０２と、トランザクションが完了したか否かを示すトランザクション完了フラグ１４０３が格納される。
【００７２】
トランザクション完了フラグ１４０３には、該データの更新を行ったトランザクションが未完了の場合に「０」が設定され、該データの更新を行ったトランザクションが完了している場合に「１」が設定される。
【００７３】
前記従来例のＭＶＣＣ（Multi Version Concurrency Control）技術を用いる場合、ＳＱＬ実行機構１０８の動作フローのうち、前記第１実施形態の図７と図８に示した動作フローは一部を変更して図１７、図１８のようにし、ログ出力機構１１０の動作フローは、図１２の一部を変更して図１９のようにする。以降、ＭＶＣＣ技術を用いる場合の変更点について説明する。
【００７４】
図１７は、データ退避領域１３０１を用いる場合のＳＱＬ実行機構１０８の動作を示すフローチャートである。図１７は、前記第１実施形態の図７に示したフローチャートにステップ１５０１が追加されたフローチャートである。なお、図１７のステップ７０１〜７０７は前記第１実施形態の図７と同一であるので、重複した説明を省略する。
【００７５】
ステップ１５０１では、メモリ１０５のデータ退避領域１３０１に更新前のデータを退避する。例えば、「ＵＰＤＡＴＥ ＳＴＯＣＫ ＳＥＴ Ｑｕａｎｔｉｔｙ ＝ １００ ＷＨＥＲＥ Ｉｔｅｍ_ＩＤ ＝ １」というＳＱＬ文を実行する場合、ＳｔｏｃｋテーブルのＩｔｅｍ_ＩＤ＝１のデータのＱｕａｎｔｉｔｙを１００に変更したことをＳＱＬ実行機構１０８がデータ退避領域１３０１に記載する。この時点のトランザクション完了フラグ１４０３は「０」である。
【００７６】
また、ステップ１５０１では、ＳＱＬ実行機構１０８がＳｔｏｃｋテーブルのＩｔｅｍ_ＩＤ＝１のデータが退避されているか否かを判定し、退避されていない場合には、更新前のデータをトランザクション番号１４０２＝「−１」とし、トランザクション完了フラグ１４０３を「１」としてデータ退避領域１３０１に登録する。
【００７７】
図１８は、データ退避領域１３０１を用いてデータ参照指示を受信した場合のＳＱＬ実行機構１０８の動作を示すフローチャートである。図中ステップ８０１、８０７、８０８は前記第１実施形態の図８と同様であるので、重複した説明を省略する。
【００７８】
ステップ１６０１では、ＳＱＬ実行機構１０８がデータ退避領域１３０１に参照指示で指定されたデータのエントリがあるか判定する。指定されたデータのエントリがあれば、ＳＱＬ実行機構１０８はステップ１６０２ヘ進み、データ退避領域１３０１のトランザクション完了フラグ１４０３が「１」となっている完了トランザクションのデータを参照する。
【００７９】
一方、ステップ１６０１で該当するエントリがない場合には、ステップ８０７へ進み、ＳＱＬ実行機構１０８はデータ格納部１１７のデータを参照する。この場合では、前記第１実施形態と同様に、参照許可属性が設定されていない場合には、コミットが完了するまでデータの参照を待機することになる。
【００８０】
図１９は、データ退避領域１３０１を用いる場合のログ出力機構１１０の動作を示すフローチャートで、前記第１実施形態の図１２の一部を変更したものである。
【００８１】
ステップ１７０１では、ステップ１２０３でトランザクション完了ログを出力した場合、ログ出力機構１１０は該当トランザクションのデータ退避領域１３０１のエントリのトランザクション完了フラグ１４０３を「１」に設定する。このトランザクション完了フラグ１４０３の変更により、データ退避領域１３０１に完了トランザクションによって多重に退避されているデータが生じる場合、最新のデータを残し、その他の退避データを削除する。
【００８２】
以上の処理により、他のトランザクションに対して参照用のデータ退避領域１３０１を設けて、ＳＱＬ実行機構１０８は、更新対象のデータについてログ出力機構１１０へログ出力を指示する際に、当該データの内容をデータ退避領域１３０１にコピーしておく。そして、ＳＱＬ実行機構１０８は当該データをロックするよう排他制御機構１０９へ指示する。
【００８３】
当該データを参照する他のトランザクション（後続のトランザクションＢ）は、ロック中のデータ格納部１１７に代わってデータ退避領域１３０１のデータを参照することで、ロック解除を待つことなく処理を継続できる。当該データが完了したトランザクションのデータであるか否かは、トランザクション完了フラグ１４０３を参照することで判断できる。このように、ＳＱＬ実行機構１０８は、データ格納部１１７がロック中の場合にはデータ退避領域１３０１のデータを参照し、当該データがロック解除中になればデータ格納部１１７を参照する。このように、トランザクション（先行するトランザクション）がデータをロックしている場合でも、他のトランザクション（後続のトランザクション）は、データを参照できる。そのため、後続のトランザクションの待ちの時間が短縮され、データベース１０６の処理性能を向上できる。
【００８４】
また、先行するトランザクションのログの書き込みが完了するまで、後続のトランザクションのログの書き込みを禁止するので、先行するトランザクションのログの書き込みが失敗した場合、後続トランザクションも無効にすることができる。これにより、ログの書き込みの失敗によって、データの整合性が失われるのを防ぐことができる。
【００８５】
＜第３実施形態＞
図２０は、第３の実施形態を示し、前記第１実施形態のストレージ１０３にリモートコピー機能を加えて、このリモートコピー機能を利用したデータのリモートバックアップシステムに、本発明を適用した場合のシステム構成図である。なお、前記第１実施形態と同一のものには、同一の符号を付して重複した説明を省略する。サーバ１０２のメモリ１０５に設定されるログバッファは、前記第１実施形態に示したログバッファ１１５を、複数のログバッファ１１５ａ〜１１５ｃで構成する。
【００８６】
ログ出力機構１１０は、生成したログをログバッファ１１５ａに追記していき、ログバッファ１１５ａが満杯になった場合には、ストレージ１０３のログ格納部１１６へログバッファ１１５ａの内容をまとめて書き出す。この、ログバッファの書き出しを、フラッシュとよぶ。このとき、ログ出力機構１１０は、生成したログの書き込み先をログバッファ１１５ｂへ切り替えて、ＳＱＬ実行機構１０８の処理を継続する。このようにログ出力機構１１０は、ログバッファ１１５ａ〜１１５ｃを順次切り替えながら各ログバッファ１１５ａ〜１１５ｃの内容をまとめてストレージ１０３へフラッシュしていく。これにより、ログ出力機構１１０は、複数のログバッファ１１５ａ〜１１５ｃにより、ログの多重転送を行う。
【００８７】
ログ出力機構１１０は、生成したログがコミットログであった場合には、現在使用中のログバッファ１１５ａ〜１１５ｃの内容をストレージ１０３に書き込む。
【００８８】
ストレージ１０３は、ログ格納部１１６及びデータ格納部１１７を制御するストレージ制御部１８０１を含む。ストレージ１０３は外部のストレージ１８０２とネットワークによって接続されている。ストレージ１８０２には、ログ格納部１８０４とデータ格納部１８０５が設定されている。この例では、ストレージ１０３及びサーバ１０２が正サイトを構成し、ストレージ１８０２が副サイトを構成するデータのリモートバックアップシステムを示す。
【００８９】
ストレージ制御部１８０１は、サーバ１０２（またはデータベース１０６）から、ログ格納部１１６に対するログの書き込み指示を受信すると、このログの書き込み指示をストレージ制御部１８０３に送信する。ストレージ制御部１８０３は、ストレージ１０３から転送されたログの書き込み指示に基づいてログ格納部１８０４にログを書き込み、ストレージ１０３のストレージ制御部１８０１にログの書き込みが完了したことを示す応答を返す。この応答を受けたストレージ制御部１８０１は、ログ格納部１１６にログを書き込み、ログの書き込みを完了する。
【００９０】
図２１は、ストレージ１０３のリモートコピー機能を利用したリモートバックアップシステムにおいて、本発明を適用する場合のログ出力機構１１０の動作を示すフローチャートである。この処理は、ログ出力機構１１０が各ログバッファ１１５ａ〜１１５ｃを監視して、ログが満杯となったとき、またはログバッファ１１５ａ〜１１５ｃへ書き込まれたログがコミットの場合に実行される。ここで、図２１のフローチャートは、複数のログバッファに対して並列して実行することが可能である。
【００９１】
ステップ１９０１では、ログ出力機構１１０は、ログバッファの内容をストレージ１０３のログ格納部１１６に対して出力する。
【００９２】
ステップ１９０２では、ステップ１９０１において、トランザクション完了のログを出力したか否かを判定する。トランザクション完了のログを出力した場合は、ステップ１９０３に分岐する。
【００９３】
ステップ１９０３において、ログ出力機構１１０は、先行して出力された全てのログバッファの出力が完了しているか否かを判定する。そして、ログ出力機構１１０は、出力が完了していないログバッファがある場合には、ステップ１９０４に進み、先行する全てのログバッファの出力が完了するのを待つ。ステップ１９０５では、ＳＱＬ実行機構１１０に対して、ログ出力完了の応答を返す。このようにすることで、先行するログバッファの出力が完了していない場合に、後続のログバッファの出力が完了したと判定してしまう可能性を無くす。
【００９４】
図２２は、本第３実施形態の動作を示すタイムチャートで、あるデータに対して更新を行うトランザクションＴｒ１〜Ｔｒ３が順次発行された場合の動作を示している。
【００９５】
時刻Ｔ０では、トランザクションＴｒ１がデータベース１０６で開始される。トランザクションＴｒ１のコミットが指示されると、時刻Ｔ１からトランザクションＴｒ１のログがストレージ１０３及びストレージ１８０２へ書き込まれ、書き込みが完了した時刻Ｔ２で入出力機構１０７に対してトランザクション完了の通知を行う。
【００９６】
ここで、時刻Ｔ１では、当該データのロックの属性を解除中に設定し、当該データに対する後続トランザクションの操作を許可する。前記第１実施形態と同様に、解除中となったデータに対しては、更新及び条件付きの参照が許可されるため、後続のトランザクションＴｒ２は、時刻Ｔ１から当該データに対して更新処理が可能になる。先行するトランザクションＴｒ１のログの書き込みが完了する時刻Ｔ２からは、トランザクションＴｒ２による当該データのロックを解除中へ移行し、この時刻Ｔ２から、トランザクションＴｒ２のログの書き込みを開始し、時刻Ｔ３でトランザクションＴｒ２が完了する。
【００９７】
図２３に示すように、従来の制御では、トランザクションＴｒ１のログの書き込みが完了するまで、当該データはロックされ他のトランザクションからのアクセスが拒否される。そのため、後続のトランザクションＴｒ２、Ｔｒ３は、先行するトランザクションのログの書き込みが完了するまで処理を開始することができない。ストレージ１０３のリモートコピー機能を利用してデータのリモートバックアップを行う場合には、ストレージ１０３からストレージ１８０２への書き込みが完了して、トランザクションの完了となるため、ログの転送と書き込みよる遅延が大きくなる。本発明では、コミットの開始時にデータのロックを解除しておき、複数のログバッファ１１５ａ〜１１５ｃを用いることで、先行するトランザクションが完了する以前に後続のトランザクションの処理を実行する。これにより、ログの転送及び書き込みの遅延が大きくなるリモートバックアップシステムにおいて、データベース１０６の処理性能を向上できる。
【００９８】
なお、上記実施形態においては、データ格納部１１７、ログ格納部１１６をストレージ１０３に設定した例を示したが、これらの格納部をメモリ１０５に設定するインメモリのデータベースに適用できる。
【図面の簡単な説明】
【００９９】
【図１】本発明の第１の実施形態のシステムの構成を示すブロック図である。
【図２】第１の実施形態において、ストレージが、データを格納する例を示した説明図である。
【図３】第１の実施形態において、データ領域管理テーブルの格納内容を例示する説明図である。
【図４】第１の実施形態において、データ形式管理テーブルの格納内容を例示する説明図である。
【図５】第１の実施形態において、入出力機構で実行される処理の一例を示すフローチャートである。
【図６】第１の実施形態において、ＳＱＬ実行機構で行われる処理の一例を示すフローチャートの前半部である。
【図７】第１の実施形態において、ＳＱＬ実行機構で行われるデータ更新処理の一例を示すフローチャートである。
【図８】第１の実施形態において、ＳＱＬ実行機構で行われる参照処理の一例を示すフローチャートである。
【図９】第１の実施形態において、ＳＱＬ実行機構で行われるコミット処理の一例を示すフローチャートである。
【図１０】第１の実施形態において、ロック管理テーブルの格納内容を例示する説明図である。
【図１１】第１の実施形態において、排他制御機構で行われる処理の一例を示すフローチャートである。
【図１２】第１の実施形態において、ログ出力機構で行われる処理の一例を示すフローチャートである。
【図１３】第１の実施形態において、データの更新処理におけるロック状態と時刻の関係を示すグラフである。
【図１４】従来例を示し、データの更新処理におけるロック状態と時刻の関係を示すグラフである。
【図１５】本発明の第２の実施形態のシステムの構成を示すブロック図である。
【図１６】第２の実施形態において、データ退避領域の格納内容を示す説明図である。
【図１７】第２の実施形態において、ＳＱＬ実行機構で行われるコミット処理の一例を示すフローチャートである。
【図１８】第２の実施形態において、ＳＱＬ実行機構で行われる参照処理の一例を示すフローチャートである。
【図１９】第２の実施形態において、ログ出力機構で行われる処理の一例を示すフローチャートである。
【図２０】本発明の第３の実施形態のシステムの構成を示すブロック図である。
【図２１】第３の実施形態において、ログ出力機構で行われる処理の一例を示すフローチャートである。
【図２２】第３の実施形態において、トランザクションの処理と時刻の関係を示すグラフである。
【図２３】従来例において、トランザクションの処理と時刻の関係を示すグラフである。
【符号の説明】
【０１００】
１０１  操作端末
１０２  サーバ
１０３  ストレージ
１０６  データベース
１０７  入出力機構
１０８  ＳＱＬ実行機構
１０９  排他制御機構
１１０  ログ出力機構
１１３  トランザクション管理テーブル
１１４  ロック管理テーブル
１１５  ログバッファ
１１６  ログ格納部
１１７  データ格納部
【図２】
2008287548.tif 000003
【図３】
2008287548.tif 000004
【図４】
2008287548.tif 000005
【図５】
2008287548.tif 000006
【図６】
2008287548.tif 000007
【図７】
2008287548.tif 000008
【図８】
2008287548.tif 000009
【図９】
2008287548.tif 000010
【図１０】
2008287548.tif 000011
【図１１】
2008287548.tif 000012
【図１２】
2008287548.tif 000013
【図１３】
2008287548.tif 000014
【図１４】
2008287548.tif 000015
【図１６】
2008287548.tif 000016
【図１７】
2008287548.tif 000017
【図１８】
2008287548.tif 000018
【図１９】
2008287548.tif 000019
【図２１】
2008287548.tif 000020
【図２２】
2008287548.tif 000021
【図２３】
2008287548.tif 000022
【図１】
2008287548.tif 000023
【図１５】
2008287548.tif 000024
【図２０】
2008287548.tif 000025