(57)【要約】  非共有データベースシステムの性能を改善するためのさまざまな技術を記載する。非共有データベースシステムにおいて、この非共有データベースを稼動する少なくとも２つのノードは、ディスクへの共有アクセスを有する。具体的には、並列に作動する複数の回復ノードを用いて、故障ノードが所有するデータを回復するための技術を提供する。故障ノードが所有するデータは、このデータが存在する共有ディスクへのアクセスを有する回復ノードに再割当される。故障ノードの回復ログは、回復ノードか、または、回復ノードに回復タスクを分配するコーディネータプロセスによって読出される。
2007501455.tif 000002
【特許請求の範囲】
【請求項１】
データを管理するための方法であって、
複数のノードにとってアクセス可能な永続的な記憶上に複数の永続的なデータ項目を保存するステップを含み、前記永続的なデータ項目は、前記永続的な記憶上の特定の位置に記憶される特定のデータ項目を含み、前記方法はさらに、
前記ノードの１つに、永続的なデータ項目の各々の排他的な所有権を割当てるステップを含み、前記複数のノードの特定のノードには、前記特定のデータ項目の排他的な所有権が割当てられ、
いずれかのノードが前記特定のデータ項目を必要とする演算が実行されることを望むと、前記演算が実行されることを望む前記ノードは、前記特定のデータ項目が前記特定のノードにより排他的に所有されている時に、前記特定のノードが前記特定のデータ項目についての演算を実行するように前記特定のノードに前記演算を転送し、前記方法はさらに、
１つのノードにより排他的に所有される一組の永続的なデータ項目を巻き込む故障に応じて、
２つ以上の回復ノードの各々に対し、前記故障に巻き込まれていた前記一組の永続的なデータ項目のサブセットの排他的な所有権を割当てるステップと、
前記２つ以上の回復ノードの各回復ノードが、前記回復ノードに割当てられた永続的なデータ項目の前記サブセットに回復動作を実行するステップとを含む、方法。
【請求項２】
前記故障は、前記一組の永続的なデータ項目を記憶する永続的な記憶装置の媒体の故障である、請求項１に記載の方法。
【請求項３】
前記故障は、前記一組の永続的なデータ項目の排他的な所有権を有するノードの故障であり、
割当てる前記ステップは、２つ以上の回復ノードの各々に対し、前記故障ノードにより排他的に所有されていた前記永続的なデータ項目のサブセットの排他的な所有権を割当てるステップを含む、請求項１に記載の方法。
【請求項４】
前記２つ以上の回復ノードは、第１の回復ノードおよび第２の回復ノードを含み、
前記第１の回復ノードに排他的に割当てられたデータのサブセットに対して前記第１の回復ノードにより実行される前記回復動作の少なくとも一部は、前記第２の回復ノードに排他的に割当てられたデータのサブセットに対して前記第２の回復ノードにより実行される回復動作の少なくとも一部と並列して実行される、請求項３に記載の方法。
【請求項５】
前記複数の永続的なデータ項目を複数のバケットに編成するステップと、
前記複数のバケットと前記複数のノードとの間でマッピングを規定するステップとを含み、各ノードは、前記ノードにマッピングするすべてのバケットに属するデータ項目の排他的な所有権を有し、前記方法はさらに、
前記マッピングに基づき、どのデータ項目が回復を必要としているかを判断するステップを含む、請求項３に記載の方法。
【請求項６】
どのバケットが回復を必要とする前記データ項目を有しているかを判断するために、第１のマッピングに第１のパスを実行するステップと、
回復を必要とする前記データ項目に回復を実行するために、前記マッピングに第２のパスを実行するステップと、
前記第１のパスを実行した後に、かつ、前記第２のパスを完了する前に、回復を必要としないすべてのバケットに属するデータ項目を、アクセス用に利用可能にするステップとをさらに含む、請求項５に記載の方法。
【請求項７】
前記２つ以上の回復ノードの各回復ノードは、前記故障ノードに関連する回復ログに基づき、永続的な記憶に回復動作を実行する、請求項３に記載の方法。
【請求項８】
回復コーディネータが、故障したノードに関連する前記回復ログを走査し、前記２つ以上の回復ノードに回復記録を分配するステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記２つ以上の回復ノードの各々は、前記故障ノードに関連する回復ログを走査する、請求項７に記載の方法。
【請求項１０】
前記２つ以上の回復ノードの各回復ノードが回復動作を実行する前記ステップは、ブロックに取消し記録を適用するステップを含み、
前記方法はさらに、どの取消し記録が適用されたかを追跡するステップを含む、請求項３に記載の方法。
【請求項１１】
故障の前に、前記故障ノードが、前記故障ノードによって生成される再実行記録内に、前記再実行記録に関連する前記データ項目がどのバケットに属するかを示すバケット番号を記憶するステップをさらに含む、請求項５に記載の方法。
【請求項１２】
前記故障ノードの回復は、さまざまなタスクを含み、前記方法はさらに、
前記故障ノードの回復に必要とされる第１の組の１つ以上のタスクが、順次に実行されるべきであること、および、前記故障ノードの回復に必要とされる第２の組の１つ以上のタスクが、並列に実行されるべきであることを回復コーディネータが判断するステップと、
前記第１の組の１つ以上のタスクを順次に実行するステップと、
前記第２の組の１つ以上のタスクを並列に実行するために、前記２つ以上の回復ノードを用いるステップとをさらに含む、請求項３に記載の方法。
【請求項１３】
前記故障ノードの回復に必要とされる第２の組の１つ以上のタスクが並列に実行されるべきであることを判断する前記ステップは、少なくとも部分的に、回復を必要とする１つ以上のオブジェクトのサイズに基づいて実行される、請求項１２に記載の方法。
【請求項１４】
前記第２の組の１つ以上のタスクに関係するデータ項目の所有権は、前記回復コーディネータから前記２つ以上の回復ノードに渡されて、前記２つ以上の回復ノードが前記第２の組の１つ以上のタスクを実行できるようにし、
前記第２の組の１つ以上のタスクの実行の後に、かつ、前記故障ノードの回復の完了前に、前記第２の組の１つ以上のタスクに関係するデータ項目の所有権は、前記２つ以上の回復ノードから前記回復コーディネータに再び渡される、請求項１２に記載の方法。
【請求項１５】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１６】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１７】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項５に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１８】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項６に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項１９】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項７に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２０】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項８に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２１】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項９に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２２】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１０に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２３】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２４】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２５】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【請求項２６】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は、共有されたディスクハードウェア上で稼動する非共有データベースシステムにおいてデータを管理するための技術に関する。
【背景技術】
【０００２】
発明の背景
マルチプロセッシングコンピュータシステムは一般に、３つのカテゴリ、すなわち、全共有システム、共有ディスクシステム、および非共有システムに分類される。全共有システムにおいて、すべてのプロセッサ上のプロセスは、システム内のすべての揮発性メモリデバイス（以降、包括的に「メモリ」と称する）と、すべての不揮発性メモリデバイス（以降、包括的に「ディスク」と称する）とに対して直接のアクセスを有する。したがって、全共有の機能を提供するために、コンピュータのさまざまな構成要素間には高度な配線が必要とされる。加えて、全共有アーキテクチャには、スケーラビリティの限界が存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
共有ディスクシステムでは、プロセッサおよびメモリがノードにグループ化される。共有ディスクシステム内の各ノードは、それ自体が、複数のプロセッサおよび複数のメモリを含む全共有システムを構成し得る。すべてのプロセッサ上のプロセスは、システム内のすべてのディスクにアクセス可能であるが、特定のノードに属するプロセッサ上のプロセスのみが、特定のノード内のメモリに直接アクセスできる。共有ディスクシステムは一般に、必要とする配線が、全共有システムよりも少ない。共有ディスクシステムはまた、作業負荷が不均衡な状態にも容易に適合する。なぜなら、すべてのノードがすべてのデータにアクセスできるためである。しかしながら、共有ディスクシステムは、コヒーレンスオーバヘッドの影響を受けやすい。たとえば、第１のノードがデータを変更し、かつ、第２のノードがその同じデータの読出または変更を望む場合、そのデータの正しいバージョンが第２のノードに確実に提供されるように、さまざまなステップを実行しなければならないことが考えられる。
【０００４】
非共有システムでは、すべてのプロセッサ、メモリ、およびディスクがノードにグループ化される。非共有システムは、共有ディスクシステムと同様に、各ノード自体が全共有システムまたは共有ディスクシステムを構成し得る。特定のノード上で稼動するプロセスのみが、特定のノード内のメモリおよびディスクに直接アクセス可能である。マルチプロセッシングシステムの３つの一般的なタイプのうち、さまざまなシステム構成要素間で必要とされる配線の量は、一般に非共有システムが最も少ない。しかしながら、非共有システムは、作業負荷が不均衡な状態の影響を最も受けやすい。たとえば、特定のタスク中にアクセスされるべきすべてのデータが、特定のノードのディスク上に存在し得る。したがって、他のノード上のプロセスがアイドル状態であるにも関わらず、粒度の細かい仕事を実行するために、そのノード内で稼動するプロセスしか使用することができない。
【０００５】
マルチノードシステム上で稼動するデータベースは一般に、２つのカテゴリ、すなわち、共有ディスクデータベースおよび非共有データベースに分類される。
【０００６】
共有ディスクデータベース
共有ディスクデータベースは、データベースシステムによって管理されるすべてのデー
タが、データベースシステムにとって利用可能なすべての処理ノードの管理下にある（visible）という前提に基づき、仕事を調整する。その結果、共有ディスクデータベースでは、仕事中にアクセスされるであろうデータを含むディスクの位置に関係なく、サーバがいずれかのノード上のプロセスにいずれかの仕事を割当てることができる。
【０００７】
すべてのノードが同じデータへのアクセスを有し、各ノードがそれ自体の専用キャッシュを有しているため、同じデータ項目の多数のバージョンが、多くのノード中のどのような数のノードのキャッシュ内にも存在し得る。残念ながら、このことは、１つのノードが特定のデータ項目の特定のバージョンを要求する際に、そのノードが他のノードと連携して、要求を行なっているノードにそのデータ項目の特定のバージョンが転送されるようにしなければならないことを意味する。したがって、共有ディスクデータベースは、「データ転送」の概念で作動すると言われており、データは、そのデータに仕事を行なうように割当てられたノードに転送されなければならない。
【０００８】
このようなデータ転送要求は、「ピング（ping）」を生じ得る。具体的に、ピングは、１つのノードが必要とするデータ項目の複製が、別のノードのキャッシュ内に存在する際に生じる。ピングは、データ項目がディスクに書込まれた後にディスクから読出されることを必要とし得る。ピングにより必要とされるディスク動作の性能は、データベースシステムの性能を著しく下げる恐れがある。
【０００９】
共有ディスクデータベースは、非共有コンピュータシステムおよび共有ディスクコンピュータシステムのいずれの上でも稼動され得る。非共有コンピュータシステム上で共有ディスクデータベースを稼動させるために、オペレーティングシステムにソフトウェアサポートを追加するか、または、追加のハードウェアを設けて、プロセスが遠隔ディスクへのアクセスを有し得るようにすることが可能である。
【００１０】
非共有データベース
非共有データベースは、プロセスと同じノードに属するディスクにデータが含まれている場合に限り、そのプロセスがそのデータにアクセス可能であるものと想定する。したがって、特定のノードが、別のノードによって所有されるデータ項目についての演算が実行されることを望む場合、その特定のノードは、他のノードがその演算を実行するように、他のノードに要求を送信しなければならない。したがって、非共有データベースは、ノード間でデータを転送する代わりに「機能の転送」を実行すると言われる。
【００１１】
いずれかの所定のデータ片が１つのノードによってのみ所有されているため、その１つのノード（データの「所有者」）のみが、そのキャッシュ内にそのデータの複製を有する。したがって、共有ディスクデータベースシステムで必要とされたタイプのキャッシュのコヒーレンスのメカニズムが必要とされない。さらに、非共有システムは、ピングにまつわる性能の不利益を被らない。なぜなら、別のノードがそのキャッシュにデータ項目をロードすることができるように、そのデータ項目を所有するノードが、そのデータ項目のキャッシュされたバージョンをディスクに保存するように求められないためである。
【００１２】
非共有データベースは、共有ディスクマルチプロセッシングシステムおよび非共有マルチプロセッシングシステムのいずれの上でも稼動され得る。共有されたディスクマシン上で非共有データベースを稼動させるために、データベースをセグメント化して各パーティションの所有権を特定のノードに割当てるためのメカニズムを設けることができる。
【００１３】
所有を行なうノードのみがデータ片に作用し得るということは、非共有データベース内の作業負荷が極めて不均衡になり得ることを意味する。たとえば、１０個のノードのシステムにおいて、仕事の全要求の９０％が、それらのノードのうちの１つによって所有され
るデータを必要とするかもしれない。したがって、その１つのノードが酷使され、他のノードの計算リソースが十分に活用されない。作業負荷の「均衡を取り戻す」ために、非共有データベースをオフラインにすることができ、データ（およびその所有権）をノード間で再分配することができる。しかしながら、このプロセスは、潜在的に大量のデータの移動を伴い、作業負荷の偏りを一時的にしか解決しない恐れがある。
【００１４】
データベースシステムの故障
データベースサーバによる作業の継続を妨げる問題が生じたとき、データベースサーバの故障が生じる恐れがある。データベースサーバの故障は、停電等のハードウェアの問題、または、オペレーティングシステムもしくはデータベースシステムのクラッシュ等のソフトウェアの問題から生じ得る。データベースサーバの故障はまた、予測されるものとして、たとえば、SHUTDOWN ABORTまたはSTARTUP FORCEステートメントがオラクル（Oracle）のデータベースサーバに発行されたときにも生じ得る。
【００１５】
データベースの更新が、いくつかのデータベースシステム内のデータファイルに対していずれかの所定の時点で実行される態様により、データファイルは、（１）コミットされていないトランザクションによって暫定的に変更されたか、および／または（２）コミットされたトランザクションによって実行された更新をまだ反映していない、いくつかのデータブロックを含み得る。したがって、データベースサーバの故障後にデータベースの回復動作を実行して、データベースがデータベースサーバの故障の直前に有していた、トランザクションとの整合性を有する状態に、データベースを回復しなければならない。データベースは、トランザクションとの整合性を有する状態において、コミットされたトランザクションによって行なわれたすべての変更を反映しており、コミットされていないトランザクションによって行なわれた変更は反映しない。
【００１６】
一般的なデータベースシステムは、データベースサーバの回復中にいくつかのステップを実行する。まず、データベースシステムは、データファイルに対し、再実行ログに記録されたすべての変更を「繰上げ」るか、または再適用する。繰上げは、データベースの時間を繰上げるのに必要とされる数の再実行ログファイルを介して進行し、クラッシュの時点以前に行なわれたすべての変更を反映する。繰上げは一般に、オンラインの再実行ログファイルにおいて変更を適用することを含み、アーカイブされた再実行ログファイル（再び使用される前にアーカイブされたオンライン再実行ファイル）に記録された変更を適用することも含み得る。繰上げの後、データブロックは、コミットされたすべての変更に加え、クラッシュ前に再実行ログに記録されていた、コミットされていないいずれの変更も含む。
【００１７】
ロールバックセグメントは、繰上げ動作の後に残存する、コミットされていない変更を取消すための記録を含む。データベースの回復では、ロールバックセグメント内に含まれる情報を用いて、クラッシュの時点でコミットされていなかったトランザクションによって行なわれた変更を取消す。コミットされなかったトランザクションによって行なわれた変更を取消すプロセスは、トランザクションの「ロールバック」と呼ばれる。
【００１８】
この明細書に記載する技術は、トランザクションを取消すためにロールバックセグメントが使用される環境に限定されない。たとえば、データベース環境によっては、取消しおよび再実行が１つのシーケンシャルなログに書込まれる場合もある。このような環境において、回復は、別個の再実行ログおよび取消しログではなく、１つのログの内容に基づいて実行され得る。
【００１９】
非共有データベースシステムの故障
どのような複数ノードのコンピュータシステムでも、１つ以上の他のノードが機能して
いる一方で１つ以上のノードが故障する可能性がある。非共有データベースシステムでは、ノードの故障が一般に、故障したノードによって所有されるデータ項目を利用不可能にする。それらのデータ項目が再びアクセスされ得る前に、それらのデータ項目に対し、回復動作を実行しなければならない。回復動作を高速で実施するほど、データ項目がより迅速に利用できるようになる。
【００２０】
非共有データベースシステムにおいて、回復動作は、パーティションを使用しないこと、または故障前にセグメント化することのいずれかによって実行され得る。パーティションを使用しない場合、１つの非故障ノードが、故障ノードがこれまで所有していたすべてのデータ項目の所有権を引受ける。その後、非故障ノードは、回復動作全体の実行にとりかかる。パーティションを使用しない手法が、１つの稼動中のノードの処理電力しか使用しないため、多くの稼動中のノード間で回復動作が共有されている場合よりも、この回復には、より一層長い時間がかかる。これが、回復ノードが故障ノードのデータにアクセスしなければならない際に、非共有データベース内で一般的に回復が行なわれる態様である。ハードウェアの構成を簡略化するために、「バディ」システムが一般に使用される。ここでは、ノードが分割されてノードの対となり、各対は、互いのデータへのアクセスを有し、故障時には互いを回復する責任を負う。
【００２１】
故障前にセグメント化手法によると、故障ノードによって所有されていたデータは、故障前に、別個の非共有データベースフラグメントにセグメント化される。故障後に、別個のフラグメントの各々は、回復のために、異なる非故障ノードに割当てられる。回復動作が多くのノード間で分散されたため、回復は、１つのノードのみによって実行される場合よりも高速で完了し得る。しかしながら、いつノードが故障するかを厳密に認識することはほぼ不可能である。したがって、故障前にセグメント化する手法を用いてノードを回復することに関し、パーティションは、データベースのフラグメント間における、ノードのメインメモリおよびＣＰＵの分割を一般に伴い、一般には、故障が実際に生じるよりもはるかに前に実行される。残念ながら、このようにしてノードがセグメント化されている間に、ノードの定常の実行時の性能が下がる。さまざまな因子が、このような性能の低下を招く。たとえば、物理的なノードのリソースの各々が十分に利用されていないことがあり得る。複数のパーティションが同一の物理的なノードによって所有されているにも関わらず、これらのパーティションは、バッファプール、パッケージキャッシュ等のためのメモリを共有することができない。これにより、低利用が生じる。なぜなら、フラグメント化されたメモリ片よりも、１つのメモリ片のほうが効率よく使用できるためである。加えて、多数のパーティションにより、所定の仕事量に対するプロセス間の通信が増大する。たとえば、４個のパーティションに比例する１つのアプリケーションは、１２個のパーティションに比例し得ない。しかしながら、故障後の並列回復のために、故障前にセグメント化する手法を用いると、１２個のパーティションが必要とされ得る。
【課題を解決するための手段】
【００２２】
この発明は、添付の図面において限定ではなく例示として示される。これらの図面では、同じ参照番号が同じ要素を指す。
【発明を実施するための最良の形態】
【００２３】
発明の詳細な説明
共有ディスク記憶システムを含む非共有データベースシステムの性能を改善するためのさまざまな技術を以下に説明する。以下の記載内容では、説明のために多数の特定の詳細を明示して、この発明の完全な理解を図る。しかしながら、このような特定の詳細を用いなくてもこの発明を実施し得ることが明らかであろう。場合によっては、周知の構造およびデバイスをブロック図の形で示し、この発明をむやみに不明瞭にしないようにする場合もある。
【００２４】
機能上の概観
非共有データベースシステムを稼動する少なくとも２つのノードがディスクへの共有されたアクセスを有する非共有データベースシステムの性能を改善するためのさまざまな技術を、以下に説明する。データベースシステムの非共有アーキテクチャによって規定されるように、各データ片は依然として、いずれかの所定の時点において１つのノードによってのみ所有される。しかしながら、非共有データベースシステムを稼動する少なくともいくつかのノードがディスクへの共有されたアクセスを有するという点を利用して、非共有データベースシステムの均衡をより効率よく取り戻し、非共有データベースシステムをより効率よく回復する。
【００２５】
具体的には、並列に作動する複数の回復ノードを用いて、故障ノードが所有するデータを回復するための技術を提供する。故障ノードが所有するデータは、そのデータが存在する共有ディスクへのアクセスを有する回復ノードに再割当される。故障ノードの回復ログは、回復ノードか、または、回復ノードに回復タスクを分配するコーディネータプロセスによって読出される。
【００２６】
共有ディスクシステムを含む例示的なクラスタ
図１は、この発明の実施例が実現され得るクラスタ１００を示すブロック図である。クラスタ１００は、相互接続１３０によって結合される５個のノード１０２、１０４、１０６、１０８、および１１０を含み、相互接続１３０は、これらのノードが互いに通信することを可能にする。クラスタ１００は、２つのディスク１５０および１５２を含む。ノード１０２、１０４および１０６は、ディスク１５０へのアクセスを有し、ノード１０８および１１０は、ディスク１５２へのアクセスを有する。したがって、ノード１０２，１０４および１０６とディスク１５０とを含むサブシステムは、第１の共有ディスクシステムを構成し、ノード１０８および１１０とディスク１５２とを含むサブシステムは、第２の共有ディスクシステムを構成する。
【００２７】
クラスタ１００は、２つの共有ディスクサブシステムを含み、かつ、それらの共有ディスクサブシステム間で帰属関係が重複しない、相対的に単純なシステムの一例である。実際のシステムは、クラスタ１００よりもより一層複雑であることが考えられ、数百個のノード、数百個の共有ディスク、および、これらのノードとこれらの共有ディスクとの間に多対多の関係を有する。このようなシステムでは、多くのディスクへのアクセスを有する１つのノードが、たとえば、いくつかの別個の共有ディスクサブシステムのメンバーであることが考えられ、ここでは、共有ディスクサブシステムの各々が、共有されたディスクのうちの１つと、その共有されたディスクへのアクセスを有するすべてのノードとを含む。
【００２８】
共有ディスクシステム上の非共有データベース
例示のため、非共有データベースシステムがクラスタ１１０上で稼動しているものと想定されたい。ここで、非共有データベースシステムによって管理されるデータベースは、ディスク１５０および１５２に記憶される。データは、データベースシステムの非共有特性に基づき、５個のグループまたはパーティション１１２、１１４、１１６、１１８、および１２０に分離され得る。各パーティションは、対応するノードに割当てられる。パーティションに割当てられたノードは、そのパーティション内に存在するすべてのデータの排他的な所有者であると考えられる。この例において、ノード１０２、１０４、１０６、１０８、および１１０はそれぞれ、パーティション１１２、１１４、１１６、１１８、および１２０を所有する。ディスク１５０へのアクセスを有するノード（ノード１０２、１０４および１０６）によって所有されるパーティション１１２、１１４および１１８は、ディスク１５０に記憶される。同様に、ディスク１５２へのアクセスを有するノード（ノ
ード１０８および１１０）によって所有されるパーティション１１８および１２０は、ディスク１５２に記憶される。
【００２９】
クラスタ１００上で稼動するデータベースシステムの非共有特性によって規定されるように、いずれかのデータ片は、いずれかの所定の時点において、多くても１つのノードによって所有される。加えて、共有されたデータへのアクセスは、機能の転送により調整される。たとえば、ＳＱＬ言語をサポートするデータベースシステムの場合、特定のデータ片を所有しないノードは、そのデータ片を所有するノードにＳＱＬステートメントのフラグメントを転送することにより、そのデータに関する演算が実行されるようにすることができる。
【００３０】
所有権のマップ
機能の転送を効率よく実行するために、すべてのノードは、どのノードがどのデータを所有しているかを認識しなければならない。したがって、所有権のマップが規定され、所有権のマップは、データ−ノード間の所有権の割当を示す。実行時に、さまざまなノードが所有権のマップに照会し、実行時に、ＳＱＬフラグメントの経路を適正なノードに指定する。
【００３１】
一実施例に従うと、データ−ノード間のマッピングは、ＳＱＬ（または他のいずれかのデータベースアクセス言語）のステートメントのコンパイル時に決定される必要はない。むしろ、以下により詳細に説明するように、データ−ノード間のマッピングは、実行時に規定および修正され得る。以下に説明する技術を用いると、データが存在するディスクへのアクセスを有する１つのノードから、データが存在するディスクへのアクセスを有する別のノードに所有権が変更する際に、データをディスク上の永続的な位置から移動させることなく所有権の変更が実行される。
【００３２】
ロッキング
ロックは、リソースへのアクセスを有するいくつかのエンティティ間でリソースへのアクセスを調整するために使用される構造である。非共有データベースシステムの場合、非共有データベース内のユーザデータへのアクセスを調整するためのグローバルロッキングが必要ではなくなる。なぜなら、いずれかの所定のデータ片が１つのノードによってのみ所有されているためである。しかしながら、非共有データベースのすべてのノードが、所有権のマップへのアクセスを要求するため、所有権のマップに対する整合性のない更新を防ぐために、何らかのロッキングが必要とされ得る。
【００３３】
一実施例に従うと、データ片の所有権が１つのノード（「以前の所有者」）から別のノード（「新規の所有者」）に再割当されている際に、２ノードロッキング方式が使用される。さらに、非共有データベースに関連するメタデータへのアクセスを制御するために、グローバルロッキング機構を使用することができる。このようなメタデータは、たとえば所有権のマップを含み得る。
【００３４】
データの所有権が、並列回復の目的で再分配されている場合、所有権のマップに対するロッキング方式は必要とされない。具体的には、所有権が実行時に変化しない場合、簡単な方式を用いて、故障しなかったノード間で回復を並列化することができる。たとえば、Ｎ個の故障しなかったノードが存在する場合、第１の故障しなかったノードは、最初の１／Ｎ個のバケット内のデッドノードが所有していたすべてのデータを回復する責任を追うことができる、等である。回復が完了した後に、デッドノードが所有していたすべてのデータの所有権は、１つのノードに返還される。
【００３５】
バケットベースのセグメント化
上述のように、非共有データベースにより管理されるデータがセグメント化され、各パーティション内のデータが１つのノードにより排他的に所有される。一実施例に従うと、これらのパーティションは、データを論理バケットに割当てた後に、それらのバケットの各々を１つのパーティションに割当てることによって規定される。したがって、所有権のマップ内のデータ−ノード間のマッピングは、データ−バケット間のマッピングおよびバケット−ノード間のマッピングを含む。
【００３６】
一実施例に従うと、データ−バケット間のマッピングは、各データ項目の名前にハッシュ関数を適用することによって規定される。同様に、バケット−ノード間のマッピングは、バケットに関連する識別子に別のハッシュ関数を適用することによって規定され得る。代替的に、マッピングの一方または両方は、範囲ベースのセグメント化を用いることにより、または、個々の関係の１つ１つを単に列挙することにより、規定され得る。たとえば、１００万個のデータ項目の名前空間を５０個の範囲に分割することにより、それらのデータ項目は、５０個のバケットにマッピングされ得る。５０個のバケットは次に、各バケットに関する、（１）そのバケットを識別し、（２）現時点でバケットが割当てられたノードを識別する記録を記憶することにより、５個のノードにマッピングされ得る。
【００３７】
バケットを使用することにより、各データ項目に関して別個のマッピング記録が記憶されていたマッピングに比べ、所有権のマッピングのサイズが大幅に縮小される。さらに、バケットの数がノードの数を上回る実施例では、バケットの使用により、所定のノードが所有するデータのサブセットへの所有権の再割当が相対的に容易になる。たとえば、１つの新規のノードには、現時点で１０個のバケットが割当てられている１つのノードから、１つのバケットが割当てられ得る。このような再割当は、そのバケットについてのバケット−ノード間のマッピングを示す記録の修正を伴うに過ぎない。再割当されたデータのデータ−バケット間のマッピングは、変更されなくてよい。
【００３８】
上述のように、データ−バケット間のマッピングは、以下のものに限定されないが、ハッシュパーティション、範囲パーティション、またはリスト値を含むさまざまな技術のうちのいずれか１つを用いることによって規定され得る。範囲ベースのセグメント化が用いられ、かつ、範囲の数がノードの数よりもそれほど著しく大きくない場合は、データ項目をセグメント化するのに使用される範囲キーが変化しない値（日付等）である限り、データベースサーバは、粒度のより細かい（より狭い）範囲を用いて所望の数のバケットを得ることができる。範囲キーが変化し得る値である場合、データ項目は、特定のデータ項目についての範囲キーの値に対する変化に応じて古いバケットから除去されて、そのデータ項目の範囲キーの新規の値に対応するバケットに追加される。
【００３９】
所有権の最初の割当の規定
上述のマッピング技術を用いると、１つのテーブルまたは索引の所有権が複数のノード間で共有され得る。最初に、所有権の割当は無作為であることが考えられる。たとえば、ユーザは、データ−バケット間のマッピングに対してキーおよびセグメント化の技術（ハッシュ、範囲、リスト等）と、バケット−ノード間のマッピングに対してセグメント化の技術を選択することができるが、バケットの、ノードへの最初の割当は指定する必要がない。データベースサーバが次に、データ−バケット間のマッピングに対するキーに基づいて、バケット−ノード間のマッピングに対するキーを決定することができ、バケットによって表される特定のデータおよびデータベースオブジェクトに関係なく、バケット−ノード間の最初の割当を行うことができる。
【００４０】
たとえば、ユーザがキーＡに基づいてオブジェクトをセグメント化することを選択する場合、データベースサーバはキーＡを用いて、バケット−ノード間のマッピングを決定する。場合によっては、データベースサーバは、データ−バケット間のマッピングに使用さ
れるキーに対し、さらに別のキーを追加するか、または、異なる機能（その機能がデータ−バケット間のマッピングを保持する限り）を適用することができる。たとえば、オブジェクトが、キーＡの使用により４個のデータバケットにハッシュセグメント化される場合、データベースサーバは、ハッシュ関数をキーＢに適用してバケット−ノード間のマッピングを決定するか、または、ハッシュ値の数を１２へと単に増大することにより、それらの４個のバケットの各々を３個のバケットに細分することができる（そして、バケットの、ノードへの柔軟性の高い割当を可能にする）。ハッシュがモジュロ関数である場合、０番目、４番目、および８番目のバケット−ノード間のバケットは、０番目のデータ−バケット間のバケットに対応し、１番目、５番目、および９番目のバケット−ノード間のバケットは、１番目のデータ−バケット間のバケットに対応する、等である。
【００４１】
別の例として、オブジェクトがDATE型を有するキーＡ上に範囲区分される場合、データ−バケット間のマッピングは、年を返す関数year(date)を用いることによって指定され得る。しかしながら、バケット−ノード間のマッピングは、month_and_year(date)を用いることにより、データベースサーバによって内部で計算され得る。各年の区分は、１２個のバケット−ノード間のバケットに分割される。すなわち、データベースサーバは、特定の年（一般には現時点での年）の日付に対してアクセスが頻繁に行なわれていると判断した場合に、これらの１２個のバケットを他のノード間で再分配することができる。
【００４２】
上で提示したいずれの例においても、バケット−ノード間のbucket＃を考慮すると、データベースサーバは、データ−バケット間のbucket＃を一意に決定することができる。また、これらの例において、ユーザは、データ−バケット間のマッピングに対してキーおよびセグメント化の技術を選択する。しかしながら、代替的な実施例において、ユーザは、データ−バケット間のマッピングに対してキーおよびセグメント化の技術を選択しないことが考えられる。むしろ、データ−バケット間のマッピングに対するキーおよびセグメント化の技術は、データベースサーバにより自動的に決定されることも考えられる。
【００４３】
一実施例に従うと、データベースサーバは、各ノードにいくつのバケットが割当てられるべきであるかに基づき、バケット−ノード間の最初の割当を行なう。たとえば、より大きな容量を有するノードには、より多くのバケットが割当てられ得る。しかしながら、最初の割当において、どの特定のバケットがどのノードに割当てられるべきかについての決定は無作為である。
【００４４】
代替的な実施例によると、データベースサーバは、バケット−ノード間の割当を行なう際に、どのデータが１つのバケットによって表わされているかを考慮する。たとえば、特定のテーブルに対するデータがいくつかのバケット間で分割されているものと想定されたい。データベースサーバは、それらのバケットのすべてを同じノードに作為的に割当てることができ、または、それらのバケットの所有権を多くのノード間に作為的に分配することができる。同様に、データベースサーバは、最初の割当において、テーブルに関連するバケットを、それらのテーブルに対する索引に関連するバケットと同じノードに割当てようと試みることが考えられる。反対に、データベースサーバは、テーブルに関連するバケットを、それらのテーブルに対する索引に関連するバケットが割当てられたノードとは異なるノードに割当てようと試みることが考えられる。
【００４５】
故障しなかったノード全体における、１つ以上のノードが所有していた共有データの並列回復
分散された、非共有データベースシステムの１つ以上のノードが故障することが考えられる。非共有データベースシステムが管理するデータの利用可能性を確保するために、故障したノード（「デッドノード」）が所有していたバケットを、故障しなかったノードに再割当しなければならない。一般に、バケット−ノード間のマッピング情報は、共有ディ
スク上に配置されるデータベースカタログに記憶される。このデータベースカタログを検査することにより、非共有データベースシステムの非故障ノードは、デッドノードが所有していたパーティションバケットのリストを確認することができる。
【００４６】
デッドノードが所有していたパーティションバケットが一旦識別されると、これらのパーティションバケットは、故障しなかったノード間に再分配される。バケットの所有権が割当てられた、故障しなかったノードが、バケットにマッピングするデータを含む共有ディスクへのアクセスを有している限り、根底にあるデータを移動させずにこの再分配が行なわれ得ることが重要な点である。たとえば、クラスタ１００のノード１０２が故障したと想定されたい。バケットを所有していたノード１０２がパーティション１１２に対応する場合、このバケットは、ディスク１５０上のデータの物理的な位置を変更せずに、ノード１０４またはノード１０６のいずれかに再割当され得る。
【００４７】
デッドノードが以前に所有していたバケットの所有権が再割当された後に、それらのバケット内の項目に対し、故障しなかったノードにより、繰上げ動作およびロールバック動作が実行される。一実施例に従うと、故障ノードのバケットが割当てられる、故障しなかったノードは、故障ノードの再実行ログおよび故障ノードが所有していたデータへのアクセスを有する、故障しなかったノードのみを含む。代替的に、回復を実行する故障しなかったノードが、故障ノードのデータへのアクセスを有するものの、故障ノードの再実行ログへのアクセスを有さない場合、コーディネータが再実行ログを走査して、再実行が生成されたバケットに基づき、再実行ログに含まれる再実行記録を分配することができる。
【００４８】
一実施例に従うと、回復を行なっているノードは、回復されているブロックを特定の順序でディスクに書込み、問題を回避する。具体的には、大量の回復が（たとえば媒体の回復中に）実行されなければならない場合、回復ノードは、チェックポイントを取るか、または回復されたブロックをディスクに書込む。しかしながら、このような状況下でブロックがディスクに書込まれる際に、回復ノードは、どのような順序でも書込を実行しないことがあり得る。たとえば、ブロックＡに対して生成された再実行が、ブロックＢに対して生成された再実行よりも先行しており、ブロックＡおよびＢが２つの別個のノードにより回復されている場合、故障ノードの再実行のスレッドに対するチェックポイントがブロックＢに対する再実行よりも先行し得ることをこのことが意味する場合には、特に、ブロックＢをブロックＡよりも先に書込むことはできない。この問題を回避するために、回復ノードは最も早期のダーティな回復ブロック（故障ノードから再実行が適用されたブロック）を互いに交換することができる。そのブロックが最も早期のダーティな回復ブロックである場合、ノードはそのブロックを書込むことができる。このようにして、ブロックは順番に書込まれる。
【００４９】
いくつかのノードが回復動作に携わっているため、回復動作は、パーティションを使用しない上述の手法よりも高速で実行される。さらに、故障前にセグメント化する上述の手法とは異なり、バケットの所有権の再分配が故障後に行なわれるため、実行時の不利益が生じない。
【００５０】
複数のノードに回復動作を分配して並列な回復動作を行なうためのここに記載する技術は、１つのノードが所有するオブジェクトの並列な媒体回復にも同様に適用される。具体的には、オブジェクトを含む媒体が故障すると、オブジェクトの一部の所有権は、回復の持続時間にわたり、いくつかのノードに分配され得る。所有権は、回復が完了してから、折りたたんで１つのノードに返却され得る。
【００５１】
入れ子状の故障を処理するための一実施例に従うと、データベースシステムは、取消しの一部がブロックに適用されたか否かを追跡する。取消しの適用を追跡することは有用で
ある。なぜなら、異なるパーティションを変更したトランザクションの早期の部分がロールバックされていることが考えられる一方で、それ以降の変更がロールバックされていないことが考えられるためである。
【００５２】
一実施例に従うと、再実行記録にパーティションバケットの番号が記憶される。たとえば、再実行記録が、特定のバケットに属するブロックに対して行なわれた変更を示す場合、そのバケットのバケット番号が再実行記録内に記憶される。その結果、再実行記録を適用する際に、回復プロセスは、回復を必要としないバケットのパーティションバケットの番号を示す再実行記録を自動的に飛ばすことができる。
【００５３】
再実行を適用する際に、すべての回復ノードが故障ノードの再実行ログを走査することができ、または、１つの回復コーディネータがログを走査して、回復に携わっているノードに再実行の一部を分配することができる。回復コーディネータが再実行の一部を分配する一実施例では、パーティションバケットの番号に基づいて再実行が分配される。したがって、特定のバケットを回復するために割当てられた回復ノードは、回復コーディネータから、そのバケットに属するすべてのデータ項目についての再実行を受取る。
【００５４】
回復動作中に、特定のデータ片が１つのパーティションから別のパーティションに移動することが考えられる。一実施例に従うと、１つのパーティションから別のパーティションにオブジェクトを移動させる動作は、挿入が後続する削除として扱われる。したがって、異なるバケットに属する再実行の部分間には順序依存性が存在しない。
【００５５】
選択的な並列化
一実施例に従うと、回復動作のうちの選択された部分のみが並列化される。たとえば、特定のノードが回復コーディネータとして割当てられ得る。回復中に、回復コーディネータは、回復コーディネータが並列化の基準を満たす回復タスクに遭遇するまで、回復を必要とするすべてのデータを順次に回復する。たとえば、並列化の基準は、特定の大きさのしきい値を上回るオブジェクトに対して並列な回復が用いられるべきであることを指定し得る。その結果、回復プロセス中に回復コーディネータがこのようなオブジェクトに遭遇すると、データベースサーバは、大きなオブジェクトに対応するバケットの所有権を再分配し、それにより、いくつかのノードがそのオブジェクトの並列な回復を補助することができる。指定されたタスクが完了すると、データの所有権は回復コーディネータに再割当され得る。
【００５６】
移動中のバケット
バケットの所有権が１つのノード（「以前の所有者」）から別のノード（「新規の所有者」）に転送されている間、このバケットは「移動中」であると考えられる。バケットが移動中の間に以前の所有者および／または新規の所有者が故障した場合、追加の回復ステップが必要となり得る。必要とされるこの追加の回復ステップは、データベースシステムが使用する所有権転送技術によって規定される。所有権転送技術により、以前の所有者および新規の所有者がいずれも、移動中のバケットに属するデータ項目のダーティなバージョンを有し得る場合、回復は、（１）故障しなかったノードに存在するデータ項目のキャッシュされたダーティなバージョンを使用すること、および（２）以前の所有者および新規の所有者の再実行ログをマージおよび適用することを含み得る。同様に、故障時にパーティションバケットが移動中である場合、複数のノードにより生成された取消しログを適用して、そのバケットに属するデータ項目をロールバックする必要があると考えられる。
【００５７】
どのバケットが回復を必要としているかの判断
ノードが故障すると、バケット−ノード間のマッピングを検査して、どのバケットが故障ノードに属しているか、したがって回復を必要としているかを判断することができる。
一実施例に従うと、バケット−ノード間のマッピングを介して第１のパスを形成して、どのバケットが回復を必要としているかを判断する。第１のパスの後に、回復を必要としないすべてのバケットは、アクセス用に直ちに利用可能となる。次に第２のパスが形成され、その間に回復を必要とするバケットに回復動作が実行される。第２のパスの間に実行される回復は、デッドノードが所有するすべてのデータの所有者として指定された１つのノードによって達成され得るか、または、所有権のマップを用いて故障しなかったノード間に分配され得る。
【００５８】
ハードウェアの概観
図２は、この発明の一実施例が実現され得るコンピュータシステム２００を示すブロック図である。コンピュータシステム２００は、バス２０２または情報を通信するための他の通信機構と、バス２０２に結合されて情報を処理するためのプロセッサ２０４とを含む。コンピュータシステム２００は、バス２０２に結合されてプロセッサ２０４が実行する命令および情報を記憶するためのメインメモリ２０６、たとえばランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置も含む。メインメモリ２０６は、プロセッサ２０４が実行する命令の実行中に、一時的数値変数または他の中間情報を記憶するためにも使用可能である。コンピュータシステム２００は、バス２０２に結合されてプロセッサ２０４に対する静的情報および命令を記憶するための読出専用メモリ（ＲＯＭ）２０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光学ディスク等の記憶装置２１０が設けられてバス２０２に結合され、情報および命令を記憶する。
【００５９】
コンピュータシステム２００は、コンピュータユーザに情報を表示するためのディスプレイ２１２、たとえば陰極線管（ＣＲＴ）に、バス２０２を介して結合され得る。英数字キーおよび他のキーを含む入力装置２１４がバス２０２に結合されて、情報および指令選択をプロセッサ２０４に通信する。別の種類のユーザ入力装置が、方向情報および指令選択をプロセッサ２０４に通信してディスプレイ２１２上のカーソルの動作を制御するためのカーソル制御機器２１６、たとえばマウス、トラックボール、またはカーソル方向キーである。この入力装置は一般に、２つの軸、すなわち第１の軸（ｘ等）および第２の軸（ｙ等）において２自由度を有し、これによって入力装置は平面上で位置を特定することができる。
【００６０】
この発明は、この明細書に記載された技術を実現するためにコンピュータシステム２００を用いることに関する。この発明の一実施例によると、これらの技術は、メインメモリ２０６に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ２０４が実行することに応じて、コンピュータシステム２００により実行される。このような命令は、別のコンピュータ読取可能な媒体、たとえば記憶装置２１０からメインメモリ２０６内に読出すことができる。メインメモリ２０６に含まれる命令のシーケンスを実行することにより、プロセッサ２０４はこの明細書に記載されたプロセスのステップを実行する。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せて結線回路を用いて、この発明を実施することができる。したがって、この発明の実施例は、ハードウェア回路およびソフトウェアのいずれかの特定の組合せに限定されない。
【００６１】
この明細書で用いられる「コンピュータ読取可能な媒体」という用語は、プロセッサ２０４に対して実行のために命令を提供することに携わる、いずれかの媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形態を取り得るが、これらに限定されない。不揮発性媒体には、たとえば記憶装置２１０等の光学または磁気ディスクが含まれる。揮発性媒体には、メインメモリ２０６等の動的メモリが含まれる。伝送媒体には、同軸ケーブル、銅線、および光ファイバが含まれ、バス２０２を有するワイヤが含まれる。伝送媒体は、電波データ通信および赤外線データ通信の際に生成されるもの等の音波または光波の形を取り得る。
【００６２】
コンピュータ読取可能な媒体の一般的な形態には、たとえばフロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、紙テープ、孔のパターンを有する他のいずれかの物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、他のいずれかのメモリチップもしくはカートリッジ、以下に述べる搬送波、またはコンピュータが読出すことのできる他のいずれかの媒体が含まれる。
【００６３】
プロセッサ２０４に対して実行のために１つ以上の命令の１つ以上のシーケンスを搬送することに対し、コンピュータ読取可能な媒体のさまざまな形態が関与し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクで搬送され得る。遠隔コンピュータはそれらの命令をそれ自体の動的メモリにロードして、それらの命令を、モデムを用いて電話回線経由で送信することができる。コンピュータシステム２００に対してローカルなモデムが電話回線上のデータを受信して、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線信号によって搬送されたデータは赤外線検出器によって受信され得、適切な回路がそのデータをバス２０２上に出力することができる。バス２０２はそのデータをメインメモリ２０６に搬送し、そこからプロセッサ２０４が命令を取り出して実行する。メインメモリ２０６が受信した命令は、プロセッサ２０４による実行前または実行後のいずれかに、記憶装置２１０に任意に記憶され得る。
【００６４】
コンピュータシステム２００は、バス２０２に結合された通信インターフェイス２１８も含む。通信インターフェイス２１８は、ローカルネットワーク２２２に接続されたネットワークリンク２２０に対する双方向のデータ通信結合を提供する。たとえば通信インターフェイス２１８は、対応する種類の電話回線に対するデータ通信接続を設けるためのサービス統合デジタル網（ＩＳＤＮ）カードまたはモデムであり得る。別の例として、通信インターフェイス２１８は、互換性を有するローカルエリアネットワーク（ＬＡＮ）にデータ通信接続を設けるためのＬＡＮカードであり得る。無線リンクもまた実現することができる。このようなどの実現例においても、通信インターフェイス２１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送受信する。
【００６５】
ネットワークリンク２２０は一般に、１つ以上のネットワーク経由で他のデータ装置に対してデータ通信を提供する。たとえば、ネットワークリンク２２０は、ローカルネットワーク２２２経由で、ホストコンピュータ２２４か、またはインターネットサービスプロバイダ（Internet Service Provider）（ＩＳＰ）２２６により運営されるデータ装置に接続を提供することができる。ＩＳＰ２２６は次いで、現在一般に「インターネット」２２８と呼ばれるワールドワイドパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク２２２およびインターネット２２８はともに、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を用いる。さまざまなネットワークを経由する信号と、ネットワークリンク２２０上の、または、通信インターフェイス２１８経由の信号とは、コンピュータシステム２００との間でデジタルデータを搬送し、情報を運ぶ搬送波の例示的形態である。
【００６６】
コンピュータシステム２００は、ネットワーク、ネットワークリンク２２０、および通信インターフェイス２１８を介してメッセージを送信して、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ２３０は、インターネット２２８、ＩＳＰ２２６、ローカルネットワーク２２２、および通信インターフェイス２１８経由で、アプリケーションプログラムに対して要求されたコードを送信することができる。
【００６７】
受信されたコードは、受信されたときにプロセッサ２０４によって実行され得、および／または後の実行のために記憶装置２１０もしくは他の不揮発性記憶装置に記憶され得る。このようにして、コンピュータシステム２００は搬送波の形でアプリケーションコードを得ることができる。
【００６８】
上述の明細書では、この発明の実施例を実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、この発明が何であるか、およびこの発明を目指して出願人が何を意図しているかを排他的に示す唯一のものが、この出願から発生して特有の形態をとった一組の請求項である。特有の形態においてこのような請求項は、今後のどのような補正をも含んで発生する。このような請求項に含まれる用語に対してここで明示されたどのような定義も、請求項で用いられる用語の意味を決定するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲を決して限定しない。したがって、明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
【図面の簡単な説明】
【００６９】
【図１】この発明の一実施例に従った、２つの共有ディスクサブシステムを含むクラスタを示すブロック図である。
【図２】この発明の実施例が実現され得るコンピュータシステムのブロック図である。
【図１】
2007501455.tif 000003
【図２】
2007501455.tif 000004
【手続補正書】
【提出日】平成18年3月10日(2006.3.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを管理するための方法であって、
複数のノードにとってアクセス可能な永続的な記憶上に複数の永続的なデータ項目を保存するステップを含み、前記永続的なデータ項目は、前記永続的な記憶上の特定の位置に記憶される特定のデータ項目を含み、前記方法はさらに、
前記ノードの１つに、永続的なデータ項目の各々の排他的な所有権を割当てるステップを含み、前記複数のノードの特定のノードには、前記特定のデータ項目の排他的な所有権が割当てられ、
いずれかのノードが前記特定のデータ項目を必要とする演算が実行されることを望むと、前記演算が実行されることを望む前記ノードは、前記特定のデータ項目が前記特定のノードにより排他的に所有されている時に、前記特定のノードが前記特定のデータ項目についての演算を実行するように前記特定のノードに前記演算を転送し、前記方法はさらに、
１つのノードにより排他的に所有される一組の永続的なデータ項目を巻き込む故障に応じて、
２つ以上の回復ノードの各々に対し、前記故障に巻き込まれていた前記一組の永続的なデータ項目のサブセットの排他的な所有権を割当てるステップと、
前記２つ以上の回復ノードの各回復ノードが、前記回復ノードに割当てられた永続的なデータ項目の前記サブセットに回復動作を実行するステップとを含む、方法。
【請求項２】
前記故障は、前記一組の永続的なデータ項目を記憶する永続的な記憶装置の媒体の故障である、請求項１に記載の方法。
【請求項３】
前記故障は、前記一組の永続的なデータ項目の排他的な所有権を有するノードの故障であり、
割当てる前記ステップは、２つ以上の回復ノードの各々に対し、前記故障ノードにより排他的に所有されていた前記永続的なデータ項目のサブセットの排他的な所有権を割当てるステップを含む、請求項１に記載の方法。
【請求項４】
前記２つ以上の回復ノードは、第１の回復ノードおよび第２の回復ノードを含み、
前記第１の回復ノードに排他的に割当てられたデータのサブセットに対して前記第１の回復ノードにより実行される前記回復動作の少なくとも一部は、前記第２の回復ノードに排他的に割当てられたデータのサブセットに対して前記第２の回復ノードにより実行される回復動作の少なくとも一部と並列して実行される、請求項３に記載の方法。
【請求項５】
前記複数の永続的なデータ項目を複数のバケットに編成するステップと、
前記複数のバケットと前記複数のノードとの間でマッピングを規定するステップとを含み、各ノードは、前記ノードにマッピングするすべてのバケットに属するデータ項目の排他的な所有権を有し、前記方法はさらに、
前記マッピングに基づき、どのデータ項目が回復を必要としているかを判断するステップを含む、請求項３に記載の方法。
【請求項６】
どのバケットが回復を必要とする前記データ項目を有しているかを判断するために、第１のマッピングに第１のパスを実行するステップと、
回復を必要とする前記データ項目に回復を実行するために、前記マッピングに第２のパスを実行するステップと、
前記第１のパスを実行した後に、かつ、前記第２のパスを完了する前に、回復を必要としないすべてのバケットに属するデータ項目を、アクセス用に利用可能にするステップとをさらに含む、請求項５に記載の方法。
【請求項７】
前記２つ以上の回復ノードの各回復ノードは、前記故障ノードに関連する回復ログに基づき、永続的な記憶に回復動作を実行する、請求項３に記載の方法。
【請求項８】
回復コーディネータが、故障したノードに関連する前記回復ログを走査し、前記２つ以上の回復ノードに回復記録を分配するステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記２つ以上の回復ノードの各々は、前記故障ノードに関連する回復ログを走査する、請求項７に記載の方法。
【請求項１０】
前記２つ以上の回復ノードの各回復ノードが回復動作を実行する前記ステップは、ブロックに取消し記録を適用するステップを含み、
前記方法はさらに、どの取消し記録が適用されたかを追跡するステップを含む、請求項３に記載の方法。
【請求項１１】
故障の前に、前記故障ノードが、前記故障ノードによって生成される再実行記録内に、前記再実行記録に関連する前記データ項目がどのバケットに属するかを示すバケット番号を記憶するステップをさらに含む、請求項５に記載の方法。
【請求項１２】
前記故障ノードの回復は、さまざまなタスクを含み、前記方法はさらに、
前記故障ノードの回復に必要とされる第１の組の１つ以上のタスクが、順次に実行されるべきであること、および、前記故障ノードの回復に必要とされる第２の組の１つ以上のタスクが、並列に実行されるべきであることを回復コーディネータが判断するステップと、
前記第１の組の１つ以上のタスクを順次に実行するステップと、
前記第２の組の１つ以上のタスクを並列に実行するために、前記２つ以上の回復ノードを用いるステップとをさらに含む、請求項３に記載の方法。
【請求項１３】
前記故障ノードの回復に必要とされる第２の組の１つ以上のタスクが並列に実行されるべきであることを判断する前記ステップは、少なくとも部分的に、回復を必要とする１つ以上のオブジェクトのサイズに基づいて実行される、請求項１２に記載の方法。
【請求項１４】
前記第２の組の１つ以上のタスクに関係するデータ項目の所有権は、前記回復コーディネータから前記２つ以上の回復ノードに渡されて、前記２つ以上の回復ノードが前記第２の組の１つ以上のタスクを実行できるようにし、
前記第２の組の１つ以上のタスクの実行の後に、かつ、前記故障ノードの回復の完了前に、前記第２の組の１つ以上のタスクに関係するデータ項目の所有権は、前記２つ以上の回復ノードから前記回復コーディネータに再び渡される、請求項１２に記載の方法。
【請求項１５】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに請求項１から１４のいずれかに記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能な媒体。
【国際調査報告】
2007501455.tif 000005
2007501455.tif 000006
2007501455.tif 000007