(57)【特許請求の範囲】
【請求項１】
分散データベース環境においてオペレーショナル・プライマリ・ノードからデータベース・イメージをレプリケーションするためのレプリケータであって、
データベース構造および複数のデータベース・ページを含むプライマリ・ノードのチェックポイント・イメージを規定するためのイメージ・エンジンと、
バックアップ・ノードを初期化し、前記規定されたデータベース構造を前記初期化されたバックアップ・ノードに保存することによって、バックアップ・ノードにレプリカ・データベースを作成するためのコントローラと、
前記チェックポイント・イメージの各データベース・ページを保存のために前記バックアップ・ノードに送信するための伝送メカニズムと、
チェックポイント・イメージの作成を開始した後に、前記プライマリ・ノードにおける各後続のトランザクションを保存し、それによって、前記バックアップ・ノードに送信するための対応するＲＥＤＯトランザクションを作成するためのロガーと、
前記データベース・ページの前記送信と並列に、各作成されたＲＥＤＯトランザクションを、対応するトランザクションが生じた順序で前記バックアップ・ノードに送信する並列伝送メカニズムであって、前記バックアップ・ノードが正しい順序で前記トランザクションをレプリケーションすることができるようにする、前記並列伝送メカニズムと、
各後続のトランザクションによって操作される各データベース・ページを識別し、前記各識別されたデータベース・ページを、対応するＲＥＤＯトランザクションよりも前にまたは同時に前記バックアップ・ノードに到達するように優先順位付けするためのページ・コントローラであって、それによって、前記対応するＲＥＤＯトランザクションは、全てのデータベース・ページが前記バックアップ・ノードに保存されるのを待つことなく、前記識別されたデータベース・ページに対し動作することができる、前記ページ・コントローラと、
を備える、レプリケータ。
【請求項２】
前記ページ・コントローラは、変更されたデータベース・ページを、変更されていないデータベース・ページよりも優先する、請求項１に記載のレプリケータ。
【請求項３】
前記ページ・コントローラは、メイン・メモリ内のデータベース・ページを、永続ストレージ内のデータベース・ページよりも優先する、請求項１に記載のレプリケータ。
【請求項４】
前記ページ・コントローラは、ＲＥＤＯトランザクションによって操作される２つ以上のデータベース・ページを識別することと、前記作成されたＲＥＤＯトランザクションの前記送信と並列に前記２つ以上のデータベース・ページを送信することと、
を更に含む、請求項１に記載のレプリケータ。
【請求項５】
前記プライマリ・ノードは、全ての前記データベース・ページが送信されたことを前記バックアップ・ノードに通知する、請求項１に記載のレプリケータ。
【請求項６】
前記バックアップ・ノードは、全ての前記データベース・ページが受信されたことを前記プライマリ・ノードに通知する、請求項１に記載のレプリケータ。
【請求項７】
前記対応するトランザクションが生じた順序で前記バックアップ・ノードに送信する並列伝送メカニズムは、ＲＥＤＯトランザクションを送信バッファ内でインターリーブすることおよびデータベース・ページを送信バッファ内でインターリーブすることを、それぞれバックアップ・ノードに送信する前に行う、請求項１に記載のレプリケータ。
【請求項８】
トランザクションは、前記プライマリ・ノードに対し連続負荷を課す、請求項１に記載のレプリケータ。
【請求項９】
分散データベース環境においてオペレーショナル・プライマリ・ノードのデータベース・イメージをバックアップ・ノードにレプリケーションするための方法であって、
データベース構造および複数のデータベース・ページを含むプライマリ・ノードのチェックポイント・イメージを規定することと、
バックアップ・ノードを初期化し、前記規定されたデータベース構造を前記初期化されたバックアップ・ノードに保存することによって、バックアップ・ノードにレプリカ・データベースを作成することと、
前記チェックポイント・イメージの各データベース・ページを保存のために前記バックアップ・ノードに送信することと、
チェックポイント・イメージの作成を開始した後に、前記プライマリ・ノードにおける各後続のトランザクションを保存し、それによって、前記バックアップ・ノードに送信するための対応するＲＥＤＯトランザクションを作成することと、
各後続のトランザクションによって操作される各データベース・ページを識別することと、
前記データベース・ページの前記送信と並列に、各作成されたＲＥＤＯトランザクションを、対応するトランザクションが生じた順序で前記バックアップ・ノードに送信し、前記バックアップ・ノードが正しい順序で前記トランザクションをレプリケーションすることができるようにすることと、
各識別されたデータベース・ページを、対応するＲＥＤＯトランザクションよりも前にまたは同時に前記バックアップ・ノードに到達するように優先順位付けし、それによって、前記対応するＲＥＤＯトランザクションが、全てのデータベース・ページが前記バックアップ・ノードに保存されるのを待つことなく、前記識別されたデータベース・ページに対し動作することができるようにすることと、
を含む、方法。
【請求項１０】
前記データベース・ページを前記バックアップ・ノードに到達するように優先順位付けすることは、変更されたデータベース・ページを、変更されていないデータベース・ページよりも優先する、請求項９に記載の方法。
【請求項１１】
前記データベース・ページを前記バックアップ・ノードに到達するように優先順位付けすることは、メイン・メモリ内のデータベース・ページを、永続ストレージ内のデータベース・ページよりも優先する、請求項９に記載の方法。
【請求項１２】
ＲＥＤＯトランザクションによって操作される２つ以上のデータベース・ページを識別することと、前記作成されたＲＥＤＯトランザクションの前記送信と並列に前記２つ以上のデータベース・ページを送信することと、
を更に含む、請求項９に記載の方法。
【請求項１３】
前記プライマリ・ノードは、全ての前記データベース・ページが送信されたことを前記バックアップ・ノードに通知する、請求項９に記レの方法。
【請求項１４】
前記バックアップ・ノードは、全ての前記データベース・ページが受信されたことを前記プライマリ・ノードに通知する、請求項９に記載の方法。
【請求項１５】
前記対応するトランザクションが生じた順序で前記バックアップ・ノードに送信することは、
ＲＥＤＯトランザクションを送信バッファ内でインターリーブすることおよびデータベース・ページを送信バッファ内でインターリーブすることを、それぞれバックアップ・ノードに送信する前に行う、請求項９に記載の方法。
【請求項１６】
トランザクションは、前記プライマリ・ノードに対し連続負荷を課す、請求項９に記載の方法。
【請求項１７】
分散データベース環境においてオペレーショナル・プライマリ・ノードからバックアップ・ノードにデータベース・イメージをレプリケーションするためのプログラムであって、請求項９から１６のいずれか一項に記載の方法をコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベース環境においてオペレーショナル・プライマリ・ノードからデータベース・イメージをレプリケーション(replication)する方法、プログラム、および装置(replicator)に関する。
【背景技術】
【０００２】
ホット・スタンバイ（ＨＳＢ:hot-standby）データベースでは、トランザクションが２つのフェーズでコミットされ、それによって、トランザクションが適切にコミットされたと見なされる前に、プライマリ・ノードおよびバックアップ・ノードの双方が変化の確認応答に成功しなくてはならない。これは双方のノード内のデータベースが常に同じ状態を有することを確保する２フェーズ・コミット（２ＰＣ：two-phase commit）プロトコルである。２ＰＣは、アトミック・コミットメント・プロトコル（ＡＣＰ:atomic commitment protocol）であり、トランザクションをコミットするかまたはアボート（ロールバック(roll back)）するかに関して分散アトミック・トランザクションに関与する全てのプロセスを協調させるための特殊なタイプのコンセンサス・プロトコルである。いくつかのＨＳＢデータベースは、より緩和されたトランザクションを提供することによって、ユーザが一貫性と引き換えに性能を手に入れるためのオプションを提供する。そのようなトランザクションは、バックアップ・ノードがコミット中のトランザクションの全てのログ・レコードを受信したことを確認応答するとすぐに、プライマリ・ノードがコミットする、トゥー・セーフ・レシーブド（２ＳＲ：two-safe received）プロトコルにおいて規定されている。
【０００３】
プライマリ・ノードは、マスター・ノードとして知られている場合があり、バックアップ・ノードは、セカンダリ・ノード、スタンバイ・ノードまたはスレーブ・ノードとして知られている場合がある。通常、プライマリ・ノードは全てのトランザクションを受け入れる一方、バックアップ・ノードは読み出し専用トランザクションしか受け入れない。
【０００４】
バックアップ・ノードをプライマリ・ノードと同期させておく様々な方法が存在するが、この出願公開では、ログ・レプリケーション（ログ・シッピング・レプリケーションとしても知られる）が検討される。ログ・レプリケーションでは、プライマリ・ノードは各書き込みトランザクションを自身のデータベースおよびログ・レコードに記憶し、それによってログ・レコードはバックアップ・ノードに更にコピーされる。バックアップ・ノードは、ログ・レコードを受信すると、受信したログ・レコードごとにＲＥＤＯトランザクションを実行する。ＲＥＤＯトランザクションは、参照されたトランザクションを繰り返す。
【０００５】
実施形態では、ＨＳＢデータベースは、高速データ・アクセスのためにメイン・メモリに記憶される。なぜなら、永続ストレージからの間接的なアクセスおよびより低速なアクセス速度と対照的に、メイン・メモリは、コンピュータ処理装置（ＣＰＵ）によって直接アドレス指定されるためである。高速メモリ・アクセスは、特にＨＳＢデータベースの特性であるわけではなく、ホット・スタンバイ機能をサポートすることができるインメモリ・データベースに適用される。ログ・レコードは通常、永続ストレージに記憶される。インメモリ・データベースは、データベースのチェックポイント・イメージ（スナップショットとしても知られる）を永続ストレージに定期的に（または要求に応じて）書き込むことによって、データに対する永続的な変更を保証する。チェックポイント・イメージ書き込みはチェックポイント・プロセスである。チェックポイント・イメージにおいて、データはデータベース・ページとして編成される。データベース・ページはストレージ内の連続データ・エリアであり、通常、サイズが単一または複数の記憶論理ブロックと等しい。単純にするために、データベース・ページのサイズがディスク・ブロックに等しいと仮定される。
【０００６】
インメモリ・データベースは、自身のアクティブ・データを揮発性メモリ内に維持する。インメモリ・データベースは、メモリのための内蔵管理部を備えることが一般的であり、この内蔵管理部は、オペレーティング・システムからのメモリの大部分を配分し、次に、これをインメモリ・データベースの使用に最も適した形で編成する。データが様々なサイズのメモリ・セグメントに記憶されることが仮定されるが、各メモリ・セグメントは、チェックポイント・イメージの作成のためのメモリ・ページ・サイズにデータを編成することを可能にする情報を含む。代替的に、データベースはメモリ内のメモリ・ページ・サイズに編成され得る。
【０００７】
ＨＳＢデータベースには、１つのプライマリ・ノードと、通常、１つのバックアップ・ノードとが存在するが、いくつかの変形形態は複数のバックアップ・ノードを有する。より複雑なシステムでは、パーティション（または「シャード(shards)」）において重複したデータベースを有することが可能であり、それによって、１つのパーティションはマスターと見なされ、他のパーティションはバックアップと見なされる。実施形態は、このパーティション化されたモデルにも適用される。ノードは、物理的に別個のコンピュータ装置、ラック内のカード、または単一のホスト・コンピュータ内の仮想マシンにおけるプロセスを意味し得る。時々、ＨＳＢデータベース、またはＨＳＢデータベースを実行するコンピュータ・ノードはクラッシュする。そのようなクラッシュは、ノードのうちの１つのチェックポイント・イメージを乱し、乱されたノードに記憶されているデータベースをもはやリカバリーする（recover）ことができなくなる。クラッシュ中、別のノードが動作状態に留まっている場合、そのノードはプライマリ（既にプライマリでない場合）に切り替わることができ、トランザクションの実行を続ける。
【０００８】
プライマリ・ノードの故障後、或る時間が経つと、別のノードがバックアップ・ノードとして始動される。始動されたノードは、故障（およびリカバリー）したノードであってもよく、またはＨＳＢデータベースにおいてバックアップ・ノードとして動作することが可能なスペア・ノードであってもよい。プライマリ・ノードが故障した場合、存在しないチェックポイント・イメージからバックアップ・ノードを始動する方法はない。プライマリ・ノードが起動し実行中であるときのみデータベース・コピーが可能である。始動されたバックアップ・ノードがディスク上に記憶されたデータベースを有しない場合、リストアすることができず、ＲＥＤＯトランザクション内に記憶されたトランザクションを処理することができない。したがって、始動されたバックアップ・ノードのためにデータのコピーが提供される必要があり、その後、チェックポイント・イメージが作成された時点の後にプライマリ・ノードのデータベースにおいて行われた全ての変更を含むログ・レコードが作成される。
【０００９】
故障の後にバックアップ・ノードが再起動されると、このバックアップ・ノードは破損したチェックポイント・イメージを有するかまたはチェックポイント・イメージを全く有しない場合がある。したがって、プライマリ・ノードをオフラインにすることなく、プライマリ・ノードからバックアップ・ノードに完全なチェックポイント・イメージをコピーする必要がある。バックアップ・ノードは、メタデータと、システム・テーブルと、最も近時のチェックポイント・イメージと、チェックポイント・イメージ作成が始動された時点から、プライマリ・データベースおよびバックアップ・データベースの双方の整合がとれた時点までに実行された書き込みトランザクションのＲＥＤＯトランザクションとを必要とする。
【００１０】
バックアップ・ノードのデータベースを、プライマリ・ノードからのデータと同期させること(synchronizing)は、２つのフェーズ、すなわちコピー・フェーズおよびキャッチアップ・フェーズを含む。コピー・フェーズは、プライマリ・ノードにおけるデータベースをバックアップ・ノードにコピーすることを含む。キャッチアップ・フェーズはバックアップ・ノードにおいて、プライマリ・ノードにおいて既に実行され、コミットされたトランザクションに関するログ・レコードを実行することを含む。ノードのうちの１つが故障しているかまたはリカバリー中であるとき、この故障に起因してＨＳＢデータベースの故障耐性が減少しているので、システムは脆弱フェーズにある。
【００１１】
既知のＨＳＢ同期解決策は、チェックポイント・イメージの反復バージョンを含む１つまたは複数のチェックポイント・イメージと、それに続く、最も近時のトランザクションによって作成されたログ・レコードとの完全なコピーを行う。
【００１２】
例えば、既知のＨＳＢ同期プロセスは、プライマリ・ノードにおけるプライマリ同期プロセス、すなわち、チェックポイント・イメージ（メタデータおよび実際のデータを含む）をプライマリ・ノードからバックアップ・ノードに送信することと、チェックポイント・イメージの作成中にアクティブであったＲＥＤＯトランザクションを送信することと、同期中にプライマリ・ノードで実行されたＲＥＤＯトランザクションを送信することとに分割することができる。対応するバックアップ同期プロセスは、対応するステップ、すなわち、チェックポイント・イメージ（メタデータおよび実際のデータを含む）を受信することと、チェックポイント・イメージの作成中にアクティブであったＲＥＤＯトランザクションを受信することと、同期中にプライマリ・ノードで実行されたＲＥＤＯトランザクションを受信することとに分割することができる。
【００１３】
コモディティー・ハードウェア上で実行されるインメモリ・データベースは、毎秒数十万個の別個の書き込みトランザクションを実行することができる。通常の状況下で、読み出し専用トランザクションは、プライマリ・ノードおよびバックアップ・ノードの双方で実行することができ、それによって負荷がプライマリ・ノードから部分的に分散される。他のノードが故障すると、残りのノードは自身の役割をプライマリに切り替えなくてはならない場合がある（既にプライマリでない場合）。プライマリ・ノードは即座に、全ての書き込みトランザクションおよび読み出し専用トランザクションの責任を負い、これによって実際には、プライマリ・ノードのアクティブなクライアント接続数が２倍になる場合がある。結果として、プライマリ・ノードのメモリ消費が著しく増大し、負荷のタイプおよび実施の詳細に依拠して、同時に実行されているトランザクション数の増大に起因して性能が低下する場合がある。
【００１４】
バックアップ・ノードがリカバリーを開始すると、プライマリ・ノードは、データベースの現在の状態のフレッシュなチェックポイント・イメージを作成する責任を負う。これはデータベース・シードにバックアップするためにコピーされる。チェックポイント・イメージの作成中にコミットされなかった全てのトランザクションは、プライマリ・ノードにおけるＲＥＤＯトランザクションとして記録され、バックアップ・ノードに送信され、実行されなくてはならない。これがキャッチアップ・フェーズである。
【００１５】
プライマリ・ノードからバックアップ・ノードへチェックポイント・イメージをコピーし、バックアップ・ノードをプライマリ・ノードにキャッチアップさせることは、プライマリ・ノード・メモリが使い果たされる前に行われなくてはならない。プライマリ・ノード・メモリが使い果たされると、ＨＳＢ同期プロセスが失敗するか、または代替的に、プライマリ・ノードのＲＥＤＯトランザクションが、メモリ消費を減らすためにストレージに記憶されなくてはならない。永続ストレージＲＥＤＯトランザクションは、永続ストレージ・ディスクから読み出される必要があり、これはデータを高速メモリから読み出すよりもはるかに低速である。
【００１６】
永続ストレージからＲＥＤＯトランザクションにアクセスすることによって、キャッチアップ・フェーズが低速になる。低速なキャッチアップによって、結果としての故障のリスクが増大し、バックアップ・ノードが時間内にプライマリ・ノードにキャッチアップする全体能力が低下する。脆弱時間中の更なる故障は、ＨＳＢデータベースの観点から致命的となり得る。最初の故障後に、バックアップ・ノードがプライマリ・ノードにキャッチアップすることができない場合、将来的な致命的エラーのリスクが増大する。
【発明の概要】
【発明が解決しようとする課題】
【００１７】
したがって、キャッチアップ・フェーズは、更新頻度が高い場合、ＨＳＢデータベースの利用可能性に対する重大な脅威となり、このリスクを最小限にするためにＨＳＢ同期プロセスを可能な限り高速にすることが重要である。
【課題を解決するための手段】
【００１８】
本発明の第１の態様では、分散データベース環境においてオペレーショナル・プライマリ・ノードからデータベース・イメージをレプリケーションするためのレプリケータが提供される。このレプリケータは、データベース構造および複数のデータベース・ページを含むプライマリ・ノードのチェックポイント・イメージを規定するためのイメージ・エンジンと、バックアップ・ノードを初期化し、規定されたデータベース構造を初期化されたバックアップ・ノードに保存することによって、バックアップ・ノードにレプリカ・データベースを作成するためのコントローラと、チェックポイント・イメージの各データベース・ページを保存のためにバックアップ・ノードに送信するための伝送メカニズムと、チェックポイント・イメージの作成を開始した後に、プライマリ・ノードにおける全ての後続のトランザクションを保存し、それによって、バックアップ・ノードに送信するための対応するＲＥＤＯトランザクションを作成するためのロガーと、各後続のトランザクションによって操作される各データ・ページを識別するためのページ識別子と、データベース・ページの送信と並列に、各作成されたＲＥＤＯトランザクションを、対応するトランザクションが生じた順序でバックアップ・ノードに送信する並列伝送メカニズムであって、バックアップ・ノードが正しい順序でトランザクションをレプリケーションすることができるようにする、並列伝送メカニズムと、各識別されたデータベース・ページを、対応するＲＥＤＯトランザクションよりも前にまたは実質的に同時にバックアップ・ノードに到達するように優先順位付けするためのページ・コントローラであって、それによって、対応するＲＥＤＯトランザクションは、残りのデータベース・ページがバックアップ・ノードに保存されるのを待つことなく、識別されたデータベース・ページに対し動作することができる、ページ・コントローラと、を備える。
【００１９】
本発明の第２の態様によれば、分散データベース環境においてオペレーショナル・プライマリ・ノードからバックアップ・ノードにデータベース・イメージをレプリケーションするための方法が提供される。この方法は、データベース構造および複数のデータベース・ページを含むプライマリ・ノードのチェックポイント・イメージを規定することと、バックアップ・ノードを初期化し、規定されたデータベース構造を初期化されたバックアップ・ノードに保存することによって、バックアップ・ノードへのレプリカ・データベースの作成を開始することと、チェックポイント・イメージの各データベース・ページを保存のためにバックアップ・ノードに送信することと、チェックポイント・イメージの作成を開始した後に、プライマリ・ノードにおける全ての後続のトランザクションを保存し、バックアップ・ノードに送信するための対応するＲＥＤＯトランザクションを作成することと、各ＲＥＤＯトランザクションによって操作される各データ・ページを識別することと、データベース・ページの送信と並列に、各作成されたＲＥＤＯトランザクションを、対応するトランザクションが生じた順序でバックアップ・ノードに送信して、バックアップ・ノードが正しい順序でトランザクションをレプリケーションすることができるようにすることと、各識別されたデータベース・ページを、対応するＲＥＤＯトランザクションよりも前にまたは実質的に同時にバックアップ・ノードに到達するように優先順位付けし、それによって、対応するＲＥＤＯトランザクションが、全てのデータベース・ページがバックアップ・ノードに保存されるのを待つことなく、識別されたデータベース・ページに対して動作するようにすることと、を含む。
【００２０】
データベース構造が規定され、プライマリ・ノードから抽出されて、新たに作成されたバックアップ・ノードに、このバックアップ・ノードにおいて動作するＲＥＤＯトランザクションの送信と並列に送信されることが提案される。新たに作成されたバックアップ・ノードは、データベース構造が到着すると、このデータベース構造をレプリケーションする。レプリケーション（同期としても知られる）は、空のデータベース構造（メタデータ、テーブルおよびインデックス）を作成することを含む。メタデータ構造のレプリケーションの直後に、バックアップ・ノードは、データベース・クライアントとの接続の確立を開始し、これらのデータベース・クライアントへのサービス提供を開始することができる。残りのデータ・ページはＲＥＤＯトランザクションの実行と並列に送信される。データベース・ページとＲＥＤＯトランザクションとのインターリーブは、バックアップ・ノードが、最も必要とされるデータを最初に受信するので有利である。
【００２１】
主要な利点は、プライマリ・ノードが中断なしでトランザクションを実行することができることであり、更に、バックアップ・ノードがメタデータを受信し処理すると、プライマリ・ノードがバックアップ・ノードへのＲＥＤＯトランザクションの送信を開始することができることである。それに加えて、実施形態は、ＲＥＤＯトランザクションの送信と並列に、メイン・メモリからバックアップ・ノードへデータ・ページを送信することを可能にする。
【００２２】
実施形態は、シード・データベースがプライマリ・ノードからバックアップ・ノードにコピーされるのと同時にプライマリ・ノードからバックアップ・ノードにＲＥＤＯトランザクションをレプリケーションすることが可能であることを認識している。換言すれば、ＨＳＢ同期プロセスは、従来から、プライマリ・ノードのストレージからバックアップ・ノードへのフレッシュなチェックポイント・イメージの転送、それに続くキャッチアップ・フェーズを含む。キャッチアップ・フェーズの後になって初めてプライマリ・ノードからバックアップ・ノードへのログ・トランザクションを開始することが可能になる。
【００２３】
実施形態は、永続ディスク・ストレージを低速にする入／出力アクセスなしで、プライマリ・ノード・メイン・メモリからバックアップ・ノードへ直接チェックポイント・イメージをコピーすることを可能にする。実施形態は、ＨＳＢ同期プロセス中にプライマリ・ノードからバックアップ・ノードへのアクティブなＲＥＤＯトランザクションのレプリケーションを開始することも可能にする。結果として、永続ストレージ動作が存在しないので、チェックポイント・イメージ転送が高速になる。更に、チェックポイント・イメージ転送全体（すなわち、全てのデータ）について全てのアクティブなトランザクションがプライマリ・ノードにバッファリングされなくてはならない場合よりも、プライマリ・ノードにおけるメモリ消費がはるかに小さくなる。
【００２４】
結果として、データベース同期プロセスの持続時間は、ディスクまたはシステム性能ではなく、ネットワーク転送能力によって制限される。ネットワーク転送能力は、例えば、ＴＣＰ／ＩＰの代わりに専用ネットワーク・プロトコルを用いることによって増大させることができるので、ストレージ入／出力のボトルネックが取り除かれ、それによって、ＨＳＢ同期プロセスが短縮化し、ＨＳＢデータベースの全体利用可能性が増大する。
【００２５】
トゥー・セーフ・レシーブド（２ＳＲ）プロトコル・トランザクションの観点で好ましい実施形態が説明されるが、他の実施形態は、ワン・セーフ・レシーブド（１ＳＲ：one-safe received）プロトコル・トランザクションを含む他のタイプのトランザクションを用い得る。１ＳＲプロトコル・トランザクションでは、コミット要求がプライマリ・ノードからバックアップ・ノードに送信されとすぐにトランザクションがコミットする。
【００２６】
有利には、変更されたデータベース・ページは変更されていないデータベース・ページよりも優先される。必要とされる頻度がより低いページが共有リソースに対し競合しないように、最も要求されている（ｐｏｐｕｌａｒ）データ（変更されたページまたはダーティページ）を可能な限り早く送信することが有利である。
【００２７】
より有利には、メイン・メモリ内のデータベース・ページは、永続ストレージにおいてデータベース・ページよりも優先される。メイン・メモリは、データがより高速にアクセスされ、転送時間が永続ストレージよりも短いので、優先される。メイン・メモリは通常、容量がより小さいがより高速なアクセス時間の揮発性メモリである。永続ストレージは通常、容量がより大きいがアクセス時間がより低速な永続ディスク・ドライブである。
【００２８】
更により有利には、本方法は、ＲＥＤＯトランザクションによって操作される２つ以上のデータ・ページを識別することと、作成されたＲＥＤＯトランザクションの送信と並列に２つ以上のデータ・ページを送信することとを更に含む。
【００２９】
また更に有利には、プライマリ・ノードは全てのデータベース・ページが送信されたことをバックアップ・ノードに通知する。
【００３０】
好ましくは、バックアップ・ノードは、全てのデータベース・ページが受信されたことをプライマリ・ノードに通知する。
【００３１】
更に好ましくは、ＲＥＤＯトランザクションおよびデータベース・ページは、バックアップ・ノードに送信する前に送信バッファ内でインターリーブされる。
【００３２】
更により好ましくは、トランザクションは、プライマリ・ノードに対し連続負荷を課す。
【００３３】
実施形態は、クラスタ・データベース環境の外側で実行されるトランザクション・プロセスに対し、ノード故障中のデータベースの性能が、トランザクション・プロセスにとって実質的に下降ではなく実質的に一定にみえるような影響を有する。そのような影響は、実行中のコンピュータのマシンおよびシステム・レベルにおいて、ならびに任意の重複するアプリケーション・レベルよりも下において作用する。実施形態は、ノード故障中のコンピュータの速度の増加を実証する。
【００３４】
本発明の第３の態様では、クラスタ・データベース環境においてオペレーショナル・プライマリ・データベースをレプリケーションするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、コンピュータ可読プログラム・コードが具現化されたコンピュータ可読ストレージ媒体を備え、コンピュータ可読プログラム・コードは本方法の全てのステップを実行するように構成される。
【００３５】
コンピュータ・プログラム製品は、コンピュータ可読媒体、例えば、光ディスク、磁気ディスク、固体ドライブ等の有形媒体に固定されるか、またはモデムもしくは他のインターフェースデバイスを用いて、限定ではないが光通信線もしくはアナログ通信線を含む有形媒体を介して、もしくは限定ではないがマイクロ波、赤外線もしくは他の伝送技法を含む無線技法を非有形に用いてコンピュータ・システムに伝送可能な、一連のコンピュータ可読命令を含む。一連のコンピュータ可読命令は、本明細書において上記で説明した機能のうちの全てまたは一部を実現する。
【００３６】
当業者であれば、そのようなコンピュータ可読命令は、多くのコンピュータ・アーキテクチャまたはオペレーティング・システムと共に用いるために複数のプログラミング言語で書くことができることを認識するであろう。更に、そのような命令は、限定ではないが半導体、磁気、もしくは光を含む現在もしくは未来の任意のメモリ技術を用いて記憶することができるか、または、限定ではないが光、赤外線もしくはマイクロ波を含む現在もしくは未来の任意の通信技術を用いて送信することができる。そのようなコンピュータ・プログラム製品は、添付の印刷された文書もしくは、例えばシステムＲＯＭもしくは固定ディスク上でコンピュータ・システムに予めロードされた、電子文書を有するリムーバブル媒体、例えば市販ソフトウェアとして配信することができるか、またはネットワーク、例えばインターネットもしくはワールド・ワイド・ウェブを介してサーバまたは電子掲示板から配信することができることが予期される。
【００３７】
本発明の第４の態様では、コンピュータ可読媒体上に記憶され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムが提供される。このプログラムは、このプログラムがコンピュータ上で実行されると方法請求項の全てのステップを実行するためのソフトウェア・コード部分を備える。
【００３８】
本発明の第５の態様では、コンピュータ・システムにロードされ、コンピュータ・システムによって操作されると、このコンピュータ・システムが方法請求項の全てのステップを実行することを可能にする機能コンピュータ・データ構造を含む、好ましい実施形態のデータ・キャリアの態様が提供される。適切なデータ・キャリアは、固体メモリ、磁気ドライブまたは光ディスクとすることができる。データ伝送チャネルも同様に、全ての記載のストレージ媒体、および有線または無線の信号搬送媒体等の信号搬送媒体を含むことができる。
【００３９】
ここで、以下の図面を参照して、本発明の好ましい実施形態を例としてのみ説明する。
【図面の簡単な説明】
【００４０】
【図１】好ましい実施形態の展開図である。
【図２】好ましい実施形態のコンポーネント図である。
【図３】好ましい実施形態のプロセスの流れ図である。
【図４】好ましい実施形態のサブプロセスの流れ図である。
【図５】好ましい実施形態のサブプロセスの流れ図である。
【図６】好ましい実施形態のサブプロセスの流れ図である。
【図７】好ましい実施形態のサブプロセスの流れ図である。
【図８】好ましい実施形態の対応するバックアップ・ノード・プロセスの流れ図である。
【図９】並列コンピューティングの実施形態の展開図である。
【発明を実施するための形態】
【００４１】
図１を参照すると、ホット・スタンバイ・データベース・システム１０における好ましい実施形態の展開が説明されている。ホット・スタンバイ・データベース・システム１０は、多数の他の汎用または専用コンピューティング・システム環境または構成と共に動作可能である。ホット・スタンバイ・データベース・システム１０と共に用いるのに適し得る既知のコンピューティング処理システム、環境または構成あるいはそれらの組合せの例は、限定ではないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能な消費者電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのうちの任意のものを含む分散型クラウド・コンピューティング環境を含む。
【００４２】
ホット・スタンバイ・データベース・システム１０は、コンピュータ・プロセッサによって実行されるプログラム・モジュール等のコンピュータ・システム実行可能な命令の一般的な文脈で説明され得る。通常、プログラム・モジュールは、特定のタスクを実行するかまたは特定の抽象データ・タイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジックおよびデータ構造を含むことができる。ホット・スタンバイ・データベース・システム１０は、分散型クラウド・コンピューティング環境において具現化することができ、分散型クラウド・コンピューティング環境では、タスクは通信ネットワークを通じてリンクされたリモート処理デバイスによって行われる。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート双方のコンピュータ・システム・ストレージ媒体内に配置することができる。
【００４３】
ホット・スタンバイ・データベース・システム１０は、汎用コンピュータ・サーバプライマリ・ノード１２と、プライマリ・ノード１２に直接取り付けられた１つまたは複数の入力デバイス１４および出力デバイス１６と、コンピュータ・サーバ・バックアップ・ノード１２’と、少なくとも１つのスペア・ノード１３とを備える。
【００４４】
ホット・スタンバイ・データベース・システム１０はネットワーク２０に接続される。ホット・スタンバイ・データベース・システム１０は、入力デバイス１４および出力デバイス１６を用いてユーザ１８と通信する。入力デバイス１４は、キーボード、スキャナ、マウス、トラックボールまたは別のポインティング・デバイスのうちの１つまたは複数を含む。出力デバイス１６は、ディスプレイまたはプリンタのうちの１つまたは複数を含む。ホット・スタンバイ・データベース・システム１０は、ネットワーク２０を介してネットワーク・デバイス（図示せず）と通信する。ネットワーク２０は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）またはインターネットとすることができる。
【００４５】
コンピュータ・サーバ・プライマリ・ノード１２は、中央処理装置（ＣＰＵ）２２と、ネットワーク・アダプタ２４と、デバイス・アダプタ２６と、バス２８と、メモリ３０とを備える。
【００４６】
ＣＰＵ２２は、メモリ３０からマシン命令をロードし、命令に応答してマシン動作を実行する。そのようなマシン動作は、レジスタ（図示せず）内の値をインクリメントまたはデクリメントすることと、メモリ３０からレジスタにまたはその逆に値を転送することと、条件が真または偽である場合にメモリ内の異なるロケーションに分岐することと（条件付き分岐命令としても知られる）、２つの異なるレジスタ内の値を加算または減算することと、結果を別のレジスタ内にロードすることとを含む。通常のＣＰＵは、多くの異なるマシン動作を実行することができる。マシン命令の組は、マシン・コード・プログラムと呼ばれる。マシン命令は、システムにおいて可能な抽象度の最も低い言語レベルであるマシン・コード言語で書かれる。高水準言語で書かれたコンピュータ・プログラムは、コンパイルされてマシン・コード・プログラムにされる必要があり、その後実行され得る。代替的に、仮想マシンまたはインタープリタ等のマシン・コード・プログラムは、マシン動作の観点で高水準言語を解釈実行することができる。
【００４７】
ネットワーク・アダプタ２４は、プライマリ・ノード１２と、バックアップ・ノードを含むネットワーク・デバイスとの間の通信を可能にするためにバス２８およびネットワーク２０に接続される。
【００４８】
デバイス・アダプタ２６は、コンピュータ・サーバ１２と、入力デバイス１４および出力デバイス１６との間の通信を可能にするためにバス２８ならびに入力デバイス１４および出力デバイス１６に接続される。
【００４９】
バス２８は、メイン・システム・コンポーネントを、メモリ３０を含めて合わせてＣＰＵ２２に結合する。バス２８は、メモリ・バスまたはメモリ・コントローラと、周辺バスと、アクセラレイティッド・グラフィックス・ポートと、多岐にわたるバス・アーキテクチャのうちの任意のものを用いるプロセッサまたはローカル・バスとを含む、任意のいくつかのタイプのバス構造のうちの１つまたは複数を表す。例として、限定ではないが、そのようなアーキテクチャは、産業規格アーキテクチャ（ＩＳＡ）バス、マイクロチャネル・アーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）ローカル・バス、および周辺コンポーネント相互接続（ＰＣＩ）バスを含む。
【００５０】
メモリ３０は、揮発性メモリ３２および不揮発性メモリまたは永続メモリ３４の形態のコンピュータ・システム可読媒体を備える。揮発性メモリ３２の例は、ランダム・アクセス・メモリ（ＲＡＭ）３６およびキャッシュ・メモリ３８である。通常、揮発性メモリは、より高速であることに起因して用いられ、通常、不揮発性メモリは、データをより長く保持することに起因して用いられる。ホット・スタンバイ・データベース・システム１０は、他の取外し可能または取外し不能あるいはその両方の、揮発性または不揮発性あるいはその両方のコンピュータ・システム・ストレージ媒体を更に備えることができる。単なる例として、永続メモリ３４は、取外し不能な不揮発性の磁気媒体（図示しないが、通常、磁気ハードディスクまたはソリッドステート・ドライブである）に対し読み書きを行うために提供され得る。図示しないが、取外し可能な不揮発性ソリッドステート・メモリのための外部ポートと、コンパクト・ディスク（ＣＤ）、デジタル・ビデオ・ディスク（ＤＶＤ）またはブルーレイ等の取外し可能な不揮発性光ディスクに対し読み書きを行うための光ディスク・ドライブとを含む更なるストレージ媒体が提供され得る。そのような例では、それぞれが１つまたは複数のデータ媒体インターフェースによってバス２８に接続され得る。以下で更に示し説明するように、メモリ３０は、本発明の実施形態の機能を実行するように構成されるプログラム・モジュールの組（例えば、プログラム・モジュールのうちの少なくとも１つ）を有する少なくとも１つのプログラム製品を含むことができる。
【００５１】
好ましい実施形態の機能を実行するように構成されるプログラム・モジュールの組は、データベース１００Ａおよびレプリケータ２００Ａを備える。バックアップ・ノード１２’は、データベース１００Ｂおよびレプリケータ２００Ｂを備える。図示されないが、好ましい実施形態をサポートする更なるプログラム・モジュールは、ファームウェア、ブート・ストラップ・プログラム、オペレーティング・システムおよびサポート・アプリケーションを含む。オペレーティング・システム、サポート・アプリケーション、他のプログラム・モジュールおよびプログラム・データまたはそれらの何らかの組合せのそれぞれが、ネットワーキング環境の実装を含むことができる。
【００５２】
ホット・スタンバイ・データベース・システム１０は、ネットワーク・アダプタ２４を介して少なくとも１つのネットワーク２０（ローカル・エリア・ネットワーク（ＬＡＮ）、一般的な広域ネットワーク（ＷＡＮ）、またはインターネットのような公衆ネットワークあるいはそれらの組合せ等）と通信する。ネットワーク・アダプタ２４は、バス２８を介してコンピュータ・サーバ１２の他のコンポーネントと通信する。図示されていないが、ホット・スタンバイ・データベース・システム１０と合わせて他のハードウェアまたはソフトウェアコンポーネントあるいはその両方が用いられ得ることを理解するべきである。限定ではないが、例は、マイクロコード、デバイス・ドライバ、冗長処理装置、外部ディスク・ドライブ・アレイ、独立ディスクの冗長アレイ（ＲＡＩＤ）、テープ・ドライブおよびデータ・アーカイブ・ストレージ・システムを含む。
【００５３】
図２を参照すると、レプリケータ２００（一般的なクラスのレプリケータ２００Ａおよび２００Ｂ）は、以下のコンポーネント、すなわち、ｃｏｐｙｉｄインデックス２０２と、ｄｉｒｔｙｉｄインデックス２０４と、送信キュー２０６と、プライマリ方法３００と、バックアップ・ノード方法５００とを含む。
【００５４】
ｃｏｐｙｉｄインデックス２０２は、特定のチェックポイント・イメージについて既にバックアップ・ノードに送信されたデータベース・ページの参照を記憶するためのデータ構造である。
【００５５】
ｄｉｒｔｙｉｄインデックス２０４は、チェックポイント・イメージが定義されてから変更されたデータベース・ページの参照を記憶するためのデータ構造である。代替的に、チェックポイント・イメージの全てのデータベース・ページが、ディスクから変更されていないデータベース・ページを読み出すのではなく、メモリから読み出される場合、ｄｉｒｔｙｉｄインデックス２０４は、全てのデータベース・ページの識別子を含む。前者の場合、変更されていないデータベース・ページが変更されるときはいつでも、その識別子がｄｉｒｔｙｉｄインデックス２０４に追加される。ｄｉｒｔｙｉｄインデックス２０４は、チェックポイント・イメージ作成が完了すると空にされる。後者の場合、ｄｉｒｔｙｉｄインデックス２０４は、データベースの全てのデータベース・ページ識別子を含む。
【００５６】
送信キュー２０６は、バックアップ・ノードに送信する前にデータベース・ページおよびＲＥＤＯトランザクションを記憶するためのキューである。
【００５７】
プライマリ方法３００は、プライマリ・ノードをレプリケーションするための方法であり、以下で図３および図４〜図７を参照して詳細に説明される。
【００５８】
バックアップ・ノード方法５００は、プライマリ・ノードをレプリケーションするための対応するバックアップ・ノード・プロセスであり、図８を参照して以下で詳細に説明される。
【００５９】
図３を参照すると、プライマリ方法３００は論理プロセス・ステップ３０１〜３０７を含む。
【００６０】
開始状況において、プライマリ方法３００は、新たなバックアップ・ノードになる予定の別のノードが始動されると、トランザクションを実行する。新たなバックアップ・ノードは、破損したかまたは完全に欠落していることに起因して独自のデータベース・イメージを有しない。新たなバックアップ・ノードは、プライマリ・ノードと共通のデータベースを共有する必要がある。プライマリ方法３００は、チェックポイント・イメージまたはスナップショットと呼ばれる、自身のデータベースの自己充足型の整合性のあるバージョンを作成する。インメモリ・データベースにおいて、メモリ内にチェックポイントが作成され、このメモリから、バックアップ・ノードに転送するためにチェックポイントがコピーされる。ディスクおよびメイン・メモリから、ページを並列に読み出すことができる。ダーティ・ページがメイン・メモリ内に存在する。なぜならこれらは最近変更されたためである。このため、これらのダーティ・ページは、ディスク上のページよりも早く再び変更される可能性がより高い。
【００６１】
プライマリ・ノードのｃｏｐｙｉｄインデックス２０２において発見されるデータベース・ページは、以下の状態、すなわち、ＢＵＦＦＥＲＥＤ（既に送信バッファに加えられており、既に発見され、バックアップ・ノードに送信されることが決定されているとき）、およびＳＥＮＴ（ページの実際の送信が行われたとき）のうちの１つを有する。
【００６２】
ステップ３０１は、新たなチェックポイント・イメージおよび新たなチェックポイント識別子を作成するためのものである。チェックポイント・カウンタがインクリメントされる。トランザクションによって生じる更新は、チェックポイント・イメージ作成中、データを失わない。更新トランザクションは、チェックポイント・イメージ作成中にコミットを行うことができる。以前のチェックポイント・イメージ・バージョンは、それらが永続ストレージに記憶されるまで維持される。
【００６３】
ステップ３０２は、データベースから、メタデータおよびシステム・テーブルを含む必要なデータベース構造を抽出し、これらをバックアップ・ノード１２’に送信するためのものである。
【００６４】
ステップ３０３は、応答を待機するためのものである。メタデータの処理に成功し、バックアップ・ノード１２’がデータおよびＲＥＤＯトランザクションを受信する準備ができていることを通知する確認応答がバックアップ・ノード１２’から到着する。
【００６５】
ステップ３０４は、ＲＥＤＯトランザクションおよびデータベース・ページの並列処理のためのものであり、図４〜図７の並列プロセス方法３０４’を参照して以下でより詳細に説明される。
【００６６】
ステップ３０５は、全てのデータベース・ページがバックアップ・ノードに送信された時を検出し、これ以上ページが送信されないことをバックアップ・ノードに通知するためのものである。
【００６７】
ステップ３０６は、全てのデータベース・ページがバックアップ・ノードによって受信され、リカバリーされたことを確認応答するためのものである。
【００６８】
ステップ３０７は、通常の手順に戻り、ローカル・コミット・プロトコルから分散コミット・プロトコルに切り替えるためのものである。
【００６９】
図４を参照すると、並列プロセス方法３０４’は、論理プロセス・ステップ３０４Ａ１、３０４Ａ２、３０４Ａ３、３０４Ａ４、３０４Ｆおよび方法３０４Ｂを含む。
【００７０】
ステップ３０４Ａ１は、プロセスを、並列に実行される２つの別個のプロセス、すなわち、ステップ３０４Ａ２において開始する、バックアップ・ノードにデータベース・ページを送信するための第１のプロセスと、方法３０４ＢにおいてＲＥＤＯトランザクションを扱うための第２のプロセスとに分割するためのものである。
【００７１】
ステップ３０４Ａ２は、チェックポイント・イメージ作成以降、データベース・ページがクリーンであるかまたはダーティであるか（変更されていないかまたは変更されているか）を判断するためのものである。ｄｉｒｔｙｉｄインデックス２０４が調べられる。データベース・ページがｄｉｒｔｙｉｄインデックス２０４内にリストされていない場合、ページはクリーンであり、ステップ３０４Ａ３に進む。そうでない場合、ページはダーティであり、ステップ３０４Ａ４に進む。データベース・ページは、変更されたことに起因してｄｉｒｔｙｉｄインデックス２０４内にリストされている場合、ダーティである。
【００７２】
ステップ３０４Ａ３は、メイン・メモリまたはストレージからデータベース・ページを読み出すためのものである。双方のページが対応するので、整合性の観点からこれは問題でない。一方、好ましい実施形態では、データベース・ページは、アクセス時間がより高速であるので、オペレーショナル・メモリから読み出される。アクセスされるデータベース・ページは、バックアップ・ノードに転送するために送信キュー２０６に送信される。次に、ステップ３０４Ｆに進む。
【００７３】
ステップ３０４Ａ４は、メイン・メモリからデータベース・ページを読み出すためのものである。これは単に、ページの最も新しいコピーが存在するのがメイン・メモリであることに起因する。次に、ステップ３０４Ｆに進む。
【００７４】
方法３０４Ｂは、バックアップ・ノードにＲＥＤＯトランザクションを送信するためのものであり、図５に関して以下でより詳細に説明される。次に、ステップ３０４Ｆに進む。
【００７５】
ステップ３０４Ｆは、処理するべきデータベース・ページまたはＲＥＤＯトランザクションがまだ存在するか否かを判断し、存在する場合、ステップ３０４Ａ１に戻るためのものである。そうでない場合、ステップ３０５に進む。
【００７６】
図５を参照すると、方法３０４Ｂ（ＲＥＤＯトランザクションをバックアップ・ノードに送信する）は、論理プロセス・ステップ３０４Ｂ１〜３０４Ｂ９、方法３０４Ｃおよび方法３０４Ｄを含む。
【００７７】
ステップ３０４Ｂ１は、全てのＲＥＤＯトランザクションについてループを定義し、それぞれのＲＥＤＯトランザクションからデータベース・ページ識別子を抽出するためのものである。
【００７８】
ステップ３０４Ｂ２は、全てのページに対する全てのチェックを実行することによって、２つ以上のデータベース・ページでのＲＥＤＯトランザクションを処理するためのものである。
【００７９】
ステップ３０４Ｂ３は、抽出されたページ識別子またはページ識別子を求めてｃｏｐｙｉｄインデックス２０２を探索して、データベース・ページがバックアップ・ノードに既に送信されたか否かを判断するためのものである。
【００８０】
ステップ３０４Ｂ４は、抽出されたページＩＤがｃｏｐｙｉｄインデックス２０２内になく、したがってまだバックアップ・ノードに送信されていない場合に、ステップ３０４Ｂ５に分岐するためのものである。そうではなく、抽出されたページＩＤがｃｏｐｙｉｄインデックス２０２内にある場合、ステップ３０４Ｂ９に進む。
【００８１】
ステップ３０４Ｂ５は、ｄｉｒｔｙｉｄインデックス２０４内の抽出されたページＩＤを探索して、チェックポイント後に変更されたか否かを知るためのものである。
【００８２】
ステップ３０４Ｂ６は、ｄｉｒｔｙｉｄインデックス２０４が抽出されたページＩＤを含む場合、ステップ３０４Ｂ７に分岐するためのものである。そうでない場合、プロセスは方法３０４Ｃに分岐する。
【００８３】
方法３０４Ｃは、ｃｏｐｙｉｄインデックス２０２内にも、ｄｉｒｔｙｉｄインデックス内にも発見されないページＩＤを処理し、終了時にステップ３０４Ｆに進むためのものである。方法３０４Ｃは、図６を参照して以下でより詳細に説明される。
【００８４】
ステップ３０４Ｂ７は、メイン・メモリからページを読み出すためのものである。
【００８５】
ステップ３０４Ｂ８は、読み出しページを、バックアップ・ノードに送信するために送信キュー２０６に追加するためのものである。
【００８６】
３０４Ｆは、更なるページまたはＲＥＤＯトランザクションが存在する場合にステップ３０４Ａ１にループ・バックすることとして上記で説明された。
【００８７】
ステップ３０４Ｂ９は、記録の状態を読み出して、方法３０４Ｄに進むためのものである。
【００８８】
方法３０４Ｄは、ｃｏｐｙｉｄインデックス２０２において発見されたデータベース・ページＩＤを処理し、終了時にステップ３０４Ｆに進むためのものである。方法３０４Ｄは、図７を参照して以下でより詳細に説明される。
【００８９】
図６を参照すると、方法３０４Ｃは、論理プロセス・ステップ３０４Ｃ１〜３０４Ｃ３、３０４Ｅ１および３０４Ｅ２を含む。
【００９０】
ステップ３０４Ｃ１は、抽出されたデータベース・ページがクリーンであり、最新のチェックポイント・イメージよりも前に作成されている場合、ステップ３０４Ｃ２に分岐するためのものである。そうでない場合、ステップ３０４Ｃ３に進む。
【００９１】
ステップ３０４Ｃ２は、オペレーショナル・メモリまたはストレージ・メモリからデータベース・ページを読み出すためのものである。次に、ステップ３０４Ｅ１に進む。
【００９２】
ステップ３０４Ｅ１は、ＲＥＤＯトランザクションを送信キュー２０６に追加するためのものである。次に、ステップ３０４Ｅ２に進む。
【００９３】
ステップ３０４Ｅ２は、ｃｏｐｙｉｄインデックス２０２にデータベース・ページ識別子を追加し、次にステップ３０４Ｆに進むためのものである。
【００９４】
ステップ３０４Ｃ３は、ＲＥＤＯトランザクションのみを送信キュー２０６に追加し、その後ステップ３０４Ｆに進むためのものである。
【００９５】
図７を参照すると、方法３０４Ｄは、論理プロセス・ステップ３０４Ｄ１〜３０４Ｄ３を含む。
【００９６】
ステップ３０４Ｄ１は、ページ状態が「キュー状態」である場合、ステップ３０４Ｄ２に分岐するためのものである。そうではなく、ページ状態が「送信済み」である場合、分岐はステップ３０４Ｄ３に進む。
【００９７】
ステップ３０４Ｄ２は、送信キュー２０６内のページのロケーションを探索して、ＲＥＤＯトランザクションを、送信キュー２０６内においてページのロケーションの後に挿入するためのものである。次に、ステップ３０４Ｆに進む。
【００９８】
ステップ３０４Ｄ３は、ＲＥＤＯトランザクションを、通常はキューに追加することなく、可能な限り早くバックアップ・ノードに送信するためのものである。
【００９９】
図８を参照すると、バックアップ・ノード方法５００は、論理プロセス・ステップ５０１〜５０６（サブステップ５０３．１、５０３．２、５０３．３、５０４Ａ１、５０４Ａ２、５０４Ｂ１および５０４Ｂ２を含む）を含む。バックアップ・ノード方法５００はプライマリ方法３００を補うものである。
【０１００】
ステップ５０１は、プライマリ・ノードからメタデータを受信するためのものである。メタデータは、例えば、データベース構造と、データベース・スキーマを作成するのに必要な情報とを含み、バックアップ・ノードがデータベースを開くことを可能にする。
【０１０１】
ステップ５０２は、メタデータを処理し、確認応答をプライマリ・ノードに返送するためのものであり、プライマリ・ノードは、プライマリ・ノード・チェックポイント・イメージと、プライマリ・ノードにおいて実行されるトランザクションに対応するＲＥＤＯトランザクションとを受信する準備ができている。
【０１０２】
ステップ５０３は、ページ・タイプがチェックポイント・イメージからのものである場合、ステップ５０３．１に分岐するためのものである。そうではなく、文書タイプがＲＥＤＯトランザクションタイプである場合、ステップはステップ５０３．２に進む。バックアップ・ノードは、ページを受信すると、例えば、行、必要な情報、テーブルＩＤおよびトランザクションＩＤを抽出し、行を自身のローカル・データベースに挿入することによって、ページをリストアする。バックアップ・ノードはリストアした全てのページを、これらをインデックスに挿入することによって追跡する。
【０１０３】
ステップ５０３．１は、テーブルＩＤ、トランザクションＩＤを抽出し、行およびインデックスを挿入してバックアップ・データベースを構築するためのものである。次に、ステップ５０５に進む。
【０１０４】
ステップ５０３．２は、テーブルＩＤおよびトランザクションＩＤを抽出するためのものであり、次に、ステップ５０３．３に進む。
【０１０５】
ステップ５０３．３は、ページがリストアされた場合に５０４Ｂ１に分岐し、ページがリストアされていない場合にステップ５０４Ａ１に分岐するためのものである。
【０１０６】
ステップ５０３Ａ１は、ロックを用いてページがリストアされ得る場合にステップ５０３Ａ２に分岐し、そうでない場合にステップ５０４Ｂ１に分岐するためのものである。
【０１０７】
ステップ５０３Ａ２は、全てのロックを取得し、それらが全て取得されるとステップ５０４Ｂ１に分岐するためのものである。ページがリストアされていない場合、実行は必要なロックが取得されるところまでしか進むことができない。実行は、対応するページがリストアされるまで待機する。リストアの実装形態がロックを用いる場合、ＲＥＤＯトランザクション動作は、ページのリストアが完了するまで、ロックを用いずに待機しなくてはならない。そうではなく、ページがリストアされた場合、ＲＥＤＯトランザクションは通常通り実行することができる。通常のＨＳＢ動作においてＲＥＤＯトランザクションを並列に実行することが可能である場合、これは同期中にも可能である。
【０１０８】
ステップ５０４Ｂ１は、ＲＥＤＯトランザクションの並列実行のためのものである。バックアップ・ノードは、ＲＥＤＯトランザクションを受信すると、そこから必要な情報（例えば、テーブルＩＤおよびトランザクションＩＤ）を抽出し、対応するページがリストアされているか否かをチェックする。
【０１０９】
ステップ５０４Ｂ２は、プライマリ・ノードがバックアップ・ノードに、チェックポイントが完了したことを通知する場合、ステップ５０３に分岐するためのものである。そうではなく、通知がない場合、ステップ５０５に進む。
【０１１０】
ステップ５０５は、ページＩＤを抽出し、確認応答するためのものである。バックアップ・ノードは、チェックポイントがプライマリによって完全に送信されたという通知を受信すると、この通知からページＩＤを抽出する。ページが完全にリストアされると、バックアップ・ノードは、プライマリ・ノードに、チェックポイント・イメージが受信されたことを確認応答する。
【０１１１】
ステップ５０６は、ローカル・コミット・プロトコルから分散コミット・プロトコルに切り替えることによって通常の手順に戻るためのものである。
【０１１２】
次に、本発明の更なる実施形態を説明する。
【０１１３】
好ましい実施形態の論理プロセス・ステップの全てまたは一部が、代替的に、本方法の論理プロセス・ステップを実行するように構成された論理要素を含む１つまたは複数の論理装置において具現化され得ること、および、そのような論理要素が、ハードウェア・コンポーネント、ファームウェア・コンポーネントまたはそれらの組合せを含むことができることが当業者には明らかであろう。
【０１１４】
好ましい実施形態の論理コンポーネントの全てまたは一部が、代替的に、本方法のステップを実行するための論理要素を含む論理装置において具現化され得ること、および、そのような論理要素が、例えば、プログラマブル論理アレイまたは特定用途向け集積回路における論理ゲート等のコンポーネントを含むことができることも当業者には等しく明らかであろう。そのような論理構成は、そのようなアレイまたは回路において、例えば、固定搬送媒体または伝送可能な搬送媒体を用いて記憶または伝送され得る仮想ハードウェア記述子言語を用いて、論理構造を一時的にまたは永続的に確立するための要素を可能にする際に更に具現化され得る。
【０１１５】
更なる代替の実施形態では、本発明は、コンピュータ・インフラストラクチャに展開され、そこで実行されると、コンピュータ・システムに本方法の全てのステップを実行させるように動作可能なコンピュータ・プログラム・コードを展開するステップを含む、サービスを展開するコンピュータ実施方法の形態で実現することができる。
【０１１６】
本方法および好ましい実施形態のコンポーネントは、代替的に、並列ソフトウェアを実行するための２つ以上のプロセッサを含む並列コンピューティング・システムにおいて完全にまたは部分的に具現化され得ることが理解されよう。
【０１１７】
図９を参照すると、データベースを並列に処理するためのホット・スタンバイ・データベース・システムの並列な組を含む例示的な並列コンピューティングの実施形態１０Ｐが説明されている。好ましい実施形態は、分散データベース環境における単一のプロセッサ・サーバにおける展開であるが、別の実施形態は、分散データベース環境における並列なプロセッサ・サーバにおいて実施され得る。並列なホット・スタンバイ・データベース・システム１０Ｐは、並列プログラム・モジュール等の並列なコンピュータ・システム実行可能命令が並列コンピューティング・システム１０Ｐによって実行される一般的な文脈において説明される。通常、並列プログラム・モジュールは、特定のタスクを実行するか、特定の抽象データ・タイプを実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造を含むことができる。並列ホット・スタンバイ・データベース・システム１０Ｐは、並列コンピュータ・サーバ１２Ａおよび１２Ｂを備える。直接接続またはネットワークが、並列コンピュータ・サーバ１２Ａおよび１２Ｂ間のアクセスを提供する。
【０１１８】
並列コンピュータ・サーバ１２Ａは、ＣＰＵ２２ＡＡ、ＣＰＵ２２ＡＢと、ネットワーク・アダプタ２４Ａと、バス２８Ａおよびメモリ３０Ａとを備える。同様に、並列コンピュータ・サーバ１２Ｂは、ＣＰＵ２２ＢＡ、ＣＰＵ２２ＢＢと、ネットワーク・アダプタ２４Ｂと、バス２８Ｂおよびメモリ３０Ｂとを備える。
【０１１９】
バス２８Ａおよびバス２８Ｂは、メモリ・バスまたはメモリ・コントローラと、周辺バスと、アクセラレイテッド・グラフィックス・ポートと、多岐にわたるバス・アーキテクチャのうちの任意のものを用いるプロセッサまたはローカル・バスとを含む、任意のいくつかのタイプのバス構造のうちの１つまたは複数を表す。
【０１２０】
メモリ３０Ａおよび３０Ｂは、揮発性メモリ３２Ａおよび３２Ｂ（ランダム・アクセス・メモリおよびキャッシュ・メモリ（図示せず）等）の形態、ならびに不揮発性メモリまたは永続メモリ３４Ａおよび３４Ｂの形態のコンピュータ・システム可読媒体を含む。
【０１２１】
永続メモリ３４Ａは、少なくとも２つのデータベース１００ＡＡおよび１００ＡＢと、レプリケータ・モジュール２００Ａとを備える。実行中、レプリケータ・オブジェクト２００ＡＡおよび２００ＡＢと、対応するデータベース１００ＡＡ’および１００ＡＢ’は、揮発性メモリ３２Ａ内のそれぞれのメモリ空間３３ＡＡおよび３３ＡＢ内でインスタンス化される。
【０１２２】
同様に、永続メモリ３４Ｂは、少なくとも２つのデータベース１００ＢＡおよび１００ＢＢと、レプリケータ・モジュール２００Ｂとを備える。実行中、レプリケータ・オブジェクト２００ＢＡおよび２００ＢＢと、対応するデータベース１００ＢＡ’および１００ＢＢ’は、揮発性メモリ３２Ｂ内のそれぞれのメモリ空間３３ＢＡおよび３３ＢＢ内でインスタンス化される。
【０１２３】
永続メモリ３４Ａおよび３４Ｂはまた、対応するオペレーティング・システムと、１つまたは複数のアプリケーション・プログラムと、データベース管理システムと、他のプログラム・モジュールとを記憶する。オペレーティング・システム、１つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュールおよびプログラム・データのそれぞれまたはそれらの何らかの組合せは、ネットワーキング環境の実施を含むことができる。レプリケータ・モジュール２００Ａおよび２００Ｂは、並列環境において、実施形態の機能または方法あるいはその両方を実行するように提供される。
【０１２４】
データベースおよびレプリケータ・モジュールは、並列な実施形態の自律的部分である。動作時に、これらの２つのタイプのモジュールが永続メモリ３４Ａおよび３４Ｂから抽出され、揮発性メモリ３２Ａおよび３４Ｂにロードされ、それによって、それらを別個に実行することができ、したがってそれぞれのＣＰＵ（ＣＰＵ２２ＡＡ、２２ＡＢ、２２ＢＡ、２２ＢＢ）によって並列に実行することができる。
【０１２５】
この例において、サーバあたり２つのＣＰＵが示されているが、任意の数のＣＰＵを用いて代替的な並列な実施形態を構築することができる。この例において、２つの別個のＣＰＵが用いられるが、複数のコアを有する単一の処理装置を用いて代替的な実施形態を構築することができる。
【０１２６】
この並列な実施形態では、ＣＰＵは物理的なＣＰＵであるが、代替的な実施形態では、仮想的なＣＰＵをシミュレートすることができる。仮想並列コンピューティングの実施形態では、コンピュータ・サーバは、仮想コンピューティング環境を備え、仮想並列処理装置を用いて仮想並列コンピューティングの実施形態を構築することができる。コンピュータ・サーバは、複数の仮想コアを備えた仮想処理装置を有する仮想コンピューティング環境を備える。
【０１２７】
更なる実施形態は、実際の処理装置と、実際の処理装置コアと、仮想処理装置と、仮想並列処理コアとの任意の組合せを含むことができる。
【０１２８】
当業者であれば、本発明の範囲から逸脱することなく、上記の例示的な実施形態に対し多くの改善および変更を行うことができることが明らかとなるであろう。
【図１】
0006362685.tif 000002
【図２】
0006362685.tif 000003
【図３】
0006362685.tif 000004
【図４】
0006362685.tif 000005
【図５】
0006362685.tif 000006
【図６】
0006362685.tif 000007
【図７】
0006362685.tif 000008
【図８】
0006362685.tif 000009
【図９】
0006362685.tif 000010