(57)【要約】  １つ以上のノードが、共有された永続的な記憶装置へのアクセスを有する非共有データベースシステムにおいて、分散型トランザクションを処理するための技術を提供する。分散型トランザクションのコーディネータは、２段階コミットプロトコルを用いて分散型トランザクションを調整するのではなく、コーディネータが保持するトランザクションの状態情報へのアクセスを有する参加者とともに、１段階コミットプロトコルを用いる。トランザクションの状態情報は、たとえば、コーディネータの再実行ログ内に存在し得る。コーディネータが故障した場合に、当該参加者は、共有ディスクに記憶された情報に基づき、分散型トランザクションの状態を判断することができる。加えて、コーディネータは、当該参加者が「準備の整った」正式な状態に入らなくても、参加者が共有ディスクに記憶した情報に基づき、分散型トランザクションのコミットが可能であるか否かを判断することができる。
2007501456.tif 000002
【特許請求の範囲】
【請求項１】
非共有データベースシステムにおいて分散型トランザクションを実行するための方法であって、
前記非共有データベースシステムの第１の非共有ノードにおいて、前記分散型トランザクションを調整するコーディネータに、前記分散型トランザクションの状態を示す情報を永続的な記憶装置に記憶させるステップを含み、
前記永続的な記憶装置は、前記分散型トランザクションの一部として１つ以上の演算を実行できる参加者にとってアクセス可能であり、
前記参加者は、前記非共有データベースシステムの第２の非共有ノード上に存在し、前記方法はさらに、
前記非共有データベースシステムの前記第２の非共有ノードにおいて、前記参加者に、前記永続的な記憶装置から前記情報を読出すことによって前記分散型トランザクションの前記状態を判断させるステップを含む、方法。
【請求項２】
前記参加者は、前記分散型トランザクション内の複数の参加者のうちの第１の参加者であり、
前記複数の参加者は、前記永続的な記憶装置へのアクセスを有さない第２の参加者を含み、
前記方法はさらに、２段階コミットプロトコルに従い、前記コーディネータが前記第２の参加者と対話するステップを含む、請求項１に記載の方法。
【請求項３】
前記コーディネータが前記分散型トランザクションをコミットするステップと、
前記コーディネータが前記分散型トランザクションをコミットした後、前記コーディネータが前記参加者にコミットメッセージを送信するステップと、
１組の条件が満たされるまで、前記分散型トランザクションの前記状態を示す前記情報が上書きまたは削除されることを防止するステップとをさらに含み、前記１組の条件内の１つの条件は、前記コーディネータが前記参加者からコミット確認メッセージを受信することである、請求項１に記載の方法。
【請求項４】
前記参加者が前記コーディネータに対し、第１の情報片を送信するステップをさらに含み、前記第１の情報片は、前記分散型トランザクションの一部として前記参加者により実行される仕事に関連し、前記方法はさらに、
前記コーディネータが、前記第１の情報片と前記第２の非共有ノードの再実行ログに関連する情報との比較を実行するステップと、
前記コーディネータが、前記比較に少なくとも部分的に基づいて前記トランザクションをコミットすべきか否かを判断するステップとをさらに含む、請求項１に記載の方法。
【請求項５】
情報片は、前記分散型トランザクションの一部として前記参加者により行なわれた最新の変更のログシーケンス番号を含む、請求項４に記載の方法。
【請求項６】
送信する前記ステップは、
前記参加者が、前記分散型トランザクションとは関係のない目的のために、前記第１の非共有ノードに送信されているメッセージを識別するステップと、
前記メッセージ上に前記ログシーケンス番号を重畳するステップとを含む、請求項５に記載の方法。
【請求項７】
非共有データベースシステムにおいて分散型トランザクションを実行するための方法であって、
前記分散型トランザクションの一部として１つ以上の演算を実行する参加者を割当てる
ステップを含み、
前記参加者は、前記非共有システムの第１の非共有ノード上に存在し、前記方法はさらに、
前記参加者に、前記１つ以上の演算の実行中に前記参加者によって行なわれた変更を示す状態情報を永続的な記憶装置に記憶させるステップを含み、
前記永続的な記憶装置は、前記分散型トランザクションを調整する責任を負うコーディネータにとってアクセス可能であり、
前記コーディネータは、前記非共有データベースシステムの第２の非共有ノード上に存在し、前記方法はさらに、
前記非共有データベースシステムの前記第２の非共有ノード上において、前記永続的な記憶装置上の前記状態情報に基づき、前記参加者が前記１つ以上の演算の実行により生じた変更を永続的な記憶に書込んだか否かを前記コーディネータに判断させるステップと、
前記参加者が前記１つ以上の演算の実行により生じた変更を永続的な記憶に書込んだか否かに少なくとも部分的に基づき、前記コーディネータプロセスが、前記分散型トランザクションはコミットされ得るか否かを判断するステップとを含む、方法。
【請求項８】
前記参加者に、前記１つ以上の演算の実行中に前記参加者によって行なわれた変更を示す状態情報を永続的な記憶装置に記憶させる前記ステップは、前記参加者に、前記永続的な記憶装置上の再実行ログに再実行情報を記憶させるステップを含み、
前記永続的な記憶装置上の前記状態情報に基づき、前記参加者が前記１つ以上の演算の実行により生じた変更を永続的な記憶に書込んだか否かを前記コーディネータに判断させる前記ステップは、前記変更についての前記再実行情報が前記永続的な記憶に書込まれたか否かを判断する前記参加者の前記再実行ログを調査するステップを含む、請求項７に記載の方法。
【請求項９】
前記参加者は、前記分散型トランザクション内の複数の参加者のうちの第１の参加者であり、
前記複数の参加者は、前記コーディネータによってアクセス可能ではない第２の永続的な記憶装置に状態情報を記憶する第２の参加者を含み、
前記方法はさらに、２段階コミットプロトコルに従い、前記コーディネータが、前記第２の参加者と対話するステップを含む、請求項７に記載の方法。
【請求項１０】
前記永続的な記憶装置上の前記情報は、前記参加者が、前記１つ以上の演算の実行により生じた変更を永続的な記憶に書込んでいないことを示し、
前記方法はさらに、前記参加者に、前記１つ以上の演算の実行により生じた前記変更を永続的な記憶に書込ませるために、前記コーディネータが、再実行を強制するメッセージを前記参加者に送信するステップを含む、請求項７に記載の方法。
【請求項１１】
前記再実行を強制するメッセージを送信する前記ステップは、
前記分散型トランザクションとは関係のない目的のために、前記第１の非共有ノードに送信されているメッセージを識別するステップと、
前記メッセージ上に前記再実行を強制するメッセージを重畳するステップとを含む、請求項１０に記載の方法。
【請求項１２】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１３】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能
な媒体。
【請求項１４】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１５】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１６】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項５に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１７】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項６に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１８】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項７に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１９】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項８に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２０】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項９に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２１】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１０に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２２】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は、共有されたディスクハードウェア上で稼動する非共有データベースシステムにおいてデータを管理するための技術に関する。
【背景技術】
【０００２】
発明の背景
マルチプロセッシングコンピュータシステムは一般に、３つのカテゴリ、すなわち、全共有システム、共有ディスクシステム、および非共有システムに分類される。全共有システムにおいて、すべてのプロセッサ上のプロセスは、システム内のすべての揮発性メモリデバイス（以降、包括的に「メモリ」と称する）と、すべての不揮発性メモリデバイス（以降、包括的に「ディスク」と称する）とに対して直接のアクセスを有する。したがって、全共有の機能を提供するために、コンピュータのさまざまな構成要素間には高度な配線が必要とされる。加えて、全共有アーキテクチャには、スケーラビリティの限界が存在する。
【０００３】
共有ディスクシステムでは、プロセッサおよびメモリがノードにグループ化される。共有ディスクシステム内の各ノードは、それ自体が、複数のプロセッサおよび複数のメモリを含む全共有システムを構成し得る。すべてのプロセッサ上のプロセスは、システム内のすべてのディスクにアクセス可能であるが、特定のノードに属するプロセッサ上のプロセスのみが、特定のノード内のメモリに直接アクセスできる。共有ディスクシステムは一般に、必要とする配線が、全共有システムよりも少ない。共有ディスクシステムはまた、作業負荷が不均衡な状態にも容易に適合する。なぜなら、すべてのノードがすべてのデータにアクセスできるためである。しかしながら、共有ディスクシステムは、コヒーレンスオーバヘッドの影響を受けやすい。たとえば、第１のノードがデータを変更し、かつ、第２のノードがその同じデータの読出または変更を望む場合、そのデータの正しいバージョンが第２のノードに確実に提供されるように、さまざまなステップを実行しなければならないことが考えられる。
【０００４】
非共有システムでは、すべてのプロセッサ、メモリ、およびディスクがノードにグループ化される。非共有システムは、共有ディスクシステムと同様に、各ノード自体が全共有システムまたは共有ディスクシステムを構成し得る。特定のノード上で稼動するプロセスのみが、特定のノード内のメモリおよびディスクに直接アクセス可能である。マルチプロセッシングシステムの３つの一般的なタイプのうち、さまざまなシステム構成要素間で必要とされる配線の量は、一般に非共有システムが最も少ない。しかしながら、非共有システムは、作業負荷が不均衡な状態の影響を最も受けやすい。たとえば、特定のタスク中にアクセスされるべきすべてのデータが、特定のノードのディスク上に存在し得る。したがって、他のノード上のプロセスがアイドル状態であるにも関わらず、粒度の細かい仕事を実行するために、そのノード内で稼動するプロセスしか使用することができない。
【０００５】
マルチノードシステム上で稼動するデータベースは一般に、２つのカテゴリ、すなわち、共有ディスクデータベースおよび非共有データベースに分類される。
【０００６】
共有ディスクデータベース
共有ディスクデータベースは、データベースシステムによって管理されるすべてのデータが、データベースシステムにとって利用可能なすべての処理ノードの管理下にある（visible）という前提に基づき、仕事を調整する。その結果、共有ディスクデータベースで
は、仕事中にアクセスされるであろうデータを含むディスクの位置に関係なく、サーバがいずれかのノード上のプロセスにいずれかの仕事を割当てることができる。
【０００７】
すべてのノードが同じデータへのアクセスを有し、各ノードがそれ自体の専用キャッシュを有しているため、同じデータ項目の多数のバージョンが、多くのノード中のどのような数のノードのキャッシュ内にも存在し得る。残念ながら、このことは、１つのノードが特定のデータ項目の特定のバージョンを要求する際に、そのノードが他のノードと連携して、要求を行なっているノードにそのデータ項目の特定のバージョンが転送されるようにしなければならないことを意味する。したがって、共有ディスクデータベースは、「データ転送」の概念で作動すると言われており、データは、そのデータに仕事を行なうように割当てられたノードに転送されなければならない。
【０００８】
このようなデータ転送要求は、「ピング（ping）」を生じ得る。具体的に、ピングは、１つのノードが必要とするデータ項目の複製が、別のノードのキャッシュ内に存在する際に生じる。ピングは、データ項目がディスクに書込まれた後にディスクから読出されることを必要とし得る。ピングにより必要とされるディスク動作の性能は、データベースシステムの性能を著しく下げる恐れがある。
【０００９】
共有ディスクデータベースは、非共有コンピュータシステムおよび共有ディスクコンピュータシステムのいずれの上でも稼動され得る。非共有コンピュータシステム上で共有ディスクデータベースを稼動させるために、オペレーティングシステムにソフトウェアサポートを追加するか、または、追加のハードウェアを設けて、プロセスが遠隔ディスクへのアクセスを有し得るようにすることが可能である。
【００１０】
非共有データベース
非共有データベースは、プロセスと同じノードに属するディスクにデータが含まれている場合に限り、そのプロセスがそのデータにアクセス可能であるものと想定する。したがって、特定のノードが、別のノードによって所有されるデータ項目についての演算が実行されることを望む場合、その特定のノードは、他のノードがその演算を実行するように、他のノードに要求を送信しなければならない。したがって、非共有データベースは、ノード間でデータを転送する代わりに「機能の転送」を実行すると言われる。
【００１１】
いずれかの所定のデータ片が１つのノードによってのみ所有されているため、その１つのノード（データの「所有者」）のみが、そのキャッシュ内にそのデータの複製を有する。したがって、共有ディスクデータベースシステムで必要とされたタイプのキャッシュのコヒーレンスのメカニズムが必要とされない。さらに、非共有システムは、ピングにまつわる性能の不利益を被らない。なぜなら、別のノードがそのキャッシュにデータ項目をロードすることができるように、そのデータ項目を所有するノードが、そのデータ項目のキャッシュされたバージョンをディスクに保存するように求められないためである。
【００１２】
非共有データベースは、共有ディスクマルチプロセッシングシステムおよび非共有マルチプロセッシングシステムのいずれの上でも稼動され得る。共有されたディスクマシン上で非共有データベースを稼動させるために、データベースをセグメント化して各パーティションの所有権を特定のノードに割当てるためのメカニズムを設けることができる。
【００１３】
所有を行なうノードのみがデータ片に作用し得るということは、非共有データベース内の作業負荷が極めて不均衡になり得ることを意味する。たとえば、１０個のノードのシステムにおいて、仕事の全要求の９０％が、それらのノードのうちの１つによって所有されるデータを必要とするかもしれない。したがって、その１つのノードが酷使され、他のノードの計算リソースが十分に活用されない。作業負荷の「均衡を取り戻す」ために、非共
有データベースをオフラインにすることができ、データ（およびその所有権）をノード間で再分配することができる。しかしながら、このプロセスは、潜在的に大量のデータの移動を伴い、作業負荷の偏りを一時的にしか解決しない恐れがある。
【００１４】
非共有データベースシステムにおける分散型トランザクション
分散型トランザクションは、非共有データベースシステム内の異なるノード上に存在するデータ項目に対する更新を指定することができる。たとえば、分散型トランザクションは、第１の非共有ノードにより所有される第１のデータ片に対する更新と、第２の非共有ノードにより所有される第２のデータ片に対する更新とを指定することができる。分散型トランザクションに関与するデータを所有するノードは、この明細書において、「参加」ノードまたは単に「参加者」と呼ばれる。
【００１５】
分散型トランザクションは、データの整合性を維持するために、コミットされるか、または、エラーが生じた場合に「ロールバック」されるか、のいずれかでなければならない。トランザクションがコミットされると、そのトランザクションによって指定された、データに対するすべての変更が、永続的なものとなる。その一方で、トランザクションがロールバックされると、トランザクションによって指定され、かつ、既に行なわれた、データに対するすべての変更は、そのデータに対する変更が行なわれなかったかのように撤回または取消される。このようにして、データベースは、トランザクション内で指定されたすべての変更を反映するか、または、トランザクション内で指定された変更を全く反映しないか、のいずれかの状態に置かれる。
【００１６】
２段階コミット
分散型トランザクション中におけるデータの整合性を確保するための１つの手法は、２段階コミットプロトコルを用いる分散型トランザクションの処理を必要とする。２段階コミットは、たとえば、「遅延された忘却による２段階コミットの実行（Performing 2-Phase Commit With Delayed Forget）」と題された米国特許第６，４９３，７２６号に詳細に記載されている。２段階コミットは一般に、トランザクションがまず「準備」されてからコミットされることを必要とする。トランザクションにより指定された変更は、準備が整った段階の前に、参加する非共有ノードの各々において行なわれる。参加ノードが、要求されたすべての演算を完了すると、参加ノードは、これらの変更および「準備」記録を永続的な記憶に強制する。参加者は次に、当該参加者が「準備が整った」状態にあることをコーディネータに報告する。すべての参加者が、準備が整った状態に成功裡に入った場合、コーディネータは、永続的な記憶にコミット記録を強制する。その一方で、準備の整った状態の前に何らかのエラーが生じ、参加ノードの少なくとも１つが、トランザクションにより指定された変更を行ない得ないことが示されると、参加ノードの各々におけるすべての変更が撤回され、参加する各データベースシステムを変更前の状態に復元する。
【発明の開示】
【発明が解決しようとする課題】
【００１７】
図１は、２段階コミットを実行するための従来の手法にまつわるコストをより詳細に示すために使用される、マルチノード非共有データベースシステムを示す。マルチノードデータベースシステム１００は、調整ノード１１０および参加ノード１５０を含む。調整ノード１１０は、クライアント１２２およびクライアント１２４を含むデータベースクライアント１２０からデータの要求を受信する。このような要求は、たとえばＳＱＬステートメントの形態を取ることが考えられる。
【００１８】
調整ノード１１０は、ログ１１２等のログを含む。ログ１１２は、データベースシステムに対して行なわれた変更、および、これらの変更の状態に影響を及ぼす他の事象、たとえばコミットを記録するために用いられる。ログ１１２は、さまざまなログ記録を含む。
これらのログ記録が最初に作成されると、揮発性メモリにまず記憶され、すぐに、不揮発性記憶装置（たとえばディスク等の不揮発性記憶装置）に永続的に記憶される。ログ記録が不揮発性記憶装置に一旦書込まれると、ログ記録によって指定された変更および他の事象は、「永続的」であると呼ばれる。これらの変更および事象は「永続的」である。なぜなら、システム故障が生じた場合、この故障の後に、永続的に記憶されたこれらのログ記録を用いて変更および事象を再生し、データベースをその故障前の状態に復元することができるためである。
【００１９】
図２は、２段階コミットを実行するための従来の手法に従った、コーディネータと参加者との間の対話を示すフロー図である。マルチノードデータベースシステム１００を一例として用いて、トランザクションの状態を示す。トランザクションの状態２０１は、調整データベースシステム（すなわち、調整ノード１１０）内でトランザクションが経験するトランザクションの状態であり、トランザクションの状態２０２は、参加するデータベースシステム（すなわち、参加ノード１５０）内でトランザクションが経験するトランザクションの状態である。
【００２０】
図２を参照すると、非活動状態２１０、２４０、２５０、および２９０は、トランザクションの非活動状態を表わす。非活動状態では、トランザクションによって指定され、かつ、さらに別の何らかのアクション（コミット、取消、演算を実行するのに必要とされるデータブロック等のリソースのロッキング、またはロッキング解除等）を要求するデータベース動作は存在しない。トランザクションは、最初に非活動状態（すなわち、非活動状態２１０および２５０）にあり、遷移が完了すると、非活動状態（すなわち、非活動状態２４０および２９０）に戻る。
【００２１】
データベースシステムが「トランザクション開始」要求を受信すると、トランザクションは非活動状態から活動状態に遷移する。たとえば、クライアント１２２（図１）が調整ノード１１０にBEGIN TRANSACTION要求を発行することが考えられる。代替的に、「トランザクション開始」指令が暗黙的であってもよい。たとえば、データベースサーバは、演算または変更を指定するステートメントを受信すると、アクティブなトランザクションを開始することができる。ステップ２１２において、調整ノード１１０はトランザクション開始要求を受信し、活動状態２２０に入る。次に、調整ノード１１０は、参加ノード１５０上のデータを変更する指令を受信する。それに応答して、調整ノード１１０はステップ２２１において、参加ノード１５０に対し、トランザクションを開始する要求を送信する。ステップ２２２において、調整ノード１１０は、参加ノード１５０に対し、参加ノード１５０上のデータを変更する１つ以上の要求を送信する。
【００２２】
ステップ２５２において、参加ノード１５０は、トランザクションを開始する要求を受信する。参加ノード１５０に関して、トランザクションは活動状態２６０に入る。参加ノード１５０はその後、データを変更する要求を受信する。
【００２３】
データベースシステム内のトランザクションが活動状態に入ると、データベースシステムは、トランザクションの一部として、データを変更するどのような数の要求をも受信することができる。たとえば、クライアント１２２は、調整ノード１１０に対し、調整ノード１１０および参加ノード１５０の両方の上のデータを変更する要求を発行することができる。調整ノード１１０は、参加ノード１５０上のデータを変更する要求を受信したことに応答して、参加ノード１５０上のデータを変更する要求を参加ノード１５０に送信する。
【００２４】
ステップ２２３において、調整データベースシステムは、クライアント１２２からトランザクションをコミットする要求を受信する。それに応答して、調整ノード１１０はステ
ップ２２４において、参加ノード１５０に準備要求を送信する。ステップ２６２において、参加ノード１５０はその要求を受信する。
【００２５】
ステップ２６４において、参加ノード１５０は不揮発性記憶装置にログ１５２（図１）をフラッシュする。「ログをフラッシュする」とは、揮発性メモリにのみ現時点で記憶されているログのログ記録が不揮発性記憶装置に記憶されることを指す。したがって、ログをフラッシュすることにより、参加ノード１５０に対する変更が永続的なものとなる。変更が永続的なものになると、参加ノード１５０は、トランザクションのその部分をコミット可能であることを保証し得る。したがって、ステップ２６４の後に、トランザクションは準備が整った状態に入る。ステップ２６６において、参加ノード１５０は、準備が整った状態への遷移をログ１５２に記録する（すなわち、準備が整った状態に到達したという事実を記録するログ記録をディスクに記憶する）。
【００２６】
ステップ２７２において、参加ノード１５０は、準備が整った確認を調整ノード１１０に送信する。準備が整った確認は、参加データベースシステムがトランザクションをコミットする準備が整ったか否かを示す、参加データベースシステムによって送信されるメッセージである。トランザクションが参加データベースシステム上において準備が整った状態にあるとき、参加データベースシステムは、コミットする準備が整っている。ステップ２２６において、調整ノード１１０は準備が整った確認を受信する。
【００２７】
ステップ２２８において、調整ノード１１０は、コミットしてログ１１２をフラッシュする。具体的に、調整ノード１１０は、ログ１１２内にログ記録を作成してコミットを記録する。調整ノード１１０がログをフラッシュすると、調整ノード１１０はコミットを永続的なものにする。コミットが永続的になると、トランザクションはコミットされた状態に入る。したがって、ログをフラッシュした後に、調整ノード１１０はコミットされた状態２３０に遷移する。
【００２８】
トランザクションがコミットされた状態に到達した後、ステップ２３２において、調整ノード１１０は、参加調整ノード１１０に忘却要求を送信する。次に、参加ノード１５０はトランザクションを忘却する。忘却要求は、参加データベースシステムに送信され、かつ、参加データベースシステムが忘却処理を実行することを要求するメッセージである。「忘却処理」という用語は一般に、準備が整った状態またはコミットされた状態から非活動状態にトランザクションを遷移するのに必要とされるさらに別の動作（たとえば、トランザクションをコミットし、リソースを解放し、トランザクションを非活動状態にする）を指す。
【００２９】
ステップ２７４において、参加ノード１５０は忘却要求を受信する。ステップ２７６において、参加データベースシステムは、コミットし（ログ記録を作成してコミットを記録することを含む）、その後、ログ１５２をフラッシュする。この段階で、トランザクションは参加ノード１５０上において非活動状態に入る。ステップ２８２において、参加ノード１５０は、トランザクションのために参加ノード１５０によりロックされていたリソースに残存する、どのようなロックをも解除する。ステップ２８４において、参加ノード１５０は、調整ノード１１０に忘却確認を送信する。忘却確認は、参加ノードにより送信され、かつ、忘却処理が参加ノード上で完了したことを通知するメッセージである。
【００３０】
ステップ２３４において、調整ノード１１０は、忘却処理の完了を通知するメッセージを受信する。ステップ２３６において、調整ノード１１０は、トランザクションのためにコーディネータにより保持されていた状態情報を削除することができる。このような状態情報には、たとえば、分散型トランザクションにおける参加者の一覧が含まれ得る。この段階で、トランザクションは、調整ノード１１０上において非活動状態に入る。
【００３１】
２段階コミットにおける１トランザクション当りのコストは、２段階コミットの実行に起因する、送信されたメッセージおよびログフラッシュの数によって測定することができる。４個のメッセージが２段階コミットに起因するため（すなわち、ステップ２２１、ステップ２３２、ステップ２７２、およびステップ２８４）、メッセージに関して１トランザクション当りのコストは４Ｎであり、ここでＮは、参加ノードの数に等しい。調整ノードに対する１つのログフラッシュ（すなわちステップ２２８）と、各参加ノードに対する２つのログフラッシュとが２段階コミットに起因し、ログフラッシュに関するコストは２Ｎ＋１であり、ここでＮは、参加ノードの数である。
【００３２】
上述の内容に基づき、複数の非共有ノードを必要とするトランザクションを完了するのに必要とされるメッセージ、ハンドシェイク、およびログフラッシュの数を減らす技術を提供することが望ましいのは明らかである。
【課題を解決するための手段】
【００３３】
この発明は、添付の図面において限定ではなく例示として示される。これらの図面では、同じ参照番号が同じ要素を指す。
【００３４】
発明の詳細な説明
共有ディスク記憶システムを含む非共有データベースシステムの性能を改善するためのさまざまな技術を以下に説明する。以下の記載内容では、説明のために多数の特定の詳細を明示して、この発明の完全な理解を図る。しかしながら、このような特定の詳細を用いなくてもこの発明を実施し得ることが明らかであろう。場合によっては、周知の構造およびデバイスをブロック図の形で示し、この発明をむやみに不明瞭にしないようにする場合もある。
【発明を実施するための最良の形態】
【００３５】
機能上の概観
非共有データベースシステムを稼動する少なくとも２つのノードがディスクへの共有されたアクセスを有する非共有データベースシステムの性能を改善するためのさまざまな技術を、以下に説明する。データベースシステムの非共有アーキテクチャによって規定されるように、各データ片は依然として、いずれかの所定の時点において１つのノードによってのみ所有される。しかしながら、非共有データベースシステムを稼動する少なくともいくつかのノードがディスクへの共有されたアクセスを有するという点を利用して、分散型トランザクションをより効率よく実行する。具体的には、２段階コミットプロトコルを介して分散型トランザクションの一貫性を確保するのではなく、コーディネータプロセスの再実行ログを含む共有ディスクへのアクセスを有する参加者により、１段階コミットプロトコルが使用される。
【００３６】
再実行ログ
データベースサーバが、トランザクションの一部として、揮発性メモリ内のデータ項目を更新すると、当該データベースサーバは、その更新に関する情報を含む再実行記録を生成する。トランザクションがコミットされる前に、更新の再実行記録は一般に、ディスク上の再実行ログに記憶される。トランザクションがコミットする前にディスク上に再実行記録を記憶することにより、更新されたデータ項目自体がディスクに書込まれる前にデータベースがクラッシュした場合でも、データベースがその更新を確実に反映するようにする。再実行記録および再実行ログは、たとえば、「ユーザ選択可能なロギングのための方法および装置（Method And Apparatus For User Selectable Logging）」と題された米国特許第５，９０３，８９８号に記載されている。
【００３７】
ノードにより生成された再実行記録は一般に、そのノードに専用の再実行ログに記憶される。したがって、３つのノードを有する非共有データベースシステムは一般に、３つの再実行ログを有し、それらの再実行ログの各々は、３つのノードのうちの１つに対応する。非共有ノードに関連する再実行ログは、そのノードにより行なわれた変更についての再実行のみを含み得る。しかしながら、他のノードがアクセスを有する共有ディスクに再実行ログが記憶されると、他のノードがその再実行ログの内容を調査することができる。
【００３８】
以下により詳細に説明するように、他の非共有ノードにより保持されている情報を調査し得るという非共有ノードの機能を利用することにより、或る分散型トランザクション、または分散型トランザクションの一部が、１段階コミットプロトコルを用いて実行され得るようにする技術を提供する。たとえば、分散型トランザクション内のいくつかの参加者が、分散型トランザクションのコーディネータプロセスにより保持され、かつ、その分散型トランザクションの状態を示す情報を読出し得ることが可能であるという点を利用する技術を記載する。このような状態情報は、たとえば、コーディネータプロセスの再実行ログ内の共有ディスクに保持され得る。代替的に、別個の構造、たとえばテーブル、１組のブロック、または索引の付いた何らかの永続的な構造を用いて、分散型トランザクションの状態情報を記憶することができる。以下に説明するように、分散型トランザクションのコミット中に、コーディネータは、トランザクション状態に対する変更を共有ディスクに強制し、それにより他の参加者は、当該コーディネータが他の参加者に対してコミットに関するメッセージを送信する前に機能しなくなった場合に、この状態情報を調査して、結果を求めることができる。
【００３９】
内部参加者および外部参加者
一実施例に従うと、非共有データベースシステム内の分散型トランザクション内のコーディネータノードと参加者との間の対話で使用されるプロトコルは、参加者が、コーディネータによって保持される分散型トランザクションの状態情報を調査できるか否かに依存する。分散型トランザクションの状態情報を調査することのできる参加者は、この明細書で「内部参加者」と呼ばれ、分散型トランザクションの状態情報を調査することのできない参加者は、「外部参加者」と呼ばれる。
【００４０】
外部参加者に対する２段階コミット
一実施例に従うと、非共有データベースシステム内の分散型トランザクションの外部参加者は、２段階コミットプロトコルに従ってコーディネータプロセスと対話する。たとえば、外部参加者は、図２に示す状態およびステップを介して遷移し得る。具体的に、外部参加者はまず、コーディネータから、より大きな分散型トランザクションの一部としてトランザクションを開始する要求を受信する。外部参加者は次に、トランザクションを開始し、そのトランザクションの一部として、要求された演算を実行する。
【００４１】
分散型トランザクションによって行なわれた変更が永続的であることが意図される場合、外部参加者は最終的に、「準備する」要求を受信する。外部参加者は、この準備要求に応答して、再実行記録をディスクにフラッシュし、「準備が整った」記録をディスクにフラッシュし、準備が整った確認をコーディネータノードに送り返す。
【００４２】
すべての参加者が成功裡に準備し得ることが想定される場合、外部参加者は、忘却する要求を受信する。外部参加者は、この忘却する要求に応答して、コミット記録をディスクに強制する。参加者は次に、コーディネータノードに忘却確認を送信する。
【００４３】
内部参加者に対する１段階コミット
一実施例において、内部参加者は、分散型トランザクション中に２段階コミットプロトコルを使用しない。具体的には、内部参加者は、分散型トランザクションに関連するタス
クを成功裡に実行した後に、内部参加者の準備が整ったことを示す準備記録をログ記録する必要がない。むしろ、内部参加者は、要求された仕事を実行して、それによって行なわれたどのような変更をも永続的な記憶にフラッシュした後に、コーディネータからのコミット要求を待つに過ぎない。コミット要求が到着すると、内部参加者は変更をコミットし、コミット確認メッセージをコーディネータに送り返す。
【００４４】
図３を参照すると、図３は、この発明の一実施例に従った、分散型トランザクション中のコーディネータと内部参加者との間の対話を示すフロー図である。例示のため、コーディネータノードと内部参加者とが、非共有データベースの２つの非共有ノードであり、かつ、分散型トランザクションが、内部参加者により所有されるデータを必要とする１つ以上の演算を要求するものと想定されたい。
【００４５】
ステップ３０２において、コーディネータは、分散型トランザクションを開始する要求を受信し、ステップ３０４において、コーディネータは、分散型トランザクションを開始する。ステップ３０６において、コーディネータは、子トランザクションを開始して当該分散型トランザクションの一部である演算を実行する要求を内部参加者に送信する。
【００４６】
ステップ３５０において、内部参加者は、子トランザクションを開始する要求を受信し、ステップ３５２において、内部参加者は、子トランザクションを開始する。ステップ３０８において、コーディネータは、仕事を実行する要求を内部参加者に送信し、ステップ３５４において、内部参加者は、その要求を受信して仕事を実行する。内部参加者が仕事を実行する間に、内部参加者は、この内部参加者が行っている変更を反映する再実行記録を生成する。このような再実行記録は、ステップ３５６に示すように、ディスク上に定期的に記憶され得る。代替的に、再実行記録は、フラッシュをトリガするいくつかの条件が満たされるまで揮発性メモリに保持されてよい。フラッシュをトリガするこのような条件には、たとえば、他の用途のために揮発性メモリを解放する必要性、またはフラッシュ要求の受信が含まれ得る。
【００４７】
ステップ３１０において、調整ノードはコミット要求を受信する。コーディネータは、このコミット要求に応答して、すべての参加者が、分散型トランザクションの一部として実行された変更のすべてについての再実行をディスクに記憶したか否かを判断する。コーディネータがこの判断を行なうのに、さまざまな技術が用いられ得る。このような技術の例を、以下により詳細に提示する。
【００４８】
参加者のすべてが、分散型トランザクションの一部として実行された変更のすべてについての再実行をディスクに記憶している場合、制御はステップ３１４に進み、ディスクに記憶していない場合、制御はステップ３２２に進む。ステップ３２２において、調整ノードは、すべての参加者が変更をディスクにログ記録するまで待つ。コーディネータは、トランザクションの完了を促進するために、その変更のすべてをディスクにまだログ記録していない参加者に対してフラッシュ要求を任意に送信することができる。参加者は、このような要求に応答して、分散型トランザクションの一部として行なわれた変更に関連する再実行のすべてをディスクにフラッシュする。
【００４９】
ステップ３１４において、コーディネータは、ディスクにまだフラッシュされていない、トランザクションについてのどのような再実行をもディスクにフラッシュする。コーディネータはまた、コミット記録をディスクに強制して、分散型トランザクションがコミットされたことも示す。コーディネータは次に、参加者にコミット要求を送信し、参加者が変更をコミットしたことを通知するのを待つ（ステップ３１６および３２４）。コーディネータが内部参加者にコミット要求を依然として送信するものの、分散型トランザクションが実際にコミットされた後にコミット要求が送信されてよいことに注目されるべきであ
る。したがって、このようなメッセージの送信、およびそれ以降の確認の受信は、分散型トランザクションの「クリティカルパス」上に存在しない。
【００５０】
ステップ３５８において、内部参加者は、コミット要求を受信し、ステップ３６０において、分散型トランザクションについての仕事を含んだ子トランザクションをコミットする。内部参加者は、子トランザクションをコミットした後に、コミット確認メッセージをコーディネータに送り返す（ステップ３６２）。
【００５１】
コーディネータは、すべての参加者からコミット確認メッセージを受信するまで分散型トランザクションの状態を示すデータを永続的に保持する。コーディネータがすべての参加者からコミット確認メッセージを受信すると、コーディネータプロセスは、分散型トランザクションについての状態情報を保持する必要がなくなる（ステップ３２０）。
【００５２】
参加者の再実行がディスクに書込まれたか否かの判断
上述のように、ノードが変更を行なうと、そのノードは、当該変更に対応する再実行記録を生成する。各ノードにより実行された変更には一般に、ノードによりシーケンス番号が割当てられる。このようなシーケンス番号は、この明細書において「ログシーケンス番号」と呼ばれる。
【００５３】
一実施例に従うと、内部参加者が、分散型トランザクションの一部である仕事を実行すると、内部参加者は、分散型トランザクションのコーディネータに対し、このトランザクションについて内部参加者により行なわれた仕事に対応する最大のログシーケンス番号を通信する。たとえば、内部参加者が分散型トランザクションの一部として３個の変更を実行すると想定されたい。さらに、これらの変更についての再実行記録に対し、ログシーケンス番号である５、７、および９が割当てられていると想定されたい。この例において変更が完了すると、内部参加者は、コーディネータに９というログシーケンス番号を通信する。
【００５４】
一実施例に従うと、コーディネータは、内部参加者から受信したログシーケンス番号を用いて、内部参加者が、分散型トランザクションの一部として行なった変更のすべてをディスクにログ記録したか否かを判断する。たとえば、特定の内部参加者によりコーディネータに通信された最大のログシーケンス番号が９であると想定されたい。このような状況下において、内部参加者の永続的なログが、ログシーケンスナンバーである９およびそれ未満の番号に関連するすべての再実行記録を含む場合、コーディネータは、内部参加者が、分散型トランザクションに関連する変更をディスクにログ記録したと認識する。
【００５５】
どの再実行記録が内部参加者によりディスクにフラッシュされたかをコーディネータが判断するのに、さまざまな技術が用いられ得る。たとえば、内部参加者の再実行ログは、コーディネータにとって直接アクセス可能な共有ディスク上に存在し得る。したがって、コーディネータは、その再実行ログについて保持される内部参加者の再実行ログおよび／またはどのようなメタデータをも単に調査して、必要な再実行情報がディスク上に記憶されているか否かを判断することができる。代替的に、非共有データベースシステム内のさまざまなノードは、そのそれぞれの再実行ログの現時点での境界（「チェックポイント」）（ここでは、チェックポイント以下のすべての再実行がディスクにログ記録されている）を互いに通信することができる。このような通信は、情報の要求に応答して行なわれ得、または、定期的に先を見越して行なわれ得る。
【００５６】
重畳されたメッセージ
多くのメッセージが、非共有データベースシステムの非共有ノード間で行き来することが一般的である。一実施例に従うと、コーディネータノードと内部参加者との間で通信さ
れる情報の一部またはすべては、ノード間で送信されているメッセージについての情報を「重畳する」ことにより通信される。
【００５７】
たとえば、ステップ３２２において、コーディネータは、内部参加者のノードにその他の態様で送信されている別のメッセージ上にメッセージを重畳することにより、内部参加者に「再実行を強制する」メッセージを送信することができる。同様に、内部参加者は、コーディネータにその他の態様で送信されているメッセージ上に情報を重畳することにより、コーディネータプロセスに対し、最大のログシーケンス番号およびコミット確認メッセージを送信することができる。
【００５８】
クラッシュした参加者の回復
上述のように、コーディネータは、参加者のすべてが分散型トランザクションの一部として行なわれた変更に関連する再実行をログ記録したと判断した後に、分散型トランザクションをコミットする（ステップ３１４）。必要な再実行をディスクに書込む前または後のいずれかに、分散型トランザクション内の参加者がクラッシュすることが考えられる。このような状況下において、クラッシュした参加者の回復は、分散型トランザクションの一部として行なわれた変更をコミットするか、またはロールバックする判断を必要とする。
【００５９】
クラッシュした参加者が外部参加者である場合に、外部参加者がクラッシュ前に変更を準備していた場合、参加者自体の再実行ログは、分散型トランザクションに関連する準備記録を有する。回復プロセスは、この準備記録を検出すると、分散型トランザクションに関連する変更を自動的にロールバックしないことを認識する。その一方で、外部参加者の再実行ログが準備記録を有していない場合、回復プロセスは、変更を自動的にロールバックする。
【００６０】
クラッシュした参加者が内部参加者である場合に、クラッシュした参加者がクラッシュ前に十分な再実行情報をディスクにログ記録している場合でも、参加者自体の再実行ログは準備記録を有さない。しかしながら、分散型トランザクションに関連する変更を自動的にロールバックする代わりに、回復プロセスは、調整ノードに対し、分散型トランザクションがコミットされたか否かを尋ねる。
【００６１】
コーディネータが機能しており、分散型トランザクションがコミットされたことを示すことによって応答すると、クラッシュしたノードにより行なわれた変更は、クラッシュしたノードの回復の一部として永続的なものとなる。
【００６２】
コーディネータノードが機能しており、分散型トランザクションがロールバックされたことを示すことによって応答すると、クラッシュしたノードにより行なわれた変更は、クラッシュしたノードの回復の一部としてロールバックされる。
【００６３】
コーディネータノードがクラッシュし、別のノードがそのコーディネータノードを回復している場合、そのコーディネータノードを回復するプロセスは、クラッシュした参加者の回復プロセスに必要な情報を提供することができると考えられる。しかしながら、コーディネータノードがクラッシュし、分散型トランザクションの状態を提供するために回復プロセスが利用できない場合、内部参加者に対する回復プロセスは、コーディネータノードによって保持されている分散型トランザクションの状態情報に直接アクセスすることにより、必要な情報を獲得することができる。
【００６４】
具体的に、内部参加者がコーディネータの再実行ログへのアクセスを有する実施例において、クラッシュした内部参加者に対する回復プロセスは、コーディネータの再実行ログ
を調査して、分散型トランザクションについてのコミット記録が存在するか否かを確認することができる。コーディネータプロセスの再実行ログが、分散型トランザクションについてのコミット記録を含む場合、回復プロセスは、クラッシュした参加者により行なわれた変更をコミットする。その一方で、コーディネータの再実行ログが分散型トランザクションについてのコミット記録を含まない場合、回復プロセスは、クラッシュした参加者によって行なわれた変更をロールバックする。
【００６５】
クラッシュしたコーディネータ
コーディネータが、分散型トランザクション内の参加者にコミット要求を送信する前にクラッシュすることが考えられる。このような状況下において、外部参加者は、クラッシュ前にコーディネータから受信した通信内容に基づき、分散型トランザクションの状態を認識する。具体的に、外部参加者は、準備する要求および／または忘却する要求を受信したか否かを認識する。
【００６６】
その一方で、内部参加者は、共有ディスクにアクセスして、クラッシュ前にコーディネータによってディスクに書込まれたトランザクションの状態情報を調査しなければならないことが考えられる。一実施例に従うと、内部参加者は、当該内部参加者がコーディネータのトランザクション状態を認識する必要がある場合に、コーディネータノードに状態情報を要求し、または、コーディネータノードが回復されている場合に、コーディネータノードを回復する回復プロセスに状態情報を要求する。コーディネータノードがクラッシュしており、未だ回復されていない場合、内部参加者は、コーディネータにより保持されていた分散型トランザクションの状態情報を検索する。たとえば一実施例において、内部参加者は、コーディネータの再実行ログを調査することによってこの情報を得る。コーディネータが分散型トランザクションをコミットしたことをトランザクション情報が示すと、内部参加者は、この内部参加者が分散型トランザクションの一部として行なった変更をコミットする。コーディネータプロセスがクラッシュの時点で分散型トランザクションをコミットしていなかった場合、内部参加者は、この内部参加者が分散型トランザクションの一部として行なった変更をロールバックする。
【００６７】
最終的に、すべての内部参加者が分散型トランザクションの最終状態を確実に認識し得るようにするため、すべての従属部が、それらの対応する子トランザクションがコミットまたはアボートされたことを通知するまで、コーディネータノードは、分散型トランザクションのトランザクション状態情報が削除または上書きされることを防止する。したがって、分散型トランザクションがコミットされた後と、コミット要求を受信する前とに内部参加者がクラッシュした場合でも、内部参加者は、分散型トランザクションがコミットされたことを最終的に認識し、したがって、その対応する子トランザクションを最終的にコミットする。
【００６８】
ハードウェアの概観
図４は、この発明の一実施例が実現され得るコンピュータシステム４００を示すブロック図である。コンピュータシステム４００は、バス４０２または情報を通信するための他の通信機構と、バス４０２に結合されて情報を処理するためのプロセッサ４０４とを含む。コンピュータシステム４００は、バス４０２に結合されてプロセッサ４０４が実行する命令および情報を記憶するためのメインメモリ４０６、たとえばランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置も含む。メインメモリ４０６は、プロセッサ４０４が実行する命令の実行中に、一時的数値変数または他の中間情報を記憶するためにも使用可能である。コンピュータシステム４００は、バス４０２に結合されてプロセッサ４０４に対する静的情報および命令を記憶するための読出専用メモリ（ＲＯＭ）４０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光学ディスク等の記憶装置４１０が設けられてバス４０２に結合され、情報および命令を記憶する。
【００６９】
コンピュータシステム４００は、コンピュータユーザに情報を表示するためのディスプレイ４１２、たとえば陰極線管（ＣＲＴ）に、バス４０２を介して結合され得る。英数字キーおよび他のキーを含む入力装置４１４がバス４０２に結合されて、情報および指令選択をプロセッサ４０４に通信する。別の種類のユーザ入力装置が、方向情報および指令選択をプロセッサ４０４に通信してディスプレイ４１２上のカーソルの動作を制御するためのカーソル制御機器４１６、たとえばマウス、トラックボール、またはカーソル方向キーである。この入力装置は一般に、２つの軸、すなわち第１の軸（ｘ等）および第２の軸（ｙ等）において２自由度を有し、これによって入力装置は平面上で位置を特定することができる。
【００７０】
この発明は、この明細書に記載された技術を実現するためにコンピュータシステム４００を用いることに関する。この発明の一実施例によると、これらの技術は、メインメモリ４０６に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ４０４が実行することに応じて、コンピュータシステム４００により実行される。このような命令は、別のコンピュータ読取可能な媒体、たとえば記憶装置４１０からメインメモリ４０６内に読出すことができる。メインメモリ４０６に含まれる命令のシーケンスを実行することにより、プロセッサ４０４はこの明細書に記載されたプロセスのステップを実行する。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せて結線回路を用いて、この発明を実施することができる。したがって、この発明の実施例は、ハードウェア回路およびソフトウェアのいずれかの特定の組合せに限定されない。
【００７１】
この明細書で用いられる「コンピュータ読取可能な媒体」という用語は、プロセッサ４０４に対して実行のために命令を提供することに携わる、いずれかの媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形態を取り得るが、これらに限定されない。不揮発性媒体には、たとえば記憶装置４１０等の光学または磁気ディスクが含まれる。揮発性媒体には、メインメモリ４０６等の動的メモリが含まれる。伝送媒体には、同軸ケーブル、銅線、および光ファイバが含まれ、バス４０２を有するワイヤが含まれる。伝送媒体は、電波データ通信および赤外線データ通信の際に生成されるもの等の音波または光波の形を取り得る。
【００７２】
コンピュータ読取可能な媒体の一般的な形態には、たとえばフロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、紙テープ、孔のパターンを有する他のいずれかの物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、他のいずれかのメモリチップもしくはカートリッジ、以下に述べる搬送波、またはコンピュータが読出すことのできる他のいずれかの媒体が含まれる。
【００７３】
プロセッサ４０４に対して実行のために１つ以上の命令の１つ以上のシーケンスを搬送することに対し、コンピュータ読取可能な媒体のさまざまな形態が関与し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクで搬送され得る。遠隔コンピュータはそれらの命令をそれ自体の動的メモリにロードして、それらの命令を、モデムを用いて電話回線経由で送信することができる。コンピュータシステム４００に対してローカルなモデムが電話回線上のデータを受信して、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線信号によって搬送されたデータは赤外線検出器によって受信され得、適切な回路がそのデータをバス４０２上に出力することができる。バス４０２はそのデータをメインメモリ４０６に搬送し、そこからプロセッサ４０４が命令を取り出して実行する。メインメモリ４０６が受信した命令は、プロセッサ４０４による実行前または実行後のいずれかに、記憶装置４１０に任意に記憶され得る。
【００７４】
コンピュータシステム４００は、バス４０２に結合された通信インターフェイス４１８も含む。通信インターフェイス４１８は、ローカルネットワーク４２２に接続されたネットワークリンク４２０に対する双方向のデータ通信結合を提供する。たとえば通信インターフェイス４１８は、対応する種類の電話回線に対するデータ通信接続を設けるための統合サービスデジタル網（ＩＳＤＮ）カードまたはモデムであり得る。別の例として、通信インターフェイス４１８は、互換性を有するローカルエリアネットワーク（ＬＡＮ）にデータ通信接続を設けるためのＬＡＮカードであり得る。無線リンクもまた実現することができる。このようなどの実現例においても、通信インターフェイス４１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送受信する。
【００７５】
ネットワークリンク４２０は一般に、１つ以上のネットワーク経由で他のデータ装置に対してデータ通信を提供する。たとえば、ネットワークリンク４２０は、ローカルネットワーク４２２経由で、ホストコンピュータ４２４か、またはインターネットサービスプロバイダ（Internet Service Provider）（ＩＳＰ）４２６により運営されるデータ装置に接続を提供することができる。ＩＳＰ４２６は次いで、現在一般に「インターネット」４２８と呼ばれるワールドワイドパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク４２２およびインターネット４２８はともに、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を用いる。さまざまなネットワークを経由する信号と、ネットワークリンク４２０上の、および、通信インターフェイス４１８経由の信号とは、コンピュータシステム４００との間でデジタルデータを搬送し、情報を運ぶ搬送波の例示的形態である。
【００７６】
コンピュータシステム４００は、ネットワーク、ネットワークリンク４２０、および通信インターフェイス４１８を介してメッセージを送信して、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ４３０は、インターネット４２８、ＩＳＰ４２６、ローカルネットワーク４２２、および通信インターフェイス４１８経由で、アプリケーションプログラムに対して要求されたコードを送信することができる。
【００７７】
受信されたコードは、受信されたときにプロセッサ４０４によって実行され得、および／または後の実行のために記憶装置４１０もしくは他の不揮発性記憶装置に記憶され得る。このようにして、コンピュータシステム４００は搬送波の形でアプリケーションコードを得ることができる。
【００７８】
上述の明細書では、この発明の実施例を実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、この発明が何であるか、およびこの発明を目指して出願人が何を意図しているかを排他的に示す唯一のものが、この出願から発生して特有の形態をとった一組の請求項である。特有の形態においてこのような請求項は、今後のどのような補正をも含んで発生する。このような請求項に含まれる用語に対してここで明示されたどのような定義も、請求項で用いられる用語の意味を決定するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲を決して限定しない。したがって、明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
【図面の簡単な説明】
【００７９】
【図１】マルチノードデータベースシステムのブロック図である。
【図２】従来の２段階コミットプロトコルに含まれるステップを示すフロー図である。
【図３】この発明の一実施例に従った、コーディネータと内部参加者との間の対話を示すフロー図である。
【図４】この発明の実施例が実現され得るコンピュータシステムのブロック図である。
【図１】
2007501456.tif 000003
【図２】
2007501456.tif 000004
【図３】
2007501456.tif 000005
【図４】
2007501456.tif 000006
【国際調査報告】
2007501456.tif 000007
2007501456.tif 000008