(57)【要約】【課題】複数の参加サーバおよび１つのコーディネータ・サーバ上に存在する複数のデータベース管理システム上のトランザクションを管理するためのシステム、方法、プログラム製品を提供すること。【解決手段】１つのトランザクションが、参加システムである複数のデータベース管理システムの２つ以上にわたる複数のステップによって進行する。複数のステップから成るトランザクション中で参加データベース管理システムのすべてに対してセーブポイントを少なくとも１つ割り当てる。ＤＢＭＳは、アプリケーションからのセーブポイントに戻るロールバック要求に対し、複数の参加データベース管理システムのすべてについて、トランザクションをセーブポイントまでロールバックすることによって応答する。さらに、分散データベース管理システムの処理を制御するコードであり、媒体に書き込まれるか、ＲＡＭ内にインスタンス化されるか、またはその両方であるコードを含むプログラム製品が開示される。
2004530213.tif 000002
【特許請求の範囲】
【請求項１】
独立したサーバ上に存在しコーディネータ・サーバを含む複数のデータベース管理システム上のトランザクションを管理する方法であって、１つのトランザクションが参加システムである前記複数のデータベース管理システムの２つ以上にわたる複数のステップを含み、
ａ）複数のステップから成るトランザクション中で、前記参加データベース管理システムのすべてに対して、セーブポイントを少なくとも１つ割り当てる段階と、
ｂ）アプリケーションが前記トランザクションのあるステップを拒否する決定を下したことが分った場合、前記参加データベース管理システムのすべてについて、前記トランザクションをセーブポイントまでロールバックする段階と、
ｃ）アプリケーションが前記トランザクションを拒否する決定を下さなかったことが分った場合、前記複数の（multiple）参加データベース管理システムのすべてについて、前記トランザクションをコミットする段階とを含む方法。
【請求項２】
前記トランザクションをコミットすることによってすべてのセーブポイントを解除する、請求項１に記載の方法。
【請求項３】
ａ）セーブポイント識別子をセーブポイントに割り当てること、
ｂ）前記コーディネータ・サーバから前記トランザクションに参加する前記複数の参加データベース管理システムに、前記セーブポイントを識別しセーブポイント情報を提供するメッセージを送信すること、
ｄ）前記参加データベース管理システムから前記コーディネータ・サーバに、前記セーブポイントの実行およびセーブポイント情報の提供に関するメッセージを送信すること、および、
ｅ）要求者に結果セットを返すことから成る方法によって、前記セーブポイントを設定し管理する段階をさらに含む、請求項１に記載の方法。
【請求項４】
前記コーディネータ・サーバから前記トランザクションに参加する前記複数の参加データベース管理システムに、前記セーブポイントを識別しセーブポイント情報を提供するメッセージを送信する段階が、前記トランザクションの開始時に、前記コーディネータ・サーバから前記複数の参加データベース管理システムに、
１）前記データベース・サーバが最後に通知を受けて以降にロールバックされたセーブポイントと、
２）まだ有効なセーブポイントと、
３）解除されたセーブポイントとを識別するメッセージを送信する段階を含む、請求項３に記載の方法。
【請求項５】
複数の応答する参加データベース管理システムから前記コーディネータ・サーバに、セーブポイントに関しセーブポイント情報の提供に関するメッセージを送信する段階が、前記トランザクションのステップをセーブポイントまでロールバックする時、セーブポイントを解除する時、要求を完了する時、または要求に応答を返す時に、前記複数の参加データベース管理システムから前記コーディネータ・サーバにメッセージを送信する段階を含み、前記方法が、
１）当該要求中にロールバックされたセーブポイントと、
２）まだ有効なセーブポイントと、
３）解除されたセーブポイントとを識別する段階を含む、請求項３に記載の方法。
【請求項６】
要求者にＳＱＬ結果セットを返す段階が、前記要求者に前記結果セットに関係付けられたカーソルに関係付けられたシーケンス番号を送信して、前記結果セットをセーブポイント範囲内に正しく位置づけることができるようにする段階をさらに含む、請求項３に記載の方法。
【請求項７】
独立したサーバ上に存在しコーディネータ・サーバを含む複数のデータベース管理システムを含む分散データベース管理システムであって、前記分散データベース管理システムが、
ａ）複数のステップから成るトランザクション中で、前記参加データベース管理システムのすべてに対して、セーブポイントを少なくとも１つ割り当てること、および、
ｂ）アプリケーションが前記複数のステップから成るトランザクションのあるステップを拒否する決定を下したことが分った場合、前記参加データベース管理システムのすべてについて、前記トランザクションをセーブポイントまでロールバックすることから成る方法によって、参加システムである前記複数のデータベース管理システムの２つ以上にわたる複数のステップを含むトランザクションを処理するように構成され管理される分散データベース管理システム。
【請求項８】
ａ）セーブポイント識別子をセーブポイントに割り当てること、
ｂ）前記コーディネータ・サーバから前記トランザクションに参加する前記複数の参加データベース管理システムに、前記セーブポイントを識別しセーブポイント情報を提供するメッセージを送信すること、
ｃ）前記参加データベース管理システムから前記コーディネータ・サーバに、前記セーブポイントの実行または前記トランザクション中のステップの完了、およびセーブポイント情報の提供に関するメッセージを送信すること、および、
ｄ）要求者にトランザクション結果セットを返すことから成る方法によって、さらに前記セーブポイントを設定し管理するように構成され管理される、請求項７に記載の分散データベース管理システム。
【請求項９】
前記コーディネータ・サーバから前記複数の参加データベース管理システムに、前記セーブポイントを識別しセーブポイント情報を提供するメッセージを送信する段階が、前記コーディネータ・サーバから前記複数の参加データベース管理システムに、
１）前記データベース・サーバが最後に通知を受けて以降にロールバックされたセーブポイントと、
２）まだ有効なセーブポイントと、
３）解除されたセーブポイントとを識別するメッセージを送信する段階を含むようにさらに構成され管理される、請求項８に記載の分散データベース管理システム。
【請求項１０】
前記複数のステップから成るトランザクションのステップをセーブポイントまでロールバックする時、セーブポイントを解除する時、または要求に応答を返す時に、前記複数の参加データベース管理システムから前記コーディネータ・サーバに、
１）当該要求中にロールバックされたセーブポイントと、
２）まだ有効なセーブポイントと、
３）解除されたセーブポイントとを識別するメッセージを送信することによって、前記複数の参加データベース管理システムから前記コーディネータ・サーバに、セーブポイントに関しセーブポイント情報の提供に関するメッセージを送信する段階を実行するように前記システムが構成され管理される、請求項７に記載の分散データベース管理システム。
【請求項１１】
要求者にＳＱＬ結果セットに関係付けられたカーソルに関係付けられたシーケンス番号を送信することによって前記要求者に前記結果セットを返す段階を実行し、それによって、前記結果セットをセーブポイントに関係付け、セーブポイント範囲内に正しく位置づけることができるように前記システムが構成され管理される、請求項７に記載の分散データベース管理システム。
【請求項１２】
分散データベース管理システムの処理を制御するためのコンピュータ可読プログラム・コードを有する記憶媒体を含むプログラム製品であって、前記分散データベース管理システムが、請求項１ないし６のいずれかに記載の方法の諸段階を実施するための、独立したサーバ上に存在しコーディネータ・サーバを含む複数の別個のデータベース管理システムを含むプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベース管理システムおよび分散データベース管理システムにおけるセーブポイントの管理に関する。
【背景技術】
【０００２】
データベースは、収集され記録され関係付けられたデータの倉庫であり、データ要素、データの論理的一貫性、データ固有の意味、データの利用法の焦点にある固有な価値を有している。さらに、データベースは、データベース編成、レコードおよびファイルへのアクセス可能性、データの動的な更新可能性のため、データベースを構成する個々の要素の総和の価値よりも遥かに大きな価値を有している。データを決まった方式で繰り返し矛盾なくデータベースに追加でき、関連するタイムリーで正確なデータをデータベースから取得できるのは、データベース管理システム（ＤＢＭＳ）の機能による。ＤＢＭＳは、データベース構造（スキーマおよびメタデータ）を生成するコンピュータ・アプリケーション・プログラムの集まりであり、データベース中のファイルの格納、検索、更新を行う。大規模なデータベースは、データの適時性と有効性を保証する機構を備えた複雑なデータベース管理システム（ＤＢＭＳ）によって管理される。ＤＢＭＳの必須要件は、データを正確かつ最新に保つことである。
【０００３】
マルチユーザ・データベースにとって、タイムリーに収集され報告される正確なデータは必須である。そのため、並列処理制御が行われる。並列処理制御は、同じデータにアクセスし更新しようとする複数のユーザが制御された方式の下で更新を行うことによって更新結果が正確となるよう保証し、またデータ閲覧者（readers）が、古いまたはコミット未済のデータではなく、最新のコミット済のデータを閲覧（see）できるように保証する。典型的な例として、航空機の個々の座席を割り当てる航空会社の予約データベースがある。多くの予約担当者が様々なフライトの多くの座席を割り当てるとしても、ＤＢＭＳの並列処理制御機能は、１つの座席にただ１人の乗客が割り当てられることを、逆に言えば、１つの座席がただ１人の乗客に割り当てられることを保証しなければならない。
【０００４】
ＤＢＭＳアクセス・ステートメント
データベース・ファイル上で行われる処理には、「データ操作」処理、とりわけSELECT、INSERT、UPDATE、DELETE処理がある。
１．SELECT処理は、データベースからデータを検索し、検索データを要求者に返す。
２．INSERT処理は、データベースにデータを追加する。
３．UPDATE処理は、既存レコードの値を変更する。
４．DELETE処理は、データベースからレコードを削除する。
【０００５】
トランザクション処理−トランザクションの読出しおよび書込み処理
挿入、削除、変更などのファイル変更処理は、「並列処理制御」を必要とする。これらの処理は一般に、読出し処理に続いて行われ、書込み処理の部分である。一般に読出し処理、たとえば、Read_Item(x)は、「ｘ」という名前のデータベース項目をエンドユーザのプログラム中の「ｘ」という名前のプログラム値に読み込む。Write_Item(x)処理は、エンドユーザのプログラム変数ｘの値をデータベース項目ｘに書き込む。
【０００６】
トランザクション処理−並列処理制御
並列処理制御は、実質上同時にレコードを変更（挿入、更新、削除）しようとする複数のエンドユーザが制御された方式で変更を行うことによって、データベースに格納されたデータが正確であることを保証する。またデータ閲覧者が、古いデータまたはコミット未済のデータではなく、最新のコミット済のデータを閲覧できるよう保証する。
【０００７】
トランザクション処理およびトランザクション状態
単一のデータベースにおいては並列処理を制御する様々な手段がある。最も一般的なものとして、たとえば、「ロッキング」があるが、ロッキングを行うと、１ユーザがあるレコードの変更、更新、または削除を試みる場合、他のユーザは、そのトランザクションが完了するまで、そのレコードにアクセスすることができなくなる。トランザクションは、そのトランザクションが行った変更を確定すること（コミット）によって、あるいはそのトランザクションが行った変更を取り消すこと（トランザクション・ロールバック）によって完了させることができる。トランザクションをロールバックするかどうかの判断は、アプリケーション・プログラムが行ってよく、また（たとえば、コミット防止条件に応答して）システムが行ってもよい。「完了」という用語は専門用語ではなく、データを書き込むこと、あるいはデータを書き込み、さらにトランザクションを「コミット」することを意味し、その後、別のユーザがそのデータにアクセスできるようになる。並列処理制御は、（１）トランザクションを「コミット」するか、または（２）トランザクションをアボートさせデータベースを以前の状態まで「ロールバック」するかのいずれかで終る。
【０００８】
並列処理制御およびトランザクション・ロギングの観点から見た場合、上記の項目１および２を含むモデルをより細かいレベルまたはトランザクション状態に分割するのが有利である。したがって、トランザクションを以下のステップまたはトランザクション状態に分割することができる。
１．BEGIN_TRANSACTIONは、トランザクション開始の標識を付ける。
２．SELECTまたはINSERTは、データベース・トランザクションの一環として、データベース項目に対する読出し処理および書込み処理を指示する。
３．END_TRANSACTIONは、SELECT処理またはINSERT処理の終了を指示する。これらの命令は次にトランザクション実行の終了の標識を付ける。変更を「コミット」できるかどうか、すなわち、変更を永続的に適用できるかどうかをＤＢＭＳが決定するのは、この時点である。
４．COMMIT_TRANSACTIONは、トランザクションの正常終了を通知し、トランザクションはデータベースに対してコミットされ、取り消されることはない。
５．ROLLBACKまたはABORTは、トランザクションが異常終了したことを通知し、ロールバック、すなわち、データベースに対する変更の取消しを行わなければならない。
【０００９】
トランザクション処理−システム・ログ
並列処理制御が失敗した場合、および並列処理上の問題が生じた場合、失敗したトランザクションを「ロールバック」する必要がある。トランザクションのロールバックは、システム・ログを使用して達成される。システム・ログは、トランザクションの進行につれ、トランザクション情報を記録する。その情報は一般に、トランザクションＩＤ、トランザクションによって実行されたあらゆる処理の前後でのデータ・イメージを含む。トランザクションの進行中にCOMMITまたはROLLBACKが実行されたこともログに記録される。
【００１０】
ロギングは「コミット・ポイント」で停止する。「コミット・ポイント」とは、データベースにアクセスするすべての処理が正常に実行され、データベースに対するすべてのトランザクション処理の結果がログまたはジャーナルに記録された時点をいう。
【００１１】
トランザクション処理−復旧およびロールバック
トランザクションがコミットに失敗した場合、データベースは失敗したトランザクションが開始される以前の状態までロールバックしなければならない。ロールバックは、ジャーナルまたはログ・エントリを使用して、データベースに対して行ったいくつかの変更を元に戻し、データベースに対して行った他の変更を再実行することによって行われる。
【００１２】
トランザクション処理−復旧およびロールバック−セーブポイント
セーブポイントはトランザクション中のブックマークのようなものである。セーブポイントは、トランザクションの開始から終了までの間に、アプリケーションによって生成することができる。
【００１３】
セーブポイントは、「セーブポイントまでのロールバック」を求めるアプリケーションからの要求によって、セーブポイントの設定以降にデータおよびスキーマに対して行った変更を取り消すことを可能にする。セーブポイントは、１組の非原子的なデータベース要求や原子的なトランザクションの１組のサブトランザクションを、それらが取消しの単位となるという点で、原子的に振舞わせる。実行中にアプリケーション・エラーが発生した場合、またはアプリケーションがエラーを検出した場合、セーブポイントの開始時点からセーブポイント・ロールバックが要求された時点までにトランザクションが行った変更を取り消し、トランザクション中の前の時点まで戻るために、セーブポイントを使用することができる。
【００１４】
セーブポイントは、複数のＳＱＬステートメントをグループ化して１つの実行ブロックにすることができるという点で、複合ＳＱＬステートメントに類似している。ブロックの最初のステートメントが実行される前に、セーブポイント・ブロックを開始させるセーブポイント要求が必要となる。後続ステートメントのいずれかがアプリケーション・エラーを起して終了した場合、ＤＢＭＳは当該ステートメントのみをロールバックする。これにより、複合ＳＱＬステートメントより細かい細分性が提供される。複合ＳＱＬステートメントでは、ブロック中のどこかで発生した１つのエラーが、ブロック全体をエラー終了させ、複合ＳＱＬステートメント全体をロールバックさせる。複数のステートメントから成るセーブポイント・ブロックの末尾で、セーブポイントを解除するか、あるいはセーブポイントまでロールバックすることができる。
【００１５】
アプリケーション・セーブポイントは、トランザクション中のＳＱＬステートメントのサブセットによって実行される作業または単位作業に対する制御を提供する。アプリケーション中で、セーブポイントを設定することができ、後でそのセーブポイントを解除するか、あるいはセーブポイント以降に実行された作業をロールバックすることができる。１つのトランザクション中で、複数のセーブポイントまたはネストされたセーブポイントを使用することも可能である。以下のコード片には、アプリケーションの動作を制御するために、セーブポイントを２つ使用した例が示されている。
INSERT INTO order ..
INSERT INTO order_ item .. lamp -
トランザクション中に第１のセーブポイントを設定する。
SAVEPOINT before_ radio ON ROLLBACK RETAINCURSORS
INSERT INTO order_ item .. Radio
INSERT INTO order item .. Power Cord
Pseudo-SQL:
IF SQLSTATE = "No Power Cord"
ROLLBACK TO SAVEPOINT before_ radio
RELEASE SAVEPOINT before_ radio
--トランザクション中に第２のセーブポイントを設定する。
SAVEPOINT before_ checkout ON ROLLBACKRETAIN CURSORS
INSERT INTO order .. Approval
Pseudo-SQL:
IF SQLSTATE = "No approval"
ROLLBACK TO SAVEPOINT before_checkout
トランザクションをコミットし、セーブポイントを解除する。
COMMIT
【００１６】
このコード片では、第１のセーブポイントが２つのデータ・オブジェクト間に依存関係を設定する。この依存関係は当該オブジェクト自体に固有のものではない。ラジオと電源コードとの間の上記関係を記述するのに参照整合性は使用されない。一方は他方がなくても存在可能だからである。しかし、販売者は電源コードを付属させずにラジオだけを顧客に発送したくはない。しかし、販売者は一方で、ラジオ用の電源コードがないために、トランザクション全体をロールバックしてランプの注文までキャンセルすることは望んでいない。アプリケーション・セーブポイントは、この注文を完了するのに必要となる細かい制御を提供する。
【００１７】
セーブポイントは、複数のCOMMITステートメントおよびROLLBACKステートメントを使用するのに比べ、よりよいパフォーマンスとより簡潔なアプリケーション設計を提供する。COMMITステートメントが発行された場合、ＤＢＭＳは、現在のトランザクションをコミットし、新しいトランザクションを開始するために、いくつかの余分な作業を行わなければならない。セーブポイントは、複数のCOMMITステートメントによる追加のオーバヘッドを伴うことなく、トランザクションをより小さな単位またはステップに分割する。以下のコード片には、セーブポイントを使用せず、複数のトランザクションを使用することによって生じるパフォーマンス上の不利益が示されている。
INSERT INTO order ..
INSERT INTO order_ item .. lamp
現在のトランザクションをコミットし、新しいトランザクションを開始する。
COMMIT INSERT INTO order item .. Radio
INSERT INTO order_ item .. Power Cord
Pseudo-SQL:
IF SQLSTATE = "No Power Cord"
現在のトランザクションをロールバックし、新しいトランザクションを開始する。
ROLLBACK
ELSE
現在のトランザクションをコミットし、新しいトランザクションを開始する。
COMMIT
INSERT INTO order .. Approval
Pseudo-SQL:
IF SQLSTATE = "No approval"
現在のトランザクションをロールバックし、新しいトランザクションを開始する。
ROLLBACK
ELSE
現在のトランザクションをコミットし、新しいトランザクションを開始する。
COMMIT
【００１８】
複数のコミット・ポイントの別の不都合は、完全に完了する前に、オブジェクトがコミットされ、したがって、他のアプリケーションから見えるようになることである。例２では、すべての項目が追加される前に、さらに悪いことには、承認される前に、別のユーザがその注文を利用できるようになる。アプリケーション・セーブポイントを使用することによって、処理に対する細かい制御を提供する一方で、「汚いデータ」のこうした公開が回避される。
【００１９】
アプリケーション・セーブポイントと複合ＳＱＬブロックを比較した場合、セーブポイントは複合ＳＱＬブロックに対して以下の利点がある。すなわち、トランザクション制御の向上、ロッキング競合の減少、アプリケーション・ロジックとの統合性の改善である。
【００２０】
複合ＳＱＬブロックは、原子的であるか非原子的であるかのいずれかである。原子的な複合ＳＱＬブロック中のステートメントが失敗した場合、複合ＳＱＬブロック全体がロールバックされる。非原子的な複合ＳＱＬブロック中のステートメントが失敗した場合、複合ＳＱＬブロック全体を含むトランザクションのコミットまたはロールバックは、アプリケーションによって制御される。これに比べて、セーブポイントの範囲内のステートメントが失敗した場合、アプリケーションは、セーブポイント範囲内のステートメントをすべてロールバックしたとしても、セーブポイント範囲外のステートメントによって実行された作業はコミットできる。このようなケース（this option）が、第１のコード片に例示されている。セーブポイントにかかわる作業がロールバックされても、セーブポイントの前にある２つのINSERTステートメントの作業はコミットされる。あるいは、アプリケーションは、セーブポイント範囲内のステートメントを含め、トランザクション中のすべてのステートメントによって実行された作業をコミットすることができる。
【００２１】
ユーザが複合ＳＱＬブロックを発行した場合、ＩＢＭ社製のＤＢ２リレーショナル・データベース管理システムなどのＤＢＭＳはそれと同時に、複数のステートメントから成る複合ＳＱＬブロック全体のために必要とされるロックを獲得する。ユーザがアプリケーション・セーブポイントを設定した場合、ＤＢＭＳはセーブポイント範囲内の各ステートメントが発行されるときにロックを獲得する。セーブポイントのロッキング挙動は、複合ＳＱＬブロックと比べ、ロッキング競合の発生を著しく減少させることができるので、アプリケーションが複合ＳＱＬステートメントによって実行されるロッキングを必要としない限り、セーブポイントを使用するのが最善であろう。
【００２２】
複合ＳＱＬブロックは、１組のステートメント全体を１つのステートメントとして実行する。アプリケーションは、複合ＳＱＬブロックにステートメントを追加するための制御構造や関数を使用することができない。これに比べて、アプリケーション・セーブポイントを設定した場合、アプリケーションは、他のアプリケーション関数やメソッドを呼び出し、あるいはwhileループなどの制御構造や動的ＳＱＬステートメントを用いて、セーブポイント範囲内でＳＱＬステートメントを発行することができる。アプリケーション・セーブポイントは、直観的な方法でＳＱＬステートメントをアプリケーション・ロジックと統合する自由をユーザに提供する。たとえば、以下のコード片において、アプリケーションはセーブポイントを設定し、そのセーブポイントの範囲内で２つのINSERTステートメントを発行する。アプリケーションはIFステートメントを使用し、条件が真であれば、add_battery()関数を呼び出す。add_battery()は、この例においてはセーブポイント範囲内に含まれるＳＱＬステートメントを発行する。最後に、アプリケーションは、セーブポイント範囲内（add_battery()関数によって発行されたＳＱＬステートメントを含む）で実行された作業をロールバックするか、あるいはトランザクション全体で実行された作業をコミットする。
void add_ batteries()
{
以下のステートメントによって実行される作業は、main()中のセーブポイント・セットによって制御される。
INSERT INTO order_ item .. Batteries
}
void main(int argc, char() *argv)
{
INSERT INTO order ..
INSERT INTO order_ item .. lamp
トランザクション中に第１のセーブポイントを設定する。
SAVEPOINT before_ radio ON ROLLBACK RETAINCURSORS
INSERT INTO order_ item .. Radio
INSERT INTO order_ item .. Power Cord
if (strcmp (Radio. power_source (),"AC/DC"))
{
add_ batteries();
}
Pseudo-SQL:
IF SQLSTATE = "No Power Cord"
ROLLBACK TO SAVEPOINT before_radio COMMIT
}
【００２３】
このようにセーブポイントは、原子的プロセスにおいてすら、高い細分性を提供する。
【００２４】
分散データベース
分散データベースはその重要性をますます高めている。その動機となっているのは、現代企業における分散化傾向、複数サーバの信頼性および保守性の向上、グローバル企業または分散企業全体でのデータ共有、大規模データベースを複数サイトに分散化してローカル・トランザクションをローカルに処理する機能をもたせた際のパフォーマンスの向上といった事柄である。しかし、複数の互いに関係するＤＢＭＳや分散データベースをサポートする複数サーバを分散させるには、データ・ネットワーキング、データ配布、レプリケーション管理機能、クエリやトランザクションの実行戦略、複数サーバにまたがるクエリの実行戦略、複数サーバすべてに関する整合性戦略、ローカル障害や通信障害からの復旧機能が必要となる。
【００２５】
「分散トランザクション」とは、分散データベースＤＢＭＳに含まれる複数のＤＢＭＳ内のレコードまたはファイルあるいはその両方に影響を及ぼすトランザクションをいう。
【００２６】
分散データベース−データ分割
分散データベースのさらなる特徴はデータ分割である。データ分割には３つの戦略がある。すなわち、あるタプルはあるサーバに格納し、他のタプルは他のサーバに格納する戦略（水平分割）、あるアトリビュートはあるサーバに格納し、他のアトリビュートは他のサーバに格納する戦略（垂直分割）、あるタプルのあるアトリビュートはあるサーバに格納し、同じタプルの他のアトリビュートは別のサーバに格納し、他のタプルのあるアトリビュートはまた別のサーバに格納し、同じ他のタプルの他のアトリビュートはさらに別のサーバに格納する戦略（混合分割）である。分割データ（fragments）は、すべての分割データのすべてのアトリビュートを定義するフラグメンテーション・スキーマと、分割データをサイトにマッピングするアロケーション・スキーマにマッピングされる。
【００２７】
分散データベース−分散データベースにおける並列処理制御および復旧
予想されるように、ノード間のレプリケーションの程度にかかわらず、単一プラットフォーム上の複数のデータベースと複数のサーバを用いる分散データベースとには、複雑な並列処理上の問題がある。ＤＢＭＳの並列処理制御システムは、複数のデータベース・エントリ間で並列処理を維持しなければならない。このシステムは、個々のサイトでの障害および通信ネットワーク障害に対処しなければならない。このシステムはまた、複数のサイトに格納されたデータベースの分割データと複製データとにアクセスする、コミット・プロシージャを取り扱わなければならないが、サイトや通信リンクはコミット処理中に障害を起すかもしれない。複数データベース・システムおよび分散データベース・システムにおけるコミット障害に対処するために、一次サイト技法（primary site technique）、一次コピー技法（primary copy technique）、投票技法（votingtechnique）を始めとする様々な戦略が使用される。
【００２８】
分散データベース−分散データベースにおけるセーブポイントおよび復旧
コイル（Coyle）らに付与された米国特許第５，６３０，１２４号「並列データベースにおいて分散更新要求の原子性を保証するためのシステムおよび方法（SystemAnd Method For Assuring Atomicity Of Distributed Update Requests In A ParallelDatabase）」には、並列動作する複数のデータベース管理システムにおいて分散要求を管理するための方法が記載されている。コイルらの記載によれば、通常は１つのＤＢＭＳにしか見えないセーブポイントが、トランザクションに参加する並列動作中のすべてのＤＢＭＳにまで拡大される。これによって、アプリケーションは、１つのＤＢＭＳ上でセーブポイントを設定し、別のＤＢＭＳ上でその同じセーブポイントまでロールバックできるようになる。コーディネータ・サーバから参加サーバへネットワーク接続を介してメッセージを送ることによって、セーブポイントを識別する。このメッセージに基づいて、参加サーバ上でローカル・セーブポイントが生成される。参加サーバは、当該トランザクションの実行が成功したか失敗したかを通知するメッセージを、またローカル・サーバ上で障害が発生した場合は、ローカル・サーバおよびその他のサーバ上でのトランザクションのロールバックを通知するメッセージをコーディネータ・サーバに送り返す。
【００２９】
コイルらは、トランザクションの開始に応答して、調整プロセスのための要求カウンタを初期化する方法を記載している。調整プロセスが分散化にかかわる要求（request for distribution）を受信するたびに、要求カウンタがインクリメントされる。セーブポイント・データを含む要求インスタンスが各要求ごとに生成され、データベースの分割区画を有する異なるノード上の選択された従属プロセスに分配される。選択された従属プロセスが要求インスタンスを受信すると、要求セーブポイント・データとローカルに生成されたセーブポイント・データとを有するローカル・セーブポイントが、選択された従属プロセスごとに格納される。要求インスタンスの実行が試みられた場合、実行の試みが成功したか失敗したかについての通知が調整プロセスに返される。これが各要求インスタンスについて行われる。いずれかの要求インスタンスの実行失敗が通知された場合、ローカル・セーブポイントが当該要求の要求インスタンスの実行を指示した各従属プロセス上で、ロールバックが実行される。
【特許文献１】
米国特許第５，６３０，１２４号
【発明の開示】
【発明が解決しようとする課題】
【００３０】
複数のサーバ・サイト、通信ネットワーク、データ分割、レプリケーションによって複雑さのレベルが高まったため、「コミット−ロールバック」方法よりも細かい制御レベルを提供することが必要とされている。遠隔通信ネットワークを介して結合された複数のサーバ上の分割され複製されたデータベースと共に機能するセーブポイント方法が必要とされている。
【課題を解決するための手段】
【００３１】
分散データベース・システムでセーブポイントを実施する際の問題は、本明細書に記載する、複数のサーバに分散され１つまたは複数の通信ネットワークによって結合された分割され複製されたデータベース要素にわたるセーブポイント機能を提供する方法、システム、プログラム製品によって回避される。
【００３２】
本発明の方法、システム、プログラム製品は、トランザクションに参加するサーバとコーディネータ・サーバの間で送受される、セーブポイント・データ（セーブポイント名、セーブポイントを生成したサーバ名、サーバのセーブポイント・シーケンス番号）を含むメッセージによって、分散セーブポイントを識別することを提供する。１つのメッセージがコーディネータ・サーバから参加サーバへ送られ、このメッセージによって、サーバが最後にコンタクトされて以降にロールバックされたセーブポイントの識別子、各ロールバックと関係付けられたカーソル配置（オープンまたはクローズ）、サーバが最後にコンタクトされて以降に新たに設定され、まだ有効であるセーブポイントのセーブポイント識別子、当該特定サーバが最後にコンタクトされて以降に解除されたセーブポイントのセーブポイント識別子が識別される。
【００３３】
各参加ＤＢＭＳは、コーディネータＤＢＭＳにメッセージを送信する。このメッセージによって、最後のメッセージ以降にロールバックされたセーブポイントの識別子（カーソル配置を伴う）、最後のメッセージ以降に設定され、まだ有効であるセーブポイントのセーブポイント識別子、最後のメッセージ以降に解除されたセーブポイントのセーブポイント識別子が識別される。
【００３４】
また、ＳＱＬ結果セットが要求者に返されるたび、サーバは要求者にカーソルに関係付けられたシーケンス番号も送信する。これによって、タスク、トランザクション、またはその他の作業単位中のセーブポイント範囲内に結果セットを正しく位置づけることができる。
【００３５】
並列処理、整合性、正確性、適時性が、本明細書に記載の方法、システム、プログラム製品によって実現される。本発明の一実施形態は、独立した参加サーバおよびコーディネータ・サーバに存在する複数のＤＢＭＳ上でのトランザクションを管理する方法であり、１つのトランザクションは、参加ＤＢＭＳである複数のＤＢＭＳのうちの２つ以上にわたる複数のステップを含む。
【００３６】
本発明の方法によれば、セーブポイントがＤＢＭＳのネットワーク上の参加ＤＢＭＳに割り当てられ、複数のステップから成るトランザクション、すなわち、複数のサブトランザクションを有するトランザクション中に少なくとも１つのセーブポイントが設定される。トランザクションの進行中、セーブポイントまで戻すロールバック要求が受信された場合、本発明の方法は、セーブポイント以降に実行された処理をロールバックするよう参加ＤＢＭＳに指示する。アプリケーションがトランザクションを（トランザクションを拒否するためにしろ）受け付けた場合、そのトランザクションは複数の参加ＤＢＭＳのすべてに受け付けられる。
【００３７】
セーブポイントの設定および管理は、セーブポイント識別子をセーブポイントに割り当て、セーブポイントを識別しセーブポイント情報を提供するメッセージをコーディネータ・サーバからトランザクションに参加する複数の参加データベース管理システムに送信し、ＳＱＬ要求の処理中のセーブポイントに関し、セーブポイント情報を提供するメッセージをトランザクションに参加する複数の参加データベース管理システムからコーディネータ・サーバに送信し、トランザクションの結果セットを要求者に返すことによって実現される。
【００３８】
セーブポイントを識別しセーブポイント情報を提供するメッセージをコーディネータ・サーバからトランザクションに参加する複数の参加データベース管理システムに送信する段階は、データベース・サーバが最後に通知を受けて以降にロールバックされたセーブポイント、まだ有効なセーブポイント、および解除されたセーブポイントを識別するメッセージをコーディネータ・サーバからトランザクションに実際に参加する複数の参加データベース・サーバに送信する段階を含む。セーブポイントに関し、セーブポイント情報を提供するメッセージを複数の参加データベース管理システムからコーディネータ・サーバに送信する段階は、セーブポイントが設定されて以降のセーブポイント情報、すなわち、当該要求中にロールバックされたセーブポイント、まだ有効なセーブポイント、および解除されたセーブポイントを識別するメッセージを複数の参加データベース・サーバからコーディネータ・サーバに送信する段階を含む。
【００３９】
本明細書でいうシーケンス番号は、結果セットの生成およびセーブポイント・アクティビティの回数の設定および提示を行い、結果セットとセーブポイントを関係付ける。ＳＱＬ結果セットを要求者に返す段階は、結果セットに関係付けられたカーソルに関係付けられたシーケンス番号を要求者に送信（flow）することによって、結果セットをセーブポイントに関係付け、セーブポイント範囲内に正しく位置づけることができるようにする段階を含む。
【００４０】
本発明の別の実施形態は、独立したサーバ上に存在しトランザクションの参加ＤＢＭＳである複数の別個のＤＢＭＳを含み、またコーディネータ・サーバを含む分散ＤＢＭＳである。分散ＤＢＭＳは、参加ＤＢＭＳである複数のＤＢＭＳのうちの２つ以上にわたる複数のステップ、すなわち、サブトランザクションを含むトランザクションを処理するように構成され制御される。これは、複数のステップから成るトランザクション中で参加ＤＢＭＳのすべてにわたってセーブポイントを少なくとも１つ割り当てる段階と、アプリケーション要求に応答して、トランザクションが実行したセーブポイント以降の処理を参加ＤＢＭＳのすべてにわたって取り消すことによってセーブポイントまでロールバックする段階とを含む方法によって行われる。
【００４１】
分散データベース管理システムはさらに、セーブポイント識別子をセーブポイントに割り当て、セーブポイントを識別しセーブポイント情報を提供するメッセージをコーディネータ・サーバから複数の参加データベース管理システムに送信し、セーブポイントに関し、セーブポイント情報を提供するメッセージを複数の参加データベース管理システムからコーディネータ・サーバに送信し、トランザクションの結果セットを要求者に返す方法によって、セーブポイントを設定し管理するように構成され制御される。
【００４２】
本発明のさらに別の実施形態はプログラム製品である。そのプログラム製品は、コンピュータ可読プログラム・コードを含む記憶媒体の形態をとり、インストレーション・テープ、ディスク、ディスケット、またはインストレーション・サーバ上のディスク、またはディスク・ドライブ、テープ・ドライブ、メモリ・アレイ、もしくはそれらの組合せなど個々のサーバ上の記憶媒体でよい。このコードは、媒体に書き込まれているか、ＲＡＭ内でインスタンス化されているか、またはその両方であり、分散データベース管理システムの処理を制御する。システムは、独立したサーバ上に存在するとともにコーディネータ・サーバを含む複数の別個のＤＢＭＳ、すなわち、参加ＤＢＭＳを含む。プログラム・コードは、参加ＤＢＭＳである複数のＤＢＭＳのうちの２つ以上にわたる複数のステップ、すなわち、サブトランザクションを含むトランザクションを処理するように、データベース管理システムを構成し制御する。これは、複数のサブトランザクション（ステップ）を含むトランザクション中で参加ＤＢＭＳのすべてにセーブポイントを少なくとも１つ割り当てる段階を含む方法によって行われる。拒否理由が見つかった場合、トランザクションは参加ＤＢＭＳのすべてでセーブポイントまでロールバックされる。
【００４３】
プログラム製品のプログラム・コードは、セーブポイント識別子をセーブポイントに割り当て、セーブポイントを識別しセーブポイント情報を提供するメッセージをコーディネータ・サーバから複数の参加データベース管理システムに送信し、セーブポイントに関し、セーブポイント情報を提供するメッセージを複数の参加データベース管理システムからコーディネータ・サーバに送信し、トランザクションの結果セットを要求者に返す方法によって、セーブポイントを設定し管理するように個々のＤＢＭＳを構成し制御する。
【００４４】
本発明の方法は、ＳＱＬを使用する任意のＤＢＭＳ、特にリレーショナル・データベース管理システム（ＲＤＢＭＳ）で有用であるが、たとえば、統合データベース管理システム（「ＣＯＤＡＳＹＬ」）、様々なネットワーク・データベース・パラダイムその他でも使用することができる。
【００４５】
別の態様では、本発明は、独立したサーバに存在するとともにコーディネータ・サーバを含む複数のリレーショナル・データベース管理システム上でトランザクションを管理する方法を提供する。この方法では、１つのトランザクションは、参加システムである複数のリレーショナル・データベース管理システムのうちの２つ以上にわたる複数のサブトランザクションを含む。前記方法は、複数のステップを含むトランザクション中で参加リレーショナル・データベース管理システムのすべてにセーブポイントを少なくとも１つ割り当てる段階と、参加リレーショナル・データベース管理システムのすべてで、アプリケーションがステップの受入れを決定したかそれとも拒否を決定したかサブトランザクションをテストする段階と、アプリケーションがステップを拒否したことが分った場合、参加リレーショナル・データベース管理システムのすべてで、そのステップをセーブポイントまでロールバックする段階とを含む。
【００４６】
好ましくは、本発明の方法は、トランザクションのコミットがすべてのセーブポイントを解除することを含む。
【００４７】
別の態様では、本発明の方法はさらに、セーブポイント識別子をセーブポイントに割り当て、セーブポイントを識別しセーブポイント情報を提供する段階においてメッセージをコーディネータ・サーバから複数の参加リレーショナル・データベース管理システムに送信し、セーブポイントの実行またはステップの完了、およびセーブポイント情報の提供に関するメッセージを複数の参加リレーショナル・データベース管理システムからコーディネータ・サーバに送信し、ステップの結果セットを要求者に返す方法によって、セーブポイントを設定し管理することを提供する。
【００４８】
好ましくは、この方法では、セーブポイントを識別しセーブポイント情報を提供するメッセージをコーディネータ・サーバからトランザクションに参加する複数のリレーショナル・データベース管理システムに送信する段階が、トランザクションの開始時に、サーバが最後に通知を受けて以降にロールバックされたセーブポイント、まだ有効なセーブポイント、および解除されたセーブポイントを識別するメッセージをコーディネータ・サーバから複数のデータベース・システムに送信する段階を含む。
【００４９】
好ましくは、この方法ではさらに、セーブポイントに関し、セーブポイント情報を提供するメッセージを複数の応答する参加リレーショナル・データベース管理システムからコーディネータ・サーバに送信する段階が、トランザクションをセーブポイントまでロールバックする時に、セーブポイントを解除し、要求を完了させ、または要求に応答するメッセージを複数の参加データベース・システムからコーディネータ・サーバに送信する段階を含み、前記方法は、当該要求中にロールバックされたセーブポイント、まだ有効なセーブポイント、および解除されたセーブポイントを識別する段階を含む。
【００５０】
好ましくは、この方法では、ＳＱＬ結果セットを要求者に返す段階が、結果セットに関係付けられたカーソルに関係付けられたシーケンス番号を要求者に送信することによって、結果セットをセーブポイント範囲内に正しく位置づけることができるようにする段階をさらに含む。
【００５１】
次に本発明を、添付の図面を参照しながら、例としてのみ説明する。
【発明を実施するための最良の形態】
【００５２】
本発明は、複数のデータベース管理システム（ＤＢＭＳ）にわたる分散トランザクション中で、複数のＤＢＭＳにわたるセーブポイントを設定し、ロールバックし、解除するための方法、システム、プログラム製品である。本発明の方法、システム、プログラム製品は一般に、リレーショナル・データベース管理システム（ＲＤＢＭＳ）と共に使用するが、本発明の方法、システム、プログラム製品は、ＳＱＬ（構造化照会言語）を使用する任意のＤＢＭＳと共に使用してよい。SAVEPOINT SQLステートメントを用いて、トランザクション中に境界標識（milestone）を置くことができる。セーブポイント以降で変更されたデータやスキーマは、アプリケーション・ロジックの必要次第で、トランザクションの結果全体に影響を及ぼさずに、後から取り消すことができる。セーブポイントまでのロールバックは、セーブポイントが設定された後にオープンされたＳＱＬカーソルを選択的にクローズするためにも使用される。
【００５３】
本発明は、分散トランザクション中にグローバル・セーブポイントを一意に設定し識別する方法を提供する。本発明はまた、最後の要求以降にトランザクション中で設定またはロールバックされたセーブポイントのリストを識別し分散トランザクションに参加するすべてのＤＢＭＳ（ＤＢＭＳ  Ｂ）に通知する方法をトランザクション・コーディネータ（ＤＢＭＳ  Ａ）に提供する。最後に、コーディネータに要求を返すときに、設定、解除、またはロールバックされたすべてのセーブポイントを識別しコーディネータに通知する方法を参加ＤＢＭＳに提供する。
【００５４】
本発明は、ネットワーク環境で実施される。図１には、複数のサーバ５３１、５３３、５３５、５３７、およびコーディネータ・サーバ５２１を含むネットワークが示されている。サーバはネットワーク５３０を介して接続される。コーディネータ・サーバ５２１は、クライアント・アプリケーション５１１に接続性を提供する。クライアント・アプリケーションは、データベース検索、データ挿入、データ更新、データ削除のいずれか１つを試みることによって、データベース・アクセスを開始する。トランザクションには、コーディネータ５２１、および複数のサーバ５３１、５３３、５３５、５３７上のデータおよびデータベース管理システムが関与する。
【００５５】
本発明は、分散トランザクションに参加する複数のＤＢＭＳサーバのすべてでセーブポイントを管理するために、４つの手段（four items）を使用する。
【００５６】
最初に、ネットワーク接続を使用する際に、複数のＤＢＭＳサーバにわたってセーブポイントを生成し識別し管理する。これは、ＳＱＬ要求であるコーディネータからのメッセージによって達成される。ＳＱＬ要求は、セーブポイント名、セーブポイントを生成したサーバの名前、セーブポイントを一意に識別するためのサーバのセーブポイント生成シーケンス番号を含む。本明細書でいう「セーブポイント識別子」とはこれら３つの値をいう。
【００５７】
第２に、コーディネータ・サーバから参加ＤＢＭＳサーバに、カーソルおよびロックを含むＳＱＬ要求またはクエリを一般に用いて、その後のメッセージを送信する。このメッセージは以下のものを識別する。
１．当該サーバが最後にコンタクトされて以降にロールバックされたセーブポイントの識別子（それがある場合）。このメッセージは、ロールバックに関係付けられたカーソル配置（オープンまたはクローズ）も含む。
２．当該サーバが最後にコンタクトされて以降に新たに設定され、まだ有効なセーブポイントの識別子（それがある場合）。
３．当該サーバが最後にコンタクトされて以降に解除されたセーブポイントの識別子（それがある場合）。
【００５８】
第３に、一般にアプリケーション・プログラムからの要求に対する応答であるメッセージを、一般にＳＱＬ要求への応答によって、参加ＤＢＭＳサーバからコーディネータＤＢＭＳサーバに送信する。このメッセージは以下のものを識別する。
１．当該要求中にロールバックされたセーブポイントの識別子（それがある場合）と、各ロールバック要求で指定されたカーソル配置。
２．当該要求中に設定され、まだ有効なセーブポイントの識別子（それがある場合）。
３．当該要求中に解除されたセーブポイントの識別子（それがある場合）。
【００５９】
第４に、ＳＱＬ結果セットが要求者に返されるたびに、サーバは、カーソルに関係付けられたシーケンス番号を要求者に送信し、結果セットを作業単位中のセーブポイント範囲内に正確に位置づけることができるようにする。
【００６０】
上記の手段を使用することで、分散トランザクションに関与するＤＢＭＳサーバは、追加のネットワーク・メッセージを最低限に抑えて、分散トランザクションに関与するすべてのサーバに任意のセーブポイント・アクティビティを通知することができ、ＳＱＬカーソルの各々について正確なカーソル状態を取得することができる。
【００６１】
ＳＱＬ３規格は、単一ＤＢＭＳにおけるセーブポイントの規格を提示した。いくつかの市販のＤＢＭＳ製品（Ｏｒａｃｌｅ、Ｓｙｂａｓｅなど）は現在、これらの非分散セーブポイントをサポートしている。しかし、複数のＤＢＭＳシステムまたはサーバあるいはその両方に関与する分散トランザクションにまでセーブポイント処理を拡張している市販ＤＢＭＳのベンダはない。
【００６２】
本発明は、ＳＱＬ３のセーブポイント概念を拡張して、複数のＤＢＭＳおよびサーバに分散させ、追加のネットワーク・オーバヘッドを最低限に抑えつつ、分散トランザクションのためのデータベースの相互運用性が得られるようにした。分散セーブポイントは、分散トランザクションに関与するすべてのＤＢＭＳにわたるトランザクションのために、ある特定の時点でのデータおよびスキーマの状態を提示する。セーブポイントは一意名を有し、（名前＜セーブポイント名＞の）セーブポイントを設定すると言われる。データおよびスキーマは、セーブポイントまで復旧（ロールバック）することによって、それらがセーブポイントの設定時にとっていた状態に戻すことができる。
【００６３】
分散セーブポイントは、セーブポイントの設定後、トランザクションに関与するすべてのデータベース管理システムから見えるようになる。セーブポイントの範囲は、トランザクション中のＳＱＬステートメントの実行に関して線形でよい。セーブポイントの範囲が線形である場合、より古いセーブポイントを同じ名前のより新しいセーブポイントで置き換えることができる。たとえば、ＤＢＭＳ  Ａで実行中のトランザクションがセーブポイントＳを設定し、次にＤＢＭＳ  ＢでセーブポイントＳをロールバックするストアドプロシージャを起動した場合、セーブポイントＳを設定して以降のＤＢＭＳ  ＡおよびＤＢＭＳ  Ｂ上での戻りデータおよびスキーマは、セーブポイントＳの前の状態にロールバックされなければならない。
【００６４】
分散トランザクション中のサーバが新しいカーソルをオープンした場合、そのサーバは、分散トランザクション中のセーブポイント系列内にカーソルをどう当てはめるかを識別する新しいシーケンス番号Ｍを生成する。値Ｍは次式で計算される。
Ｍ＝１＋ＭＡＸ
ただし、ＭＡＸは直前のセーブポイント番号と直前のオープン・シーケンス番号の大きいほうである。直前のオープン・シーケンス番号はＮで表す。値Ｍは、OPEN要求を発行したか、またはストアドプロシージャの結果セットを受信するＳＱＬ要求者に送信しなければならない。値Ｍは、ROLLBACKTO SAVEPOINT要求時に、どのカーソルをクローズするべきか判断するために使用される。たとえば、ストアドプロシージャが以下の一連のＳＱＬステートメントを発行するとする。
OPEN C1 （シーケンス番号Ｍ＝５）
OPEN C2 （シーケンス番号Ｍ＝６）
SAVEPOINT XYZ （シーケンス番号Ｍ＝７）
OPEN C3 （シーケンス番号Ｍ＝８）
このＳＱＬステートメント列では、ＸＹＺへのロールバック（シーケンス番号７）は、カーソルＣ３（シーケンス番号８）のステータスには影響するが、その他２つのカーソルには影響しない（それらのシーケンス番号は７より小さいからである）。
【００６５】
分散トランザクション中のサーバが新しいセーブポイントを生成する場合、新しいセーブポイント識別子をアクティブ・セーブポイントのリストに追加しなければならない。セーブポイント・シーケンス番号は、Ｍ＋１の値をもつ整数である。ただし、Ｍは、ＭＡＸ（直前のセーブポイント番号，直前のオープン・シーケンス番号）に等しい。
【００６６】
新しいセーブポイントの生成に続き、それがまだ有効ならば、サーバは、セーブポイントの生成後最初のコーディネータまたは参加サーバへのアクセス時に、新しいセーブポイント識別子を送信する。
【００６７】
分散トランザクション中のサーバがセーブポイントまでロールバックする場合、セーブポイントが生成されて以降にアクセスされたコーディネータまたは参加サーバの各々に、セーブポイント識別子とカーソル配置とを含むメッセージを送信する。このメッセージは、セーブポイントへのロールバックに続いて直ちに送信することもでき、次のＳＱＬメッセージがサーバに送信されるまで遅延させることもできる。メッセージを直ちに送信するか遅延させるかについての判断は、ＤＢＭＳ、オペレーティング・システム、あるいはその両方が行ってよく、一般にデータベースの並列処理とネットワーク・パフォーマンスとの間のバランスに基づいて行われる。
【００６８】
サーバはまた、シーケンス番号がセーブポイント・シーケンス番号より大きいＳＱＬカーソルをクローズする（カーソル配置がクローズである場合）。
【００６９】
分散トランザクション中のサーバが、新しいセーブポイントが設定されたことを通知するメッセージを受信した場合、そのサーバは新しいセーブポイント識別子をアクティブ・セーブポイントのリストに追加しなければならない。セーブポイント識別子中で提供された値から、セーブポイント・シーケンス番号を獲得する。サーバは次に、セーブポイントの生成後にアクセスされたコーディネータおよび参加サーバのすべてに、セーブポイント識別子を送信する。ただし、当該サーバにセーブポイント識別子を送信したコーディネータ・サーバは除く。メッセージは、新しいカーソル、ロック、および関連セーブポイントの生成によって影響を受けるすべてのセーブポイントの一覧を提供する。応答に際して、セーブポイント識別子のリストはコーディネータに返される。
【００７０】
分散トランザクション中のサーバが、セーブポイントへのロールバックが発行されたことを通知するメッセージを受信した場合、そのサーバは最初に、アクティブ・セーブポイントのリストを調べて、そのセーブポイントが存在しているか検証する。セーブポイントが有効である場合、サーバはその指定されたセーブポイントまでロールバックする。カーソル配置がクローズである場合、サーバは、シーケンス番号がセーブポイント・シーケンス番号より大きいＳＱＬカーソルおよびロックを各々クローズする。
【００７１】
サーバはまた、セーブポイントの生成後にアクセスされたコーディネータまたは参加サーバの各々に、セーブポイント識別子とカーソル配置を送信しなければならない。ただし、当該サーバにセーブポイント識別子を送信したサーバは除く。これらのメッセージは、直ちに送信することもでき、次のメッセージがサーバに送信されるまで遅延させることもできる。これは、ネットワーク負荷とデータベースの並列処理との間のバランスに基づいて決める。
【００７２】
分散トランザクション中のサーバが、セーブポイントを解除する場合、そのサーバは最初に、そのセーブポイントがアクティブ・セーブポイントのリストに存在しているか検証する。セーブポイントが存在している場合、セーブポイントの生成後にアクセスされたコーディネータまたは参加サーバの各々に、セーブポイント識別子を送信する。最後に、サーバは、アクティブ・セーブポイントのリストから当該セーブポイントを削除する。これらのメッセージは、直ちに送信することもでき、次のメッセージがサーバに送信されるまで遅延させることもできる。
【００７３】
分散トランザクション中のサーバが、セーブポイントが解除されたことを通知するメッセージを受信した場合、そのサーバは最初に、そのセーブポイントがアクティブ・セーブポイントのリストに存在しているか検証する。セーブポイントが存在している場合、セーブポイントの生成後にアクセスされたコーディネータまたは参加サーバの各々に、セーブポイント識別子を送信する。ただし、当該サーバにセーブポイント識別子を送信したサーバは除く。これらのメッセージは、直ちに送信することもでき、次のメッセージがサーバに送信されるまで遅延させることもできる。最後に、サーバは、アクティブ・セーブポイントのリストから当該セーブポイントを削除する。
【００７４】
本発明は、リレーショナル・データベース管理システム（ＲＤＢＭＳ）に関連して説明し例示したが、本発明の方法、システム、プログラム製品は、その他のＤＢＭＳパラダイムにも適用可能である。
【実施例１】
【００７５】
図２、図３、図４に示す実施例１ないし３には、セーブポイントについての本発明の方法、システム、プログラム製品の実際の適用例が示されている。
【００７６】
以下の実施例には、分散セーブポイントの方法、システム、プログラム製品を使用して、ＤＢＭＳサーバの分散ネットワークでセーブポイント処理を調整する方法が示されている。実施例には、３つのＤＢＭＳサーバが存在する。
【００７７】
１．ＤＢＭＳ＿Ａは分散トランザクションの「ルート」である。ＤＢＭＳ＿Ａは分散トランザクションのコーディネータとして動作する。
【００７８】
２．ＤＢＭＳ＿ＢはＤＢＭＳ＿Ａに従属する。ＤＢＭＳ＿Ｂは分散トランザクションにおける参加サーバであり、自らも参加ＤＢＭＳサーバ（ＤＢＭＳ＿Ｃ）を呼び出す。ＤＢＭＳ＿Ｂはこの参加サーバのコーディネータである。
【００７９】
３．ＤＢＭＳ＿ＣはＤＢＭＳ＿Ｂに従属する。ＤＢＭＳ＿Ｃは、ＤＢＭＳ＿Ｃ配下に参加サーバがないため、参加サーバとしてのみ動作する。
【００８０】
図２に示す実施例１では、コーディネータがすべてのセーブポイント命令を発行し、参加サーバはネットワークを介してセーブポイント要求を受信するのみである。参加サーバはコーディネータの要求に応答するが、自らセーブポイント要求を発行することはない。
【００８１】
本実施例では、セーブポイントＡＢＣの識別子を含むメッセージが、INSERT要求を発行する。ＤＢＭＳ＿Ａは行をローカル・テーブルに挿入する（１）。リモート・サーバＤＢＭＳ＿ＢにINSERTが指示される（２）。リモート・サーバはINSERTを実行し、応答を返す（３）。ＤＢＭＳ＿ＡはセーブポイントＡＢＣを生成し（４）、ＡＢＣをアクティブ・セーブポイントのリストに追加するが、（ネットワーク・オーバヘッドを回避するため）ＤＢＭＳ＿Ｂにメッセージを送信しない。ＤＢＭＳ＿Ｂに対するINSERTが検出された場合、ＤＢＭＳ＿Ａはこの機会を利用して、セーブポイント要求をセーブポイント識別子と共にリモート・サーバに送信する（５）。この時点で、ＤＢＭＳ＿Ｂはセーブポイント処理を実行し、併せてINSERT処理も実行する（６）。処理の正常終了を通知する応答が返される。
【００８２】
ＤＢＭＳ＿Ａは別のセーブポイントＤＥＦを設定する（７）。この情報はアクティブ・セーブポイントのリストに追加されるが、（ネットワーク送信を省くため）メッセージは送信されない。ＤＢＭＳ＿ＡはセーブポイントＡＢＣまでロールバックする（８）。これによってセーブポイントＤＥＦが取り消される。本実施例では、ロールバック時にネットワーク・メッセージを送信しないが、ロック競合の問題が懸念される場合、ロールバックのたびメッセージを送信する実施形態も可能である。
【００８３】
次のＤＢＭＳ＿Ｂへの参照時（９）、ロールバックされたセーブポイントの名前と生成サーバとがINSERTステートメントと共に送信される。ＡＢＣへのロールバックによってＤＥＦは「新アクティブ・セーブポイント」のリストから削除されたので、セーブポイントＤＥＦはＤＢＭＳ＿Ｂに送信されないことに留意されたい。ＤＢＭＳ＿Ｂは（ステップ５／６で行ったINSERT処理を取り消す）要求されたロールバックを実行し（１０）、次に要求されたINSERTを実行する。正常終了を通知する応答メッセージが返される。
【実施例２】
【００８４】
実施例２が図３に示されている。この第２の実施例では、コーディネータおよび参加サーバが共にセーブポイント命令を発行する。本実施例では、ＤＢＭＳ＿Ａが行をローカル・テーブルに挿入する（１）。次にINSERTがリモート・サーバＤＢＭＳ＿Ｂに指示される（２）。リモート・サーバはINSERTを実行し、応答を返す（３）。ＤＢＭＳ＿ＡはセーブポイントＡＢＣを生成し、ＡＢＣをアクティブ・セーブポイントのリストに追加するが（４）、（ネットワーク・オーバヘッドを回避するため）ＤＢＭＳ＿Ｂにメッセージを送信しない。
【００８５】
ＤＢＭＳ＿Ｂでのプロシージャの呼び出しが検出された場合、ＤＢＭＳ＿Ａはこの機会を利用して、セーブポイント識別子をリモート・サーバに送信する（５）。ＤＢＭＳ＿Ｂはセーブポイント処理を実行し、併せてストアドプロシージャも呼び出す。ストアドプロシージャは行を挿入し、新しいセーブポイントＥＥＥを生成する。処理の成功を通知する応答が返され、セーブポイントの生成がＤＢＭＳ＿Ａに報告される（６）。ＤＢＭＳ＿ＡはＤＢＭＳ＿Ｂによって識別されたセーブポイントを生成する（７）。ＤＢＭＳ＿ＡはセーブポイントＡＢＣまでロールバックする。これによってセーブポイントＥＥＥが取り消されるが、ネットワーク送信はまだ行わない（８）。ＤＢＭＳ＿Ａは新しいセーブポイントＲＲＲを生成する（９）。これは後で使用するためアクティブ・セーブポイントのリストに記録される。ＤＢＭＳ＿Ｂに対するINSERTによって、ロールバックと新しいセーブポイントがＤＢＭＳ＿Ｂに送信される（１０）。ＲＤＢＭＳ＿Ｂは要求されたセーブポイントとINSERT処理を実行する（１１）。
【実施例３】
【００８６】
実施例３が図４に示されている。この最後の実施例では、３つのＤＢＭＳサーバ間のより複雑なインタラクションが示されている。本実施例では、ＤＢＭＳ＿Ａが挿入を要求する（１）。次にＤＢＭＳ＿ＡはＤＢＭＳ＿Ｂに挿入を要求し（２）、ＤＢＭＳ＿Ｂはこれを行い、ＤＢＭＳ＿Ａに通知する。ＤＢＭＳ＿Ａは次にセーブポイントＡＢＣを発行し（４）、セーブポイントＡＢＣの識別子とCALL要求を含むメッセージを用いてＤＢＭＳ＿Ｂを呼び出す（５）。ＤＢＭＳ＿Ｂはセーブポイント識別子を受信し、そのＡＢＣの識別子と共にCALL要求を受信し、セーブポイントＡＢＣの識別子と新しいセーブポイントＸＹＺの識別子とINSERTとを含むメッセージをＤＢＭＳ＿Ｃに送信する（７）。ＤＢＭＳ＿ＣはセーブポイントＡＢＣおよびセーブポイントＸＹＺを生成し、INSERTを実行し、メッセージをＤＢＭＳ＿Ａにブロードキャストする（８）。ＤＢＭＳ＿ＡはセーブポイントＸＹＺを生成し（８）、セーブポイントＡＢＣをロールバックする（９）。ＤＢＭＳ＿Ａは次にファイルを挿入し（１０）、セーブポイントＱＲＳを生成し、ロールバックＡＢＣの識別子とセーブポイントＱＲＳの識別子とCALL要求とを含むメッセージを用いてＤＢＭＳ＿Ｃを呼び出す。セーブポイントＡＢＣまでロールバックし、セーブポイントＱＲＳを生成し、呼び出しを行い、ＤＢＭＳ＿ＣでINSERTを行うのためのメッセージはＤＢＭＳ＿Ｂを通過し、ＤＢＭＳ＿ＡのロールバックＡＢＣとＤＢＭＳ＿ＡのセーブポイントＱＲＳとINSERT要求を含む新しいメッセージがＤＢＭＳ＿Ｃに送信される。ＤＢＭＳ＿ＣはＡＢＣをロールバックし、セーブポイントＱＲＳを生成し、ＤＢＭＳ＿Ｃへの挿入を行い（１４）、メッセージをＤＢＭＳ＿ＡおよびＤＢＭＳ＿Ｂに送信する。
【００８７】
本発明を好ましい実施形態および例に関して説明したが、本発明はそれらに限定されるものではなく、本明細書に添付の特許請求の範囲によってのみ限定される。
【図面の簡単な説明】
【００８８】
【図１】マルチ・データベース／マルチ・サーバＤＢＭＳの図である。
【図２】コーディネータがすべてのセーブポイント命令を発行し、参加者はセーブポイント要求をネットワークを介して受信するのみである方法を示す実施例１の図である。
【図３】コーディネータと参加者の双方がセーブポイント命令を発行する方法を示す実施例２の図である。
【図４】３つのＤＢＭＳサーバ間のより複雑なインタラクションを示す実施例３の図である。
【図１】
2004530213.tif 000003
【図２】
2004530213.tif 000004
【図３】
2004530213.tif 000005
【図４】
2004530213.tif 000006
【国際公開パンフレット】
2004530213.tif 000007
2004530213.tif 000008
2004530213.tif 000009
2004530213.tif 000010
2004530213.tif 000011
2004530213.tif 000012
2004530213.tif 000013
2004530213.tif 000014
2004530213.tif 000015
2004530213.tif 000016
2004530213.tif 000017
2004530213.tif 000018
2004530213.tif 000019
2004530213.tif 000020
2004530213.tif 000021
2004530213.tif 000022
2004530213.tif 000023
2004530213.tif 000024
2004530213.tif 000025
2004530213.tif 000026
2004530213.tif 000027
2004530213.tif 000028
2004530213.tif 000029
2004530213.tif 000030
2004530213.tif 000031
2004530213.tif 000032
2004530213.tif 000033
2004530213.tif 000034
2004530213.tif 000035
2004530213.tif 000036
【国際公開パンフレット（コレクトバージョン）】
2004530213.tif 000037
2004530213.tif 000038
【国際調査報告】
2004530213.tif 000039
2004530213.tif 000040
2004530213.tif 000041