(57)【特許請求の範囲】
【請求項１】
リポジトリに記憶されているデータを最新の論理状態の前である第１の論理状態に戻す方法であって、前記リポジトリに記憶されている前記データの前記第１の論理状態は、第１の時点において存在していたものであり、前記方法は、コンピュータシステムの１つ以上のプロセッサによって実行され、前記データを前記第１の論理状態に戻すことは、コンピュータで実行される以下のステップを含み、前記以下のステップは、
前記リポジトリにおけるデータを持続的に記憶する１つ以上のブロックに第１の取消しを適用するステップを含み、前記第１の取消しは、物理的な取消しであり、
１つ以上のブロックはリポジトリにおけるすべてのブロックの部分集合であり、
前記物理的な取消しは、記憶の単位である前記１つ以上のブロックを、前記最新の論理状態の前にある第２の論理状態に戻すのに必要な情報を含み、
前記物理的な取消しは、前記第２の論理状態の第２の時点において、前記１つ以上のブロックのコピーを含み、
物理的な取消しの適用によって、前記１つ以上のブロックの各々は前記第２の論理状態を反映し、前記以下のステップはさらに、
前記物理的な取消しを適用するステップの後に、第２の取消し、または、前記第２の論理状態を反映する前記１つ以上のブロックの部分集合に存在する論理的なデータ項目に対するやり直し、の少なくとも１つを適用して、前記論理的なデータ項目を、前記第１の時点における前記１つ以上のブロックの部分集合に存在する論理的なデータ項目に反映させるステップを含み、
前記第２の取消しは、前記論理的なデータ項目になされた変更の取消しの仕方に関する情報を含み、前記やり直しは、前記論理的なデータ項目への変更の再実行の仕方に関する情報を含む、方法。
【請求項２】
物理的な取消しを適用する前記ステップは、物理的な取消しの記録を、前記コンピュータシステムの複数のプロセスに割当てるステップを含み、
前記複数のプロセスは、前記物理的な取消しの記録を互いに対して平行に適用する、請求項１に記載の方法。
【請求項３】
物理的な取消しを適用する前記ステップは、前記リポジトリにおけるブロックに前記第１の時点よりも前の時間を反映させ、
第２の取消しまたはやり直しのうちの少なくとも１つを適用する前記ステップは、前記論理的なデータ項目が前記第１の時点において存在していたときに前記論理的なデータ項目を反映するために、前記論理的なデータ項目を修正するための前記やり直しを適用するステップを含む、請求項１に記載の方法。
【請求項４】
第２の取消しまたはやり直しのうちの少なくとも１つを適用する前記ステップは、前記やり直しを適用した後に、前記第１の時点にまたはそれよりも前に行なわれなかったトランザクションによってなされた変更を前記論理的なデータ項目の少なくとも一部から除去するために、前記第２の取消しを適用するステップを含む、請求項３に記載の方法。
【請求項５】
前記物理的な取消しは、第１の物理的な取消しと、第２の物理的な取消しとを含み、
前記第１の物理的な取消しは、特定の時点に対応するゲートに関連付けられており、前記ゲートは、物理的な取消しが生成される特定の時点であり、
前記第２の物理的な取消しは、前記ゲートの前に来る先行するゲートに関連付けられており、
前記物理的な取消しを前記１つ以上のブロックに適用する前記ステップは、
前記１つ以上のブロックの第１の組に、前記第１の物理的な取消しを適用するステップを含み、
前記１つ以上のブロックの第２の組に、前記第２の物理的なやり直しを適用するステップを含む、請求項１に記載の方法。
【請求項６】
前記第１のおよび第２の物理的な取消しを適用する前に、
前記先行するゲートの後になされた必ずしもすべてではない、いくつかの先行するゲート後の最初の更新のための前記第２の物理的な取消しを生成するステップと、
物理的な取消しが前記先行するゲートの後に生成された、ブロックに対してなされた更新を除く、前記ゲートの後になされたすべてのゲート後の最初の更新のための前記第１の物理的な取消しを生成するステップとをさらに含む、請求項５に記載の方法。
【請求項７】
前記先行するゲート後の最初の更新が行なわれると、前記コンピュータシステムのリソースの可用性に基づいて先行するゲート後の最初の更新のための第３の物理的な取消しを生成するかどうかを決定するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記物理的な取消しを適用する前に、
特定の時点と関連したゲートに基づいて前記物理的な取消しを生成するステップと、
ログにおける一連の記録として前記物理的な取消しを、前記コンピュータシステムに記憶するステップと、
前記ゲートを前記ログにおける位置に関連付けるデータを、前記コンピュータシステムに記憶するステップとをさらに含む、請求項１に記載の方法。
【請求項９】
前記ゲートを前記ログにおける位置と相互に関連付けるデータを記憶する前記ステップは、前記ゲートの各ゲートにつき前記ログ内にゲートマーカを記憶するステップを含む、請求項８に記載の方法。
【請求項１０】
前記リポジトリを前記ゲートに関連付けられた前記論理状態に戻すために、前記ログにおけるどの記録を処理するかを決定するために、ゲートに関連付けられた前記ゲートマーカを用いるステップをさらに含む、請求項９に記載の方法。
【請求項１１】
前記ゲートマーカはやり直しログにおける位置を示すデータを含み、
前記方法は、前記やり直しログにおけるどのやり直しを処理するかを決定するために、前記やり直しログにおける前記位置を用いるステップをさらに含む、請求項９に記載の方法。
【請求項１２】
前記ゲートマーカは、前記ログにおける位置を示すデータを含み、
前記方法は、前記ログにおけるどのエントリを処理するかを決定するために前記ログにおける前記位置を用いるステップをさらに含む、請求項９に記載の方法。
【請求項１３】
各ゲートマーカ内に前記ログにおける前のゲートマーカへのリンクを記憶するステップをさらに含む、請求項９に記載の方法。
【請求項１４】
複数のデータベースサーバは前記リポジトリにアクセスすることが可能であり、
前記複数のデータベースサーバの各データベースサーバは、他のデータベースサーバによって維持される他のログに対して別個であって、かつ前記リポジトリに存在する前記ブロックの少なくとも一部のための物理的な取消し情報を含むログを維持する、請求項１に記載の方法。
【請求項１５】
前記物理的な取消しを適用する前に、以下のステップを実行することによってゲートを設定するステップをさらに含み、前記以下のステップは、
前記複数のデータベースサーバのうちの１つをコーディネータに指定するステップと、
前記コーディネータに、ログの開始メッセージを前記複数のデータベースサーバの互いに送信させるステップと、
すべての更新のための物理的な取消しを生成することによって互いのデータベースサーバを前記ログの開始メッセージに応答させるステップと、
前記ログの開始メッセージを送信した後で、前記コーディネータにゲート設定のメッセージを前記複数のデータベースサーバの互いに送信させるステップと、
ゲート後の最初の更新のための物理的な取消しを生成することのみによって、互いのデータベースサーバを前記ゲート設定のメッセージに応答させるステップとを実行することによってゲートを設定するステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
互いのデータベースサーバは、応答を前記コーディネータに送信することによって前記ログの開始メッセージに応答し、
前記コーディネータは、前記他のデータベースサーバのすべてのための応答を受信した後で前記ゲート設定のメッセージを送信する、請求項１５に記載の方法。
【請求項１７】
互いのデータベースサーバによって送信された前記応答は、前記データベースサーバの別々のログ内の位置を示し、
前記コーディネータは、前記ゲートを位置の情報に関連付けるデータを記憶し、
前記位置の情報は、前記互いのデータベースサーバから受信された前記応答で示された前記位置を識別する、請求項１６に記載の方法。
【請求項１８】
前記ゲートを位置情報に関連付けるデータを記憶する前記ステップは、前記コーディネータの別々のログ内に前記ゲートのためのマーカを記憶するステップを含み、前記マーカは前記互いのデータベースサーバから受信された前記応答において示された前記位置へのリンクを含む、請求項１７に記載の方法。
【請求項１９】
リポジトリに記憶されているデータを前の状態に復元するための方法であって、前記方法は、コンピュータシステムの１つ以上のプロセッサによって実行され、
第１の時点に関連付けられた、先行するゲートを設定するステップと、
前記リポジトリにおけるブロックに対してなされた必ずしもすべてではない、いくつかの先行するゲート後の最初の更新のための第１の物理的な取消しを生成するステップとを含み、各ブロックは記憶の単位であり、
前記第１の時点よりも遅い第２の時点に関連付けられるゲートを設定するステップと、
物理的な取消しが前記先行するゲートのために生成されたブロックに対してなされた更新を除く、前記リポジトリに記憶されているブロックに対してなされたすべてのゲート後の最初の更新のための第２の物理的な取消しを生成するステップと、
前記リポジトリを以下のステップを行なうことによって少なくとも前記第２の時点と同じくらい昔の状態に復元するステップとを含み、以下のステップは、
前記リポジトリのブロックの第１の組を前記第２の時点に先行する時間に復元するために前記先行するゲートに関連付けられる前記第１の物理的な取消しを用いるステップと、
前記リポジトリのブロックの第２の組を前記第２の時点に復元するために前記ゲートに関連付けられる前記第２の物理的な取消しを用いるステップとを含む、方法。
【請求項２０】
前記先行するゲート後の最初の更新が行なわれると、前記コンピュータシステムのリソースの可用性に基づいて先行するゲート後の最初の更新のための物理的な取消しを生成するかどうかを決定するステップをさらに含み、前記決定するステップは、第１の物理的な取消しを生成する前記ステップの前に行なわれる、請求項１９に記載の方法。
【請求項２１】
１つ以上のプロセッサによって実行されるときに、１つ以上のプロセッサに請求項１から２０のいずれか１つに記載の方法を実行させる１つ以上のシーケンスの命令を記憶した、コンピュータが読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、データ管理システムに関し、より特定的に１組のデータを前の状態に復元するための技術に関する。
【背景技術】
【０００２】
発明の背景
コンピュータを使用するときに生じるおそれがあるさまざまな問題がある。エラーの２つの一般的なカテゴリは、コンピュータがもたらすエラーと、オペレータがもたらすエラーとを含む。これらの２種類のエラーは性質が異なるために、コンピュータがもたらすエラーから回復するように設計された技術を必ずしも人間のオペレータがもたらすエラーから回復するために使用することができない。
【０００３】
たとえば、（ノードまたはプロセスの故障等の）コンピュータがもたらしたエラーの後でデータベースを回復するために用いられる１つの技術は、動作のログの維持を含む。具体的には、やり直しログを維持して、故障の前に行なわれたトランザクションによって揮発性メモリにおいてなされる変更を、故障の後にデータベースにとって持続的なものにすることができる。同様に、取消しログを維持して、故障の前に行なわれなかったトランザクションによって持続的にされた変更を、故障の後にデータベースから除去することができる。
【０００４】
先述のログベースの回復技術は、オペレータがもたらすエラーの問題には対処しない。なぜなら、これらのエラーは、行なわれたトランザクションによってなされた変更に反映され得るからである。人間のエラーを反映する、行なわれたトランザクションの後にコンピュータがもたらすエラーが続くときでさえも、ログベースの回復動作は、単にこれらの誤って行なわれた変更がコンピュータがもたらしたエラーからの回復の後でもデータベースに反映され続けるということを保証するだけである。したがって、コンピュータがもたらすエラー回復技術は、正しく行なわれた変更と誤って行なわれた変更との間ではなく、行なわれた変更と行なわれていない変更との間を区別する傾向がある。
【０００５】
コンピュータがもたらすエラーの回復技術とは対照的に、オペレータがもたらすエラーの回復技術は、行なわれた変更および行なわれていない変更の双方をデータベースから除去することに焦点を当てる。具体的に、オペレータがもたらすエラーの回復技術は、典型的に、過去における特定の時点（好ましくはオペレータがもたらすエラーを組込んだトランザクションの実行時間の前）に存在した一貫した状態へとデータベースを戻すことに焦点を当てる。たとえば、１つのオペレータがもたらしたエラーの回復技術は、特定の時点でデータベースのバックアップを行なうことを含む。オペレータがもたらすエラーがその時よりも後で導入されるときに、このエラーは、データベースのバックアップコピーに復元することによって「除去」され得る。
【０００６】
もちろん、データベース管理者は、オペレータがもたらしたエラーが導入される前の時間を知っていることはほとんどない。最後のバックアップ動作とエラーの時間との間でかなりの時間が経っていれば、バックアップデータベースに復元して、さらに続いて起こった変更のすべてを当該エラーの前以外のバックアップ動作に再び適用することは、非常に非実用的であり非効率的であるおそれがある。
【０００７】
別の技術は、その状態が主要なデータベースに対して遅延される「ミラー」データベー
スを維持することを含む。ユーザがもたらすエラーの場合、ミラーデータベースに復元することができる。しかしながら、エラーを発見するのにかかる時間が遅延の長さよりも長い場合に、遅延されたミラーさえもエラーを反映する。さらに、長い遅延はエラーが時間内に捕えられる機会を向上させる一方で、それはミラーへのフェールオーバーに関連した非効率性を増加させる。
【０００８】
さまざまな遅延されたミラー技術は、多数の遅延されたミラーデータベースを維持することを含み、各ミラーデータベースは異なる遅延の長さを有する。異なる遅延を有する多数のミラーを使用することによって、少なくとも１つのミラーが、エラー時の前の状態およびエラー時から間もない状態を表わす可能性を増す。しかしながら、このようなミラーの維持は、この目的のために利用可能であり得るよりも多くのリソースを消費する。
【０００９】
代替の技術は、「スナップショット」をサポートする記憶サブシステム上にデータベースを記憶し、さらにサブシステムのスナップショット機構を用いてエラーに先行するスナップショット時間に記憶サブシステムを復元することを含む。たとえば、記憶サブシステムは、Ｔ５の特定の「スナップショット時間」を確立し得る。Ｔ５の後で、サブシステムにおけるブロックへの各々の変更は、（１）ブロックがＴ５の後で既に変更されているかどうかを決定し、変更されていなければ、次に（２）ブロックへの変更を行なう前にサブシステムからブロックの変更前のバージョンを読出してそれをＴ５のスナップショットに関連付けられた特別な分離した「スナップショット記憶装置」へとコピーすることによって処理される。この技術を用いると、記憶サブシステムにおける対応するブロック上のＴ５のスナップショット記憶装置からブロックをコピーすることによって、記憶サブシステムをそれが時間Ｔ５に存在した状態に戻すことができる。
【００１０】
さらに、記憶サブシステムをその前の状態に復元することなく、プロセスおよびトランザクションが特定のブロックを見たいときに以下のことを行なうことによって、時間Ｔ５の時点でのサブシステムの状態を見ることができる。以下のこととは、（１）特定のブロックのコピーがＴ５のスナップショット記憶装置にある場合に、Ｔ５のスナップショット記憶装置から特定のブロックのコピーを提供すること、および（２）Ｔ５のスナップショット記憶装置にブロックのコピーがないときのみに、記憶サブシステムから特定のブロックのコピーを提供することである。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
スナップショットの技術は正確な結果をもたらすが、これを行なうにはすべての書込動作に潜在的にかなりの量のオーバーヘッドを課すことになる。具体的には、任意のスナップショット時間の後で任意のブロックへの第１の更新が行なわれると同時に、ブロックの更新前の画像が読み出され、次に適切なスナップショット記憶装置へと書出される。さらに、データベース管理者が記憶サブシステムを前の状態に戻さなければならないときに、管理者はスナップショット時間が明示的に確立された状態のみに制限される。
【００１２】
オペレータがもたらしたエラーは、生理的な取消しを使用することによって容易に除去されないエラーの一種に過ぎない。たとえば、論理的なデータ破損から回復しようとするときに困難が生じ得る。たとえば、やり直しが再び適用された場合、このような破損は、オペレータがもたらしたエラーと同様に単に「再生」され得る。
【００１３】
上記に基づいて、このセクションで説明されたアプローチに内在する効率の問題またはリソースの消費問題を被らない態様で再生可能なエラーから回復するための機構および技術が提供されることが明らかに望ましい。
【課題を解決するための手段】
【００１４】
このセクションに記載されたアプローチは、追及することのできるアプローチであるが、必ずしも以前に考えられたまたは追跡されたアプローチではない。したがって、特に示されない限り、このセクションに記載されたアプローチのいずれも単にこのセクションに含まれることによって先行技術として制限するものと考えられるべきではない。
【００１５】
本発明は、制限によってではなく例示によって、添付の図面の図において示され、図面では同じ参照数字は同様の要素を指す。
【発明を実施するための最良の形態】
【００１６】
発明の詳細な説明
リポジトリを前の状態に復元するための技術が記載される。以下の説明において、説明のために、複数の特定の詳細が述べられ、本発明を完全に理解してもらえるようにする。しかしながら、本発明は特定の詳細なしで実践され得ることは明らかである。他の例において、公知の構造および装置は、本発明を不必要に分かりにくくするのを避けるためにブロック図の形態で示されている。
【００１７】
機能の概要
リポジトリを前の状態に戻すための技術がここに記載される。一実施例に従うと、リポジトリはデータベースであり、前の状態とは、データベースが過去における特定の時点に有した一貫した状態である。具体的に、前の状態とは、データベースが特定の時点よりも前に行なわれたトランザクションによってなされたすべての変更を反映する状態であり、特定の時点よりも前に行なわれなかったトランザクションによってなされた変更は反映されない。別の実施例において、リポジトリはディスク上の１つ以上のファイルである。
【００１８】
オペレータがもたらしたエラーが既に行なわれたトランザクションによってなされた変更によってデータベースに導入されるときに、本明細書に記載された技術を用いて、データベースを、エラーを導入したトランザクションの実行時間の前の時点に戻すことによってエラーから回復され得る。技術は、「物理的な取消し」の情報の生成を含み、生理的な取消しおよび生理的なやり直しと関連する物理的な取消し情報を用いてリポジトリを前の状態に効率的に戻す。
【００１９】
物理的な取消し
物理的な取消しは、記憶の単位を前の状態に戻すのに必要な情報を含む。「ブロック」という用語は、本明細書では物理的な取消しを維持するために微少の単位として扱われる記憶の単位のことを指す。本明細書に記載された技術は、いかなる特定のサイズまたは細分性のブロックにも制限されない。
【００２０】
一実施例に従うと、ブロックの物理的な取消しはブロックの更新前の画像である。更新されたブロックの更新前の画像を用いて、単に更新されたブロックをブロックの更新前の画像に重ね書きすることによって、更新されたブロックを更新前の状態に戻すことができる。しかしながら、更新前の画像は、記憶の単位を前の状態に戻すために用いることができる情報の一形態に過ぎず、本明細書に記載された技術はいかなる特定の形態の物理的な取消しにも制限されない。
【００２１】
本明細書に記載された技術を用いると、更新されたブロックをディスクに書込むすべての動作は、ブロックの更新前の画像を得るためにディスク読取動作の追加のオーバーヘッドを受けない。むしろ、更新がデータベースサーバによって行なわれるときに、データベースサーバは通常、揮発性メモリにおけるブロックのコピーを既に有している。したがって、物理的な取消しの生成は、単に、第１のコピーを更新する前に揮発性メモリにおける
ブロックの第２のコピーを作成することを含み得る。以下でより詳細に記載されるように、第２の更新前のコピーは、後で、しかしながらブロックの更新された画像がディスクにフラッシュされる時点までに、ディスクにフラッシュされる。
【００２２】
生理的な取消し
生理的な取消しは、論理情報の個々の情報を前の状態に復元するのに必要な情報を含む。たとえば、リレーショナルデータベースシステム内で、テーブルの行が更新された場合に、生理的な取消しの記録が生成され得る。このシナリオにおいて、生理的な取消しの記録は、行をその更新前の状態に戻すための情報を含むが、更新された行と同じデータブロック上に存在し得る他のデータアイテムの状態に関する情報を有さないかもしれない。
【００２３】
生理的な取消しと比較して、物理的な取消しは利点を有する。物理的な取消しの適用例は常に成功する。なぜなら、それは前に適用される画像に関するいかなる仮定も要求しないからである。したがって、物理的な取消しは論理データの破損から常に戻ることができる。一方で、前に適用される画像が自己矛盾していない場合に生理的な取消しの適用例は失敗し得る。ブロックは、メモリの破損、ソフトウェアにおけるバグ等のために自己矛盾しているかもしれない。
【００２４】
生理的なやり直し
生理的な取消しと同様に、生理的やり直しは論理的なデータ項目への変更に関する情報を記憶する。しかしながら、生理的な取消しが論理的なデータ項目への変更を取消す方法についての情報を記憶する一方で、生理的なやり直しは論理的なデータ項目への変更を再び実行する方法についての情報を記憶する。特に、生理的なやり直しを用いて、行なわれたトランザクションによってなされた変更を再び実行し、これらの変更は、コンピュータがもたらしたエラーが生じた時点ではまだ持続的な記憶装置に記憶されていない。
【００２５】
多くのデータベースシステムは、上述のように、コンピュータがもたらしたエラーから回復するために生理的な取消しおよびやり直しを維持する。生理的なやり直しおよび取消し機構の例は、「改善されたトランザクションリカバリのための方法および装置」（“Method and Apparatus For Improved Transaction Recovery”）と題された米国特許第５，８５０，５０７号に記載され、その内容は引用により援用される。しかしながら、本明細書に記載された技術は、生理的なやり直しおよび取消しを維持するためのいかなる特定の機構にも制限されない。
【００２６】
二段階の回復
本発明の一実施例に従うと、リポジトリは、ここで「物理的な回復段階」および「生理的な回復段階」と称される２つの段階における前の状態に戻される。たとえば、ユーザがリポジトリを特定の時点（「目標時間」）に存在した状態に復元することを望んでいると想定する。物理的な回復段階の間に、物理的な取消しを用いてリポジトリに関連付けられたすべてのディスクブロックをある時点の物理的な状態（「物理的な回復時間」）に戻す。生理的な回復段階の間に、生理的なやり直しおよび取消しを用いて、リポジトリ内の論理情報をその物理的な回復状態から目標時間に関連付けられた一貫した状態へと移動させる。
【００２７】
なお、物理的な回復時間が目標時間であったとしても、生理的な回復段階は、ブロック内の論理データを一貫した状態に戻すためにまだ必要があるかもしれない。たとえば、時間Ｔ５で、所与のブロックは、（１）時間Ｔ５の時点で行なわれなかったトランザクションによってなされた変更を含み、（２）Ｔ５の前に行なわれたトランザクションによってなされた変更を欠いているかもしれない。したがって、時間Ｔ５でブロックをその物理的な状態に戻すことによって、必ずしもブロック上にある論理的なデータ項目を時間Ｔ５の
一貫した状態に戻せるとは限らない。したがって、生理的なやり直しを用いて、Ｔ５よりも前に行なわれたトランザクションによってなされた変更を、欠いているブロックのＴ５の画像に追加する。同様に、生理的な取消しを用いて、時間Ｔ５の時点で行なわれなかったトランザクションによってなされたいかなる変更もブロックのＴ５の物理的な画像から除去する。
【００２８】
ゲート
一実施例に従うと、リポジトリを管理するシステムは、物理的取消しを生成する、ここで「ゲート」と称される時間における特定の点を確立する。説明のために、リポジトリはデータベースであると考える。このような実施例において、リポジトリを管理しかつゲートを確立するシステムはデータベースサーバである。
【００２９】
ゲートのために生成された物理的な取消しを用いて、リポジトリを記憶するブロックを、それらがゲートに関連した時間に存在した物理的状態に戻す。たとえば、ゲートＧ１が時間Ｔ５につき確立された場合、ゲートＧ１のために生成された物理的な取消しは、ブロックを、それらが時間Ｔ５にまたはその前に存在した物理的状態に戻すための情報を有する。一実施例において、Ｇ１のための物理的な取消しは、Ｔ５の後に更新されたすべてのブロックの更新前の画像を含む。ブロックの更新前の画像は、更新がブロックに記憶された複数の論理的データ項目のうちいの１つを変更しただけでも、ブロックにおけるデータのすべてを含む。したがって、リポジトリのブロックは、単にブロックの更新されたバージョンをその対応する更新前の画像に重ね書きすることによって、Ｔ５の物理的状態に戻され得る。
【００３０】
一実施例に従うと、ゲートのための物理的やり直しは、それらがゲートと関連した時間の後で、最初に更新されるときにブロックの更新前の画像を記憶することによって確立される。具体的には、（１）ゲート時間の後に（２）ゲート以降、前に更新されていないいかなるブロックになされたいかなる更新にも応答して、更新前の画像が生成される。このような更新は、ここでは「ゲート後の最初の更新」と呼ばれる。
【００３１】
たとえば、時間Ｔ５に関連付けられたゲートＧ１について考察する。ブロックがＴ５の後に更新されると考える。ブロックがＴ５の後で既に更新されている場合、更新はゲートの後の最初の更新ではなく、更新に応じて物理的な取消しはＧ１のために生成されない。一方で、ブロックがＴ５の後、最初に更新されている場合、更新はゲート後の最初の更新となり、ブロックの更新前の画像はゲートＧ１の物理的取消しとして生成される。
【００３２】
さまざまな技術を用いて、どの更新がゲート後の最初の更新として分類されるかを識別し得る。たとえば、タイムスタンプは、各ブロックのヘッダに配置されてブロックが最後に更新されたときを示す。更新されているブロックのブロックヘッダにおけるタイムスタンプがゲートのタイムスタンプよりも高い場合に、一部のプロセスはゲートの後で少なくとも１度ブロックを既に更新しているため、現在の更新はゲート後の最初の更新とならないようにする。一方で、更新されているブロックのブロックヘッダにおけるタイムスタンプがゲートのタイムスタンプよりも低い場合、現在の更新はゲート後の最初の更新である。代わりに、データは揮発性メモリに記憶されてどのブロックが最も最近のゲート以降既に更新されているかを示すことができる。本発明は、どの更新がゲート後の最初の更新として適しているかを識別するためのいかなる特定の技術にも制限されない。
【００３３】
フラッシュバックログ
一実施例に従うと、ゲートのための物理的な取消しの記録が「フラッシュバックログ」におけるエントリとして記憶される。以下でより詳細に説明するように、単一のフラッシュバックログを用いて、多くのゲートに関連付けられた更新前の画像を記憶することがで
き、ここでマーカを用いて、フラッシュバックログにおける位置を特定のゲートと相互に関連付ける。
【実施例１】
【００３４】
図１ａはシステム１００を示しており、これを参照して本発明の一実施例に従った物理的な取消しを管理するための技術を説明する。図１ａを参照すると、システム１００は揮発性メモリ１０２および不揮発性メモリ１０４を含む。不揮発性メモリ１０４は、データを記憶するためのリポジトリ１１２を含む。リポジトリ１１２は、たとえば、データベースサーバによって管理されるデータベースであってもよく、本明細書に記載された、物理的な取消しを管理、維持および使用するための動作が、データベースサーバ内のプロセスによって自動的に行なわれ得る。しかしながら、本明細書に記載された技術は、前の状態に戻されなければならないリポジトリのいかなる種類にも適用可能であるため、従来のデータベースサーバの文脈には制限されない。
【００３５】
リポジトリ１１２に加えて、不揮発性メモリ１０４はフラッシュバックログ１０６を含む。フラッシュバックログ１０６はエントリ（たとえばエントリ１４０、１４２、１４４）を記憶し、これらのエントリは、（１）リポジトリ１１２内のブロックに対応し、かつ（２）対応するブロックを前の状態に戻すための情報を含む。一実施例に従うと、フラッシュバックログ１０６における各エントリは、リポジトリ１１２における対応するブロックの更新前の画像を含む。
【００３６】
揮発性メモリ１０２は、ブロックキャッシュ１１０とフラッシュバックログキャッシュ１０８とを含む。ブロックキャッシュ１１０は、リポジトリ１１２からのブロックのコピーを保持する。たとえば、プロセスがリポジトリ１１２のブロック１２０からデータ項目を読出すために、ブロック１２０のコピー１２２は、揮発性メモリ１０２内のブロックキャッシュ１１０にロードされる。プロセスがデータ項目を更新する場合に、更新はブロック１２０のキャッシュされたコピーに最初に反映され、不揮発性メモリ１０４に存在するブロック１２０には反映されない。
【００３７】
揮発性メモリ１０２は、ブロックキャッシュ１１０とフラッシュバックログキャッシュ１０８とを含む。ブロックキャッシュ１１０は、リポジトリ１１２からのブロックのコピーを保持する。たとえば、プロセスがリポジトリ１１２のブロック１２０からデータ項目を読み出すために、ブロック１２０のコピー１２２は揮発性メモリ１０２内のブロックキャッシュ１１０にロードされる。次にプロセスがデータ項目を更新する場合、更新は最初に、不揮発性メモリ１０４に存在するブロック１２０ではなく、ブロック１２０のキャッシュされたコピー１２２に反映される。
【００３８】
揮発性メモリ１０２はフラッシュバックログキャッシュ１０８をさらに含む。フラッシュバックログキャッシュ１０８は、作成されているが不揮発性メモリ１０４にまだフラッシュされていないフラッシュバックログエントリ（たとえばエントリ１３０、１３２および１３４）を記憶する。たとえば、ブロック１２０のコピー１２２が修正される場合に、ブロック１２０の更新前の画像を含むフラッシュバックログエントリ（たとえば図１Ｂにおけるエントリ１３６）を生成するために必要であり得る。フラッシュバックログエントリは、最初にフラッシュバックログキャッシュ１０８に記憶され、次に、後で不揮発性メモリ１０４のフラッシュバックログ１０６へフラッシュされる。図１Ｃにおいて、エントリ１４６は、エントリ１３６が不揮発性メモリ１０４にフラッシュされていることに応答して、フラッシュバックログ１０６に追加される。
【００３９】
先行する物理的取消しの生成
上述の実施例において、（１）ゲートの後に（２）そのゲートの後で前に更新されてい
ないブロックに対してなされるすべての更新に応答して、フラッシュバックログエントリが生成される。残念ながら、この技術は、いかなる所与のゲートの直後に生成されなければならないフラッシュバックのログエントリの数における「スパイク」をもたらす。具体的に、ゲートを通過した直後に生じる事実上すべての更新は、ゲート後の最初の更新である。したがって、ゲートの直後で、フラッシュバックログエントリの生成を要求する更新の動作の割合は事実上１００％である。最初のスパイクの後で、フラッシュバックログエントリの生成を要求する更新の割合は減少する。なぜなら更新の多くの割合が、ゲートの後で既に更新されたブロックに対するものとなるからである。
【００４０】
一実施例に従うと、スパイクの大きさは先行する物理的な取消しの生成を行なうことによって減じられる。具体的には、フラッシュバックログエントリがゲート後の最初の更新ではない更新について生成される。むしろ、これらはゲートに関連付けられた時間の前さえもゲートのために生成される。ここで「先行するエントリ」と称されるこのようなフラッシュバックログエントリは、ゲートに到達したときに生じるスパイクを減じる。なぜなら追加のフラッシュバックのログエントリは、先行のエントリを有するブロックへのゲート後の最初の更新について生成される必要があり得るからである。
【００４１】
一実施例に従うと、先行するゲートが実際のゲートよりも先に確立される。しかしながら、実際のゲートとは異なり、先行するゲートの後でブロックに対してなされた第１の更新は、フラッシュバックエントリの生成を自動的に引起さない。むしろ、先行するゲートの後のフラッシュバックエントリの生成は最適なものではない。エントリがこれらの状況下で生成されるかどうかは、システムの作業負荷およびリソースの可用性等のさまざまな要素に基づいて決められ得る。たとえば、フラッシュバックエントリが、先行するゲートの後でなされた更新に応答して生成されるかどうかは、フラッシュバックログキャッシュ１０８においてどれだけの空間が現在利用可能であるかに基づいて決められ得る。別の例として、このシステムは、すべての先行するゲート後の最初の更新の５０％等の或る割合についてフラッシュバックエントリを単に生成し得る。これらの要素は、単にフラッシュバックエントリが先行するゲートの後の更新について生成されるかどうかを決定するために使用され得る要素の例に過ぎない。本明細書に記載された技術は、いかなる特定の組の要素にも制限されない。
【００４２】
先行するフラッシュバックエントリがゲートのために生成されたときに、先行するフラッシュバックエントリは、ゲートに関連した時間における対応するブロックの状況を反映しないかもしれない。たとえば、Ｇ１が時間Ｔ５に関連付けられ、Ｇ１のための先行するゲートが時間Ｔ３に公開されると考える。Ｔ３およびＴ５の間に生成されるすべての先行するフラッシュバックエントリは、必ずしも時間Ｔ５のブロックの状態ではなく、Ｔ３およびＴ５の間の或る時点でのブロックの状態を反映する。
【００４３】
たとえば、ブロックＢ１は時間Ｔ４で更新され得、先行するフラッシュバックエントリを生成させる。ゲートＧ１に関連付けられたフラッシュバックエントリがデータベースを時間Ｔ５に復元するために後で用いられる場合、Ｂ１のための先行するフラッシュバックエントリは実際にブロックＢ１を時間Ｔ４に復元する。したがって、先行するゲートが使用されるときに、リポジトリは物理的な回復段階の後で「ファジイ」になる。具体的に、物理的な回復段階の後で、一部のブロックが時間Ｔ５における物理的な状態を反映し、他のブロックは時間Ｔ３およびＴ５の間の物理的な状態を反映する。
【００４４】
先行するゲートの使用は、このような「ファジイさ」をもたらし得る技術の一例に過ぎない。たとえば、多数のサーバシステムについて以下に記載する二段階のブロードキャスト技術は、対応するゲートに関連付けられた時間の前の状態を反映する更新前の画像をもたらし得る。さらに、ゲートが物理的な取消しの生成と「同時に」生じると、物理的な取
消しは、ゲートに先行するタイムスタンプに割当てられ得る。しかしながら、その原因にかかわらず、すべての論理的なデータ項目が現在ある何らかの状態から目標の状態に戻されるときに、この「ファジイさ」は生理的な回復段階の間に排除される。
【００４５】
ゲートマーカ
上述のように、フラッシュバックエントリは最初にフラッシュバックキャッシュ１０８に記憶され、不揮発性メモリ１０４上のフラッシュバックログ１０６に定期的にフラッシュされる。一実施例に従うと、単一のフラッシュバックログ１０６が複数のゲートのために用いられ、（ここで「ゲートマーカ」と称される）マーカがフラッシュバックログ１０６に挿入されて、特定のゲートに関連付けられたエントリの開始を示す。
【００４６】
図２は、本発明の一実施例に従って配置されたフラッシュバックログ２００を示すブロック図である。図２を参照すると、フラッシュバックエントリがキャッシュから持続的な記憶装置にフラッシュされると、フラッシュバックログ２００は（示された実施例において左から右へ）連続して配置される。
【００４７】
一実施例に従うと、ゲートマーカはフラッシュバックログ２００に記憶されて、所与のゲートに関連付けられたフラッシュバックエントリの適用例を容易にする。示された実施例において、フラッシュバックログ２００は、時間Ｔ５００のゲートＧ５に関連付けられたゲートマーカ２０２と、時間Ｔ６００のゲートＧ６に関連付けられたゲートマーカ２０４とを含む。
【００４８】
ゲートマーカの連鎖
一実施例に従うと、フラッシュバックログ２００内のさまざまなゲートマーカを共にリンクして、これらをフラッシュバックログ内に迅速に置くようにし得る。示された実施例において、各ゲートマーカは直前のゲートマーカへのリンクを含み、制御ファイル２０６は、最も最近記憶されたゲートマーカへのリンクを含む。このような態様でリンクされると、いかなる所与のゲートマーカも、最も最近のゲートマーカへの制御ファイル２０６におけるリンクに従うことによって、次にゲートマーカ内のリンクに従って所望のゲートマーカに戻ることによって、迅速に設定することができる。たとえば、ゲートマーカ２０２を設定するために、制御ファイル２０６内のリンクを用いてゲートマーカ２０４を設定し、ゲートマーカ２０４内のリンクを用いてゲートマーカ２０２を設定する。
【００４９】
新しいゲートマーカがフラッシュバックログ２００に追加されると、ゲートマーカの連鎖は、新しいゲートマーカが制御ファイルによって現在示されたゲートマーカを指すようにして、次に制御ファイルが新しく挿入されたゲートマーカを指すようにする。たとえば、新しいゲートマーカがフラッシュバックログ２００に追加される場合、新しいゲートマーカはゲート２０４へのリンクを有し、制御ファイル２０６内のリンクは新しいゲートマーカを指すように更新される。
【００５０】
ゲートマーカの使用
一実施例に従うと、特定のゲートのためのゲートマーカはさまざまな目的を果たす。これらの目的は、（１）フラッシュバックログ内の位置に印を付けること、および（２）生理的なやり直しのログ内の位置を識別することを含む。一実施例において、フラッシュバックログ内のゲートマーカの位置は、リポジトリを、対応するゲートと関連した時間へ戻すためにフラッシュバックエントリを処理し始める場所を示している。たとえば、リポジトリを時間Ｔ５００に関連した物理的な状態に戻すために、フラッシュバックログ２００は、エントリ２２０から始まってエントリ２２８まで処理される。一方で、リポジトリを時間Ｔ６００に関連した物理的状態に戻すために、フラッシュバックログ２０４は、エントリ２２２から始まってフラッシュバックログの終わりのエントリ２２８まで処理するこ
とができる。
【００５１】
代替の実施例において、ゲートマーカそれ自体の位置というよりもゲートマーカ内のポインタを用いて、対応するゲートのためのフラッシュバックログを処理し始める位置を識別する。フラッシュバックログにおける開始位置を示すためにポインタを用いることによって、ゲートマーカそれ自体がフラッシュバックログへと記憶されるシーケンスは、それほど重要ではない。たとえば、時間Ｔ５００に関連したゲートＧ１は、フラッシュバックログが位置Ｐ１にあるときに発行され得る。ゲートマーカの位置を用いて処理を開始する位置を識別する場合には、ある機構を与えて、Ｇ１に関連したフラッシュバックエントリがＧ１のためのゲートマーカよりも先にフラッシュバックログに記憶されないようにして、Ｇ１のゲートマーカが位置Ｐ１に記憶されるようにすることを保証しなければならない。しかしながら、ポインタが使用される場合に、Ｇ１のための生成された他のフラッシュバックエントリをＧ１のためにゲートマーカよりも先に、ディスクにフラッシュすることができる。Ｐ１の後にフラッシュバックログのどこかに記憶されたＧ１のためのゲートマーカは、単に位置Ｐ１を指すためのポインタを含む。
【００５２】
フラッシュバックエントリが処理されるときに、フラッシュバックエントリがリポジトリを復元するために用いられているゲートと関連した時間よりも後の更新を反映しなければ、リポジトリの対応するブロックはフラッシュバックエントリにおける画像に復元される。たとえば、フラッシュバックエントリ２２０および２２２の双方が同じブロックＢ１に対応し、リポジトリがゲートＧ５に関連した時間Ｔ５００に復元される場合に、ブロックＢ１はフラッシュバックエントリ２２０に基づいて復元されるが、フラッシュバックエントリ２２２に基づいては復元されない。なぜならフラッシュバックエントリはＴ５００の後にブロックＢ１になされた更新を反映するからである。
【００５３】
上述の例において、ゲートマーカはフラッシュバックエントリの適用を開始する場所を示すという機能を果たす。代替の実施例において、フラッシュバックエントリは、逆の順序で与えられ、最も最近のエントリから始まり適切なゲートマーカ（またはゲートマーカにおけるポインタによって示された位置）に進み得る。これらの状況下で、ゲートマーカまたはポインタは、フラッシュバックエントリの処理を停止する場所を示す。また、フラッシュバックログが最も新しいものから最も古いものへと処理される場合に、エントリに関連したタイムスタンプが回復のために用いられるゲートの時間よりも新しいときに、フラッシュバックエントリがスキップされる。たとえば、エントリ２２０および２２２の双方が同じブロックＢ１に対応し、かつリポジトリがゲートＧ５に関連した時間Ｔ５００に復元される場合に、エントリ２２２はスキップされる。なぜならそれは時間Ｔ５００よりも大きいタイムスタンプと関連しているからである。すなわち、エントリ２２０がスキップされるのは、エントリ２２２に反映されたブロックＢ１の画像が、時間Ｔ５００の後になされた変更を含むからである。一方で、エントリ２２０が与えられるのは、エントリ２２０が時間Ｔ５００に先行しかつＴ５００よりも前の時間にブロックＢ１の物理的画像を反映するからである。
【００５４】
上述のように、フラッシュバックエントリを年代順にまたは逆の年代順に適用し得る。実際に、フラッシュバックエントリはいかなる順序でも処理され得る。リポジトリを復元するために用いられるゲートに関連した時間よりも早いタイムスタンプを有するブロックのための多数のフラッシュバックエントリがある場合に、エントリのうちのいずれか１つからの画像は、「物理的な回復段階」の後のブロックの復元された画像として十分良好なものである。任意の順序におけるフラッシュバックエントリを適用する能力は、フラッシュバックエントリを並行して与えることができるシステムにおいて特に有益であり、これによって回復動作の効率をさらに増加させる。たとえば、適用される必要があるフラッシュバックエントリのサブセットは複数のプロセスに分散され得る。これらのプロセスの各
々は、次に、他のプロセスと最小調整された割当てられたフラッシュバックエントリを適用し得る。
【００５５】
上述のように、一実施例において、各ゲートマーカは生理的なやり直しログにおける位置（「やり直しポインタ」）へのポインタを含む。具体的には、ゲートマーカに記憶されたやり直しポインタは、リポジトリがゲートマーカに関連したゲートに復元された後でやり直しの記録を処理し始めるための生理的なやり直しログ２５０における位置を示している。たとえば、リポジトリが時間Ｔ５５０に戻されると考える。物理的な回復段階の間に、目標時間Ｔ５５０におけるまたはその前の第１のゲートが識別される。現在の例において、ゲートマーカの連鎖は、時間Ｔ５００に対応するマーカ２０２に戻って続く。ゲートマーカ２０２に続くフラッシュバックエントリを次に適用して、リポジトリを時間Ｔ５００におけるその物理的な状態に復元する。
【００５６】
物理的な回復段階の後で、リポジトリは時間Ｔ５００におけるまたはその前のブロックの物理的状態を反映する。結果として、Ｔ５５０の前に行なわれたトランザクションによってなされた変更の一部は、時間Ｔ５００におけるリポジトリの物理的状態に反映されない。このような変更を反映させるために、生理的やり直しの記録が与えられ、これはゲートマーカ２０２のやり直しポインタによって示されたやり直しログ２５０における位置で始まる。やり直しの記録の適用例は、リポジトリにおける論理的なデータ項目を時間Ｔ５５０の時点の一貫した状態へとロールする。さらに、生理的回復段階の間に、生理的取消しを用いて、論理的なデータ項目から、（１）物理的な画像にあるが（２）時間Ｔ５５０の時点でまだ行なわれていないトランザクションによってなされたいかなる更新も除去する。
【００５７】
複数サーバシステム
いくつかのデータベースシステムにおいて、複数データベースサーバは、同じデータベースへのアクセスを有し得る。一実施例に従うと、データベースへのアクセスを有するデータベースサーバの各々は、フラッシュバックログおよび生理的やり直しログを含むデータベースを回復するためのその独自のログの組を維持する。さまざまなデータベースサーバは、分離した生理的取消しログを有し得るか、またはすべてのデータベースサーバのための単一の共有された生理的な取消しログがあるかもしれない。データベースを前の状態に復元するために、すべてのサーバのすべてのログからの回復の情報が要求され得る。たとえば、特定のゲートＧ３の後で、１つのサーバＳ１はブロックＢ１へのゲート後の最初の更新を実行し得、別のサーバＳ２はブロックＢ２へのゲート後の最初の更新を実行し得、さらに別のサーバＳ３はブロックＢ３へのゲート後の最初の更新を実行し得る。このような状況下で、データベースがゲートＧ３に復元された場合に、Ｓ１のフラッシュバックログからのフラッシュバックの記録がＢ１に適用されなければならず、Ｓ２のフラッシュバックログからのフラッシュバックの記録がＢ２に適用されなければならず、Ｓ３のフラッシュバックログからのフラッシュバックの記録がＢ３に適用されなければならない。
【００５８】
残念ながら、さまざまなサーバ間の通信は即時のものではない。サーバ間通信における遅れは、ゲートの設定に関する同期の問題を引起こすおそれがある。たとえば、サーバＳ１は午後５時に関連付けられるゲートＧ３を設定すると考える。サーバ間通信が即時でない場合に、午後５時のサーバＳ１はゲートＧ３を公開し得、Ｓ２およびＳ３は、Ｇ３の後にすべてのゲート後の最初の更新のためのフラッシュバックエントリを適切に生成し始める。しかしながら、Ｇ３の通知は、午後５時の１秒後までにＳ２に、および午後５時の３秒後までにＳ３に到達しないかもしれない。結果として、Ｇ３は、午後５時および午後５時の１秒後の間のＳ２によってなされた更新のためのフラッシュバックエントリを欠いている。同様に、Ｇ３は、午後５時および午後５時の３秒後の間のＳ３によってされれた更新のフラッシュバックのエントリを欠いている。
【００５９】
一実施例に従うと、この同期化の問題は、２段階のプロセスを用いたゲートを確立することによって対処される。第１の段階の間に、「コーディネータ」に指定されたサーバは、「ログの開始」メッセージをすべての他のサーバに送信する。ログの開始メッセージに応答して、互いのサーバは、（１）コーディネータにそのフラッシュバックログにおける現在の挿入点の位置を示す応答メッセージを送信し、（２）それが生成するすべての更新についてのフラッシュバックエントリを生成し始める。
【００６０】
たとえば、Ｓ２がＳ１からのログの開始メッセージを受信し、Ｓ２のフラッシュバックログにおける現在の挿入点がＳ２−ＰＯＳ１であると考える。ログの開始メッセージに応答して、Ｓ２は、（１）その現在の位置Ｓ２−ＰＯＳ１を示すＳ１に対する応答を送信し、（２）それが行なうすべての更新のためのフラッシュバックエントリを生成し始める。同様に、Ｓ３がＳ１からのログの開始メッセージを受信するときにＳ３のフラッシュバックログにおける現在の挿入点がＳ３−ＰＯＳ１である場合に、ログの開始メッセージに応答して、Ｓ３は、（１）その現在の位置Ｓ３‐ＰＯＳ１を示すＳ１への応答を送信し、（２）それが行なうすべての更新のためのフラッシュバックエントリを生成し始める。
【００６１】
コーディネータが他のサーバのすべてからの応答を受信したときに、コーディネータは、（１）最後の応答が受信された時間よりも早くない時間に関連したゲートを設定し、（２）そのゲートのためのマーカを生成する。たとえば、Ｓ１が午後５時に最後の応答を受信し、午後５時に関連したゲートＧ３を設定するものと考える。ゲートを設定した後で、コーディネータは「ゲートが設定された」というメッセージを他のサーバに送信する。ゲート設定のメッセージは、新しいゲートに関連する新しい時間を示す。新しいゲートのために設定された時間は必ずサーバがフラッシュバックエントリを開始し始める時間の後であるために、フラッシュバックエントリは、いつゲート設定のメッセージを受信するかにかかわらず、サーバによってなされたすべてのゲート後の最初の変更のために存在する。
【００６２】
ゲート設定のメッセージの受信に応答して、他のサーバは、すべての更新のためのフラッシュバックエントリの生成をやめ、ゲート後の最初の更新のみのためのフラッシュバックエントリを生成し始める。現在の例に戻ると、Ｓ２およびＳ３は、Ｇ３が午後５時に設定されたことを示すＳ１からのゲート設定のメッセージを受信する。Ｓ２およびＳ３は、すべての更新のためのフラッシュバックエントリの生成を止め、午後５時の後のいかなる所与のブロックになされた最初の更新のためのフラッシュバックエントリを生成し始める。
【００６３】
上述の２段階のゲート生成技術は、同期に関連付けられる問題を回避する。なぜなら、サーバがゲートに関連付けられた時間の後にゲート設定のメッセージを受信したとしても、サーバはゲートに関連付けられた時間とサーバがゲート設定のメッセージを受信する時間との間になされたいかなる変更のためのフラッシュバックエントリをも生成しているからである。たとえば、Ｓ２が午後５時１分にＧ３のためのゲート設定のメッセージを受信したとしても、Ｓ２は、ゲートＧ３に関連付けられた時間である午後５時以降になされたすべての更新のためのフラッシュバック情報を生成している。
【００６４】
上述のように、コーディネータは、それが設定するゲートのためのゲートマーカを生成する。一実施例に従うと、複数サーバ環境におけるゲートのために生成されるゲートマーカは、複数サーバの環境において、ゲートマーカがゲートに関連付けられる他のサーバのフラッシュバックログ内の位置を示すデータを含むということを除いては、単一のサーバ環境において生成されるゲートマーカと同様である。たとえば、Ｓ１のフラッシュバックログに記憶されたゲートＧ３のためのフラッシュバックマーカは、Ｓ２のフラッシュバックログにおけるＳ２−ＰＯＳ１、およびＳ３のフラッシュバックログにおけるＳ３ＰＯＳ
１を示すデータを含む。したがって、Ｇ３に基づく物理的な回復を行なうときに、Ｇ３のためのマーカは、Ｓ１，Ｓ２およびＳ３の各々のフラッシュバックログにおけるフラッシュバックエントリの処理をどこで始めるかを示す。
【００６５】
代替の実施例において、特定のゲートのためのゲートマーカは分離したフラッシュバックログの各々に配置され得る。たとえば、Ｓ１のフラッシュバックログに記憶されたゲートＧ３のためのフラッシュバックマーカは、ゲートＧ３に関連付けられたＳ１のフラッシュバックログ内の位置を示す。ゲートＧ３のための別々のフラッシュバックマーカは、Ｓ２のフラッシュバックログに記憶され、位置Ｓ２−ＰＯＳ１を示す。ゲートＧ３のさらに別のフラッシュバックマーカは、Ｓ３のフラッシュバックログに記憶され、位置Ｓ３−ＰＯＳ１を示す。
【００６６】
単一のゲートマーカを用いてすべてのサーバのためのゲート位置を示す実施例に従うと、サーバは、それぞれのフラッシュバックログにおける現在の位置および生理的やり直しログにおける現在の位置の双方を送信することによってログの開始メッセージに応答する。双方の情報はゲートのためのマーカに記憶され得る。結果として、データベースがゲートに基づいて前の物理的な状態に復元されるときに、ゲートマーカにおける情報は、さまざまなフラッシュバックログにおいてどこでフラッシュバックエントリの処理をし始めるかだけでなく、さまざまな生理的やり直しログ内のどこでやり直しエントリを処理し始めるかを示す。
【００６７】
タイミング
リポジトリの完全性を保証するために、或る動作が特定のシーケンスで行なわれなければならない。一実施例によって用いられるフラッシュバックログの維持動作に適用可能なタイミング依存は以下のものを含む。：
ブロックの更新前の画像を含むフラッシュバックエントリは、ブロックの更新されたコピーが不揮発性メモリにフラッシュさせるときまたはその前に、不揮発性メモリにフラッシュされなければならない。たとえば、図１Ｃを参照すると、フラッシュバックエントリ１３６は、ブロック１２０の修正されたコピー１２４がリポジトリ１１２にフラッシュされるときまたはその前に、フラッシュバックログ１０６にフラッシュされなければならない。
【００６８】
ブロックの前の画像に反映されたすべての変更のためのやり直しエントリは、前の画像を含むフラッシュバックエントリが不揮発性メモリにフラッシュされるときまたはその前に不揮発性メモリにフラッシュされなければならない。たとえば、ブロックＢ１が午後４時４９分に更新されて、やり直しの記録Ｒ１が生成されると考える。さらにフラッシュバックのエントリＦ１がブロックＢ１へのゲート後の最初の更新のために生成され、ここでＦ１の生成を引起こしたゲートＧ３は午後５時に関連付けられていると考える。このような状況下で、Ｆ１に含まれるＢ１の前の画像は、午後４時４９分に生成された変更を反映する。結果として、Ｒ１は、Ｆ１が不揮発性メモリにフラッシュされるときまたはその前に、不揮発性メモリにフラッシュされなければならない。
【００６９】
変更を反映する前の画像が不揮発性メモリへのフラッシュされる前に、変更のためのやり直しが不揮発性メモリへフラッシュされることを保証するための１つの技術は、ゲートが設定されるときに、ゲートの前になされた変更に関連付けられた、不揮発性記憶装置のすべてのやり直しへのフラッシュを含む。したがって、Ｇ３が午後５時に設定されると、午後５時前に行なわれた変更に関連するすべてのやり直しは不揮発性記憶装置にフラッシュされる。結果として、Ｇ３のためのフラッシュバックエントリは、やり直しの情報が不揮発性メモリにまだ反映されていないいかなる変更も反映しない。
【００７０】
最適化
本明細書に記載したような回復動作の実行を向上さるためのさまざまな技術を使用し得る。たとえば、ブロックＢ１にはデータがまだ記憶されていないと考える。Ｂ１への最初の更新がゲート後の最初の更新である場合に、フラッシュバックエントリがＢ１の更新前の画像とともに生成される。しかしながら、この場合、Ｂ１の更新前の画像はいかなる有益な情報も含まない。したがって、ゲート後の最初の更新が、保持される必要のあるいかなる情報も記憶しないブロックに対してなされるときに、特定のフラッシュバックエントリが生成される。特別のフラッシュバックエントリは、ブロックの完全な更新前の画像を含まないが、単にブロックを識別し、ブロックが必要とされるいかなる情報も含まないことを示す。
【００７１】
別の例として、ＩＮＳＥＲＴ（挿入）動作等のいくつかの状況で、ゲート後の最初の更新がブロックに対して行なわれるときにブロックの先行のバージョンが不揮発性メモリにまだ存在しないかもしれない。これらの状況下で、ブロックの前の画像は通常、更新のためのフラッシュバックエントリを生成するために不揮発性の記憶から読み出さなければならない。しかしながら、ブロックの前の画像が、記憶されなければならないいかなる情報も含まないことがわかっていれば、不揮発性記憶装置から前の画像を読出す必要性は回避され得る。一実施例に従うと、ブロックが後でドロップされる（テーブル等の）構造のためのデータを以前に記憶していた場合、その構造がデータベースが復元され得る最も古いゲートに関連付けられた時間の前にドロップされたかどうかが決定される。データベースが復元され得る最も古いゲートに関連付けられた時間よりも前に構造がドロップされた場合に、前の画像はディスクから読み出される必要はない。代わりに、特別のフラッシュバックエントリを用いてブロックを識別し、ブロックがいかなる必要とされる情報も含まないことを示す。
【００７２】
たとえば、ブロックが１週間前にドロップされたテーブルの一部を以前に記憶しかつデータベースに必要とされる最も古いゲートが２日前である場合に、ブロックは、データベースが復元され得る最も古いゲートに関連付けられた時間よりも前に低下された構造に属していた。結果として、ブロックの前の画像を含まない特別のフラッシュバックエントリがブロックのために用いられ得る。
【００７３】
リソースを保存するために用いられ得る別の技術は、物理的および生理的な取消しログを、リポジトリを一貫した状態に復元するのに十分な情報を含む単一の取消しログへと結合することを含む。結合された取消しログの使用は、別々の物理的な取消しログおよび生理的な取消しログに維持される情報間のかなりの量の冗長性を回避することができる。代わりに、このような冗長性は、生理的な取消しがブロックを前の状態に復元させるのに十分な情報を有さない状況においてのみフラッシュバックエントリを生成することによって回避することができる。生理的な取消しが十分な情報を有さない特定の状況が実現化例によって異なり、たとえば更新されているブロックの特定の種類に依存し得る。
【００７４】
別の技術に従うと、ファイルに関するヘッダ情報を含むブロックは、ファイルのコンテントをなすデータを記憶するブロックとは異なった方法で処理される。一実施例に従うと、ファイルヘッダブロックのために生成されたフラッシュバックエントリは、ヘッダブロックの全体的な前の画像を含まない。むしろ、ファイルヘッダブロックのためのフラッシュバックエントリは、メタ変更をファイルに記述し、対応するファイルヘッダブロックを完全に重ね書きするというよりむしろ、ファイルに論理的に適用される。たとえば、このようなフラッシュバックエントリは、ファイルが特定の時点で拡張されたことを示し得る。このようなフラッシュバックエントリの適用は、ファイルをその元の境界に縮小することを含む。同様に、フラッシュバックエントリはファイルのリポジトリへの追加を示し得る。フラッシュバックエントリの適用例は追加されたファイルの削除を含む。
【００７５】
ハードウェアの概観
図３は、本発明の一実施例が実現され得るコンピュータシステム３００を示すブロック図である。コンピュータシステム３００は、バス３０２または情報を通信するための他の通信機構と、バス３０２に結合された、情報を処理するためのプロセッサ３０４とを含む。コンピュータシステム３００は、バス３０２に結合された、プロセッサ３０４によって実行される情報および命令を記憶するための、ランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置等の主記憶装置３０６を含む。主記憶装置３０６は、プロセッサ３０４によって実行される命令の実行の際に一時変数または他の中間情報を記憶するために使用され得る。コンピュータシステム３００は、読取専用メモリ（ＲＯＭ）３０８、またはバス３０２に結合された、プロセッサ３０４のための静的な情報および命令を記憶するための他の静的記憶装置をさらに含む。情報および命令を記憶するための磁気ディスクまたは光ディスク等の記憶装置３１０が提供され、バス３０２に結合される。
【００７６】
コンピュータシステム３００は、バス３０２を介してコンピュータユーザへの情報を表示するための陰極線管（ＣＲＴ）等のディスプレイ３１２に結合され得る。英数字キーおよび他のキーを含む入力装置３１４は、プロセッサ３０４への情報および命令の選択を通信するためにバス３０２に結合される。他の種類のユーザ入力装置は、マウス、トラックボール、またはプロセッサ３０４への方向情報およびコマンドの選択を通信するためのおよびディスプレイ３１２上のカーソルの動きを制御するためのカーソル方向キー等のカーソルコントロール３１６である。この入力装置は、典型的に装置が平面における位置を特定するのを可能にする２つの軸、第１の軸（たとえばｘ）および第２の軸（たとえばｙ）における２つの自由度を有する。
【実施例２】
【００７７】
本発明は、本明細書に記載された技術を実現するためのコンピュータシステム３００の使用に関する。本発明の一実施例に従うと、これらの技術は、主記憶装置３０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するプロセッサ３０４に応答して、コンピュータシステム３００によって行なわれる。このような命令は、記憶装置３１０等の別のコンピュータが読取可能な媒体から主記憶装置３０６へと読出され得る。主記憶装置３０６に含まれる命令のシーケンスの実行によってプロセッサ３０４は本明細書に記載されるステップを実施する。代替の実施例において、配線回路をソフトウェアの命令の代わりにまたはそれと組合わせて用いて本発明を実現し得る。したがって、本発明の実施例はハードウェア回路およびソフトウェアのいかなる特定の組合せにも制限されない。
【００７８】
本明細書で用いられる「コンピュータが読取可能な媒体」という用語は、実行のために命令をプロセッサ３０４に与えることに関与するいかなる媒体のことも指す。このような媒体は、不揮発性媒体、揮発性媒体、および送信媒体を含むがこれらに制限されない多くの形態をとり得る。不揮発性媒体は、たとえば記憶装置３１０等の光ディスクまたは磁気ディスクを含む。揮発性媒体は、主記憶装置３０６等のダイナミックメモリを含む。送信媒体は、バス３０２を含むワイヤを備えた、同軸ケーブル、銅線および光ファイバを含む。送信媒体は、電波および赤外のデータ通信の際に生成されるような音波または光波の形態を取ることもできる。
【００７９】
コンピュータが読取可能な媒体の共通の形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープまたはいかなる他の磁気媒体、ＣＤ‐ＲＯＭ、いかなる他の光学媒体、せん孔カード、紙テープ、孔のパターンを有するいかなる他の物理的な媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、いかなる他のメモリチップまたはカートリッジ、以下に記載されるような搬送波、またはコンピュータが読み出すことのできるいかなる他の媒体を含む。
【００８０】
コンピュータが読取可能な媒体のさまざまな形態は、実行のために１つ以上の命令の１つ以上のシーケンスをプロセッサ３０４に運ぶことを含み得る。たとえば、命令は最初にリモートコンピュータの磁気ディスクで運ばれ得る。リモートコンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話回線上で命令を送信する。コンピュータシステム３００にローカルなモデムは、電話回線上でデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換する。赤外線検出器は、赤外線信号内で運ばれるデータを受信することができ、適切な回路はデータをバス３０２上に配置することができる。バス３０２はデータを主記憶装置３０６に運び、そこからプロセッサ３０４は命令を検索し実行する。主記憶装置３０６によって受信された命令は、プロセッサ３０４による実行の前または後のいずれかに記憶装置３１０上に選択的に記憶され得る。
【００８１】
コンピュータシステム３００は、バス３０２に結合された通信インターフェイス３１８を含む。通信インターフェイス３１８は、ローカルネットワーク３２２に接続されたネットワークリンク３２０に結合する双方向データ通信を提供する。たとえば、通信インターフェイス３１８は、対応する種類の電話回線へのデータ通信接続を与えるための統合デジタル通信サービス網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス３１８は、互換性のあるＬＡＮへのデータ通信接続を与えるためのローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクを実現してもよい。いかなるこのような実現化例において、通信インターフェイス３１８は、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ電気的、電磁的または光学的な信号を送受信する。
【００８２】
ネットワークリンク３２０は、典型的に、他のデータ装置への１つ以上のネットワークを通したデータ通信を提供する。たとえば、ネットワークリンク３２０は、ローカルネットワーク３２２を通したホストコンピュータ３２４への、またはインターネットサービスプロバイダ（ＩＳＰ）３２６によって運営されるデータ機器への接続を提供し得る。ＩＳＰ３２６は、さらに、現在一般に「インターネット」３２８と呼ばれる世界的なパケットデータ通信ネットワークを介したデータ通信サービスを提供する。ローカルネットワーク３２２およびインターネット３２８の双方は、デジタルデータストリームを運ぶ電気的、電磁的または光学的な信号を用いる。さまざまなネットワークを介した信号、ならびにコンピュータシステム３００へのおよびコンピュータシステムからのデジタルデータを運ぶ、ネットワークリンク３２０上の信号および通信インターフェイス３１８を介した信号は、情報を送信する搬送波の例示の形態である。
【００８３】
コンピュータシステム３００は、ネットワーク、ネットワークリンク３２０および通信インターフェイス３１８を介して、プログラムコードを含むメッセージを送信しこれを含むデータを受信することができる。インターネットの例において、サーバ３３０は、インターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２および通信インターフェイス３１８を介したアプリケーションプログラムのために要求されるコードを送信し得る。
【００８４】
受信されたコードは、受信されるとプロセッサ３０４によって実行され得、および／または後で実行するために記憶装置３１０または他の不揮発性記憶装置に記憶される。この態様で、コンピュータシステム３００は搬送波の形態をしたアプリケーションコードを取得し得る。
【００８５】
前述の説明において、本発明の実施例は、実現化例によって異なり得る複数の特定の詳細を参照して記載してきた。したがって、本発明がどのようなものであるかおよび出願人によって本発明として意図されるものが何かを唯一および排他的に示すものはクレームの
組であり、このクレームの組は、後に続くいかなる修正も含むクレームが発する特定の形態でこの出願から発せられるものである。このようなクレームに含まれる用語のための本明細書で明白に述べられたいかなる定義も、クレームで用いられるようなこのような用語の意味を決定する。したがって、クレームにおいて明白に挙げられていない制限、要素、特性、特徴、利点または属性はこのようなクレームの範囲を決して制限するべきではない。したがって、明細書および図面は、限定的な意味ではなく例示的な意味でみなされるべきである。
【図面の簡単な説明】
【００８６】
【図１Ａ】本発明の一実施例に従ったフラッシュバックログを有するシステムを示すブロック図である。
【図１Ｂ】本発明の一実施例に従ったフラッシュバックログを有するシステムを示すブロック図である。
【図１Ｃ】本発明の一実施例に従ったフラッシュバックログを有するシステムを示すブロック図である。
【図２】本発明の一実施例に従ったフラッシュバックログで実現されるゲートマーカを示すブロック図である。
【図３】本発明の実施例が実現され得るコンピュータシステムのブロック図である。
【図１Ａ】
0004594928.tif 000002
【図１Ｂ】
0004594928.tif 000003
【図１Ｃ】
0004594928.tif 000004
【図２】
0004594928.tif 000005
【図３】
0004594928.tif 000006