(57)【要約】  復旧が行われているデータベース中でスナップショットクエリを実施する方法は、ロールバックまたはアンドゥ操作中にデータベースへのアクセスを可能にする。この方法は、リドゥロックがデータ項目に対して存在するかどうかをクエリが検出できるようにすること、および、存在する場合に、後続のロールバック操作がロックを解除するまで待機することを含む。別のユーザがデータベースのデータ項目に排他的ロックを掛けていた場合、クエリは、このデータ項目のバージョンをバージョンストアから読み取ることによって継続することができる。復旧にミラーデータベースが使用される一実施形態では、継続的なリドゥ操作が、関連するバージョンストアを有する。ミラーデータベースへのフェイルオーバ時、クエリがリドゥ操作のバージョンストアを読み取ることができるようにすることによって、復旧のアンドゥ段階の間にクエリが開始することができる。
2007531156.tif 000002
【特許請求の範囲】
【請求項１】
データベース復旧中にデータベースに照会する方法であって、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全な各トランザクションに関連するデータ項目に対して第１のロックタイプをアサートすること、
前記データベース中で反映されているトランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを削除することであって、前記トランザクションを削除することによって、前記不完全なトランザクションに関連するデータ項目に対する第１のロックタイプがアサート解除されること、および、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショットクエリを許可することであって、第１のデータ項目に対して第１のロックタイプが検出された場合は、前記スナップショットクエリは前記第１のロックタイプがアサート解除されるまで遅延されることを含むことを特徴とする方法。
【請求項２】
第１のロックタイプをアサートするステップは、行、ページ、テーブル、インデックスのうちの少なくとも１つをアサートすることを含むことを特徴とする請求項１に記載の方法。
【請求項３】
第１のロックタイプをアサートするステップは、リドゥロックをアサートすることを含むことを特徴とする請求項１に記載の方法。
【請求項４】
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショットクエリを許可することをさらに含み、第２のトランザクションに対して第２のロックタイプが検出された場合は、前記第２のトランザクションの前バージョンからの読取りが実施されることを特徴とする請求項１に記載の方法。
【請求項５】
前記第２のロックタイプは読取りロックと書込みロックのうちの一方を含むことを特徴とする請求項４に記載の方法。
【請求項６】
データベース復旧中にデータベースのスナップショットを使用して前記データベースに照会する方法であって、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全なトランザクションが前記ログファイル中でコミットされていない場合に前記不完全なトランザクションを前記データベースから削除すること、
不完全なトランザクションの削除と同時に行われる前記データベースに対するスナップショットクエリを許可することであって、同時だがより早く開始されたクエリは、データ項目に対するロックをアサートしており、前記データ項目の第１のバージョンを記憶していること、および、
前記スナップショットクエリのデータ項目に関係するロックについてテストすることであって、前記スナップショットクエリに対応するデータ項目に関係するロックが検出された場合は、前記データ項目の第１のバージョンからの読取りが実施されることを含むことを特徴とする方法。
【請求項７】
スナップショットクエリを許可する前記ステップは、前記データ項目に対する読取りロックと書込みロックのうちの一方をアサートすることを含むことを特徴とする請求項６に記載の方法。
【請求項８】
データベースの復旧中に前記データベースに照会する方法であって、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクション内で未入力トランザクションを識別すること、
前記未入力トランザクションを前記データベースに挿入することであって、対応するバージョンレコードが生成され、対応する個別のデータ項目に対するロックがアサートされること、
トランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを前記データベースから削除することであって、前記トランザクションを削除することによって、対応する個別のデータ項目に対するロックがアサート解除されること、
前記不完全なトランザクションの削除と同時に行われる前記データベースに対するスナップショットクエリを許可すること、および、
前記新しいクエリに対応するデータ項目に関係するコミット時刻についてテストすることであって、コミット時刻が前記新しいクエリの開始時刻よりも後である場合は、前記データ項目の前バージョンレコードからの読取りが実施されることを含むことを特徴とする方法。
【請求項９】
前記未入力トランザクションを前記データベースに挿入することはさらに、主要データベースに障害が起きる前に前記未入力トランザクションをミラーデータベースに入力することを含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記未入力トランザクションは主要データベースからミラーデータベースに送られることを特徴とする請求項９に記載の方法。
【請求項１１】
データベースの復旧中に前記データベースに照会するためのシステムであって、
ソフトウェアコンポーネントの命令を有するメモリへのアクセスを有するプロセッサと、
ソフトウェアコンポーネントとを備え、前記ソフトウェアコンポーネントは、実行されたとき、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションによってリドゥ操作を実施すること、
コミットされていないトランザクションによってアンドゥ操作を実施すること、
前記アンドゥ操作と同時に行われる前記データベースに対するスナップショットクエリを許可すること、および、
前記スナップショットクエリのデータ項目に関係するロックについてテストすることを行い、リドゥ操作に関係するロックが検出された場合は前記データ項目の前バージョンからの読取りが実施されることを特徴とするシステム。
【請求項１２】
ロックは、行、ページ、テーブル、インデックスのうちの１つのリドゥ操作時にアサートされることを特徴とする請求項１１に記載のシステム。
【請求項１３】
クエリ結果を見るための表示装置をさらに備えることを特徴とする請求項１１に記載のシステム。
【請求項１４】
データベースの復旧中に前記データベースに照会するためのシステムであって、
主要データベースからログファイルトランザクションを受け取るミラーデータベースと、
前記ミラーデータベース中のデータベースプロセッサであって、ソフトウェアコンポーネントの命令を有するメモリへのアクセスを有するデータベースプロセッサと、
ソフトウェアコンポーネントとを備え、前記ソフトウェアコンポーネントは、実行されたとき、
前記ログファイルトランザクションを読み取って不完全なトランザクションを識別すること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを使用してリドゥ操作を実施することであって、前記リドゥ操作はロックをアサートし、対応するバージョンレコードが生成され、対応する個別のデータ項目に対するロックがアサートされること、
トランザクションがログファイル中でコミットされていない場合にアンドゥ操作を実施することであって、アンドゥ操作は対応する個別のデータ項目に対するロックをアサート解除すること、
アンドゥ操作と同時に行われる前記ミラーデータベースに対するスナップショットクエリを許可すること、および、
前記スナップショットクエリに対応するデータ項目に関係するロックについてテストすることを行い、ロックが検出された場合は前記データ項目の前バージョンレコードからの読取りが実施されることを特徴とするシステム。
【請求項１５】
リドゥ操作を実施することはさらに、主要データベースに障害が起きる前にミラーデータベースに対してリドゥ操作を実施することを含むことを特徴とする請求項１４に記載のシステム。
【請求項１６】
アンドゥ操作を実施することは、主要データベースに障害が起きた後に行われることを特徴とする請求項１４に記載のシステム。
【請求項１７】
データベースの復旧中に前記データベースに照会する方法を実施するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全な各トランザクションに関連するデータ項目に対して第１のロックタイプをアサートすること、
前記データベース中で反映されているトランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを削除することであって、前記トランザクションを削除することによって、前記不完全なトランザクションに関連するデータ項目に対する第１のロックタイプがアサート解除されること、および、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショットクエリを許可することであって、第１のデータ項目に対して第１のロックタイプが検出された場合は、前記スナップショットクエリは前記第１のロックタイプがアサート解除されるまで遅延されることを含むことを特徴とするコンピュータ可読媒体。
【請求項１８】
前記方法はさらに、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショットクエリを許可することを含み、第２のトランザクションに対して第２のロックタイプが検出された場合は、前記第２のトランザクションの前バージョンからの読取りが実施されることを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
データベースの復旧中にデータベースのスナップショットを使用して前記データベースに照会する方法を実施するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全なトランザクションが前記ログファイル中でコミットされていない場合に前記不完全なトランザクションを前記データベースから削除すること、
不完全なトランザクションの削除と同時に行われる前記データベースに対するスナップショットクエリを許可することであって、同時だがより早く開始されたクエリは、データ項目に対するロックをアサートしており、前記データ項目の第１のバージョンを記憶していること、および、
前記スナップショットクエリのデータ項目に関係するロックについてテストすることであって、前記スナップショットクエリに対応するデータ項目に関係するロックが検出された場合は、前記データ項目の第１のバージョンからの読取りが実施されることを含むことを特徴とするコンピュータ可読媒体。
【請求項２０】
スナップショットクエリを許可する前記ステップは、前記データ項目に対する読取りロックと書込みロックのうちの一方をアサートすることを含むことを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
データベースの復旧中に前記データベースに照会する方法を実施するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクション内で未入力トランザクションを識別すること、
前記未入力トランザクションを前記データベースに挿入することであって、対応するバージョンレコードが生成され、対応する個別のデータ項目に対するロックがアサートされること、
トランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを前記データベースから削除することであって、前記トランザクションを削除することによって、対応する個別のデータ項目に対するロックがアサート解除されること、
前記不完全なトランザクションの削除と同時に行われる前記データベースに対するスナップショットクエリを許可すること、および、
前記新しいクエリに対応するデータ項目に関係するコミット時刻についてテストすることであって、コミット時刻が前記新しいクエリの開始時刻よりも後である場合は、前記データ項目の前バージョンレコードからの読取りが実施されることを含むことを特徴とするコンピュータ可読媒体。
【請求項２２】
前記未入力トランザクションを前記データベースに挿入する前記方法ステップはさらに、主要データベースに障害が起きる前に前記未入力トランザクションをミラーデータベースに入力することを含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２３】
前記未入力トランザクションは主要データベースからミラーデータベースに送られることを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２４】
データベースの復旧中に前記データベースに照会するためのシステムであって、
メモリへのアクセスを有するプロセッサを備え、前記プロセッサは、
ログファイルトランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイルトランザクションを、前記データベース中で反映されているトランザクションと比較して、少なくとも１つの未入力トランザクションを見つけること、
前記少なくとも１つの未入力トランザクションによって少なくとも１つのリドゥ操作を実施すること、
少なくとも１つのコミットされていないトランザクションによって少なくとも１つのアンドゥ操作を実施すること、
前記少なくとも１つのアンドゥ操作と同時に行われる前記データベースに対するスナップショットクエリを許可すること、および、
前記スナップショットクエリのデータ項目に関係するロックについてテストすることを含む方法を実施するための手段を有し、リドゥ操作に関係するロックが検出された場合は前記データ項目の前バージョンからの読取りが実施されることを特徴とするシステム。
【請求項２５】
データベースの復旧中に前記データベースに照会するためのシステムであって、
主要データベースからログファイルトランザクションを受け取る手段を有するミラーデータベースと、
前記ミラーデータベース中のデータベースプロセッサとを備え、前記データベースプロセッサは、
前記ログファイルトランザクションを読み取って不完全なトランザクションを見つけること、
前記未入力トランザクションを使用してリドゥ操作を実施することであって、前記リドゥ操作はロックをアサートし、対応するバージョンレコードが生成され、対応する個別のデータ項目に対するロックがアサートされること、
トランザクションがログファイル中でコミットされていない場合にアンドゥ操作を実施することであって、アンドゥ操作は対応する個別のデータ項目に対するロックをアサート解除すること、
アンドゥ操作と同時に行われる前記ミラーデータベースに対するスナップショットクエリを許可すること、および、
前記スナップショットクエリに対応するデータ項目に関係するロックについてテストし、ロックが検出された場合は前記データ項目の前バージョンレコードからの読取りが実施されることを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にコンピュータデータベースの分野に関する。より詳細には、本発明は、復旧操作中にデータベースにアクセスすることに関する。
【背景技術】
【０００２】
近年のビジネスは、顧客、サービス、供給業者、課金記録、在庫目録などの極めて重要な記録を保持するために、データベースに大きく依拠する場合がある。データベースハードウェアまたはソフトウェアに障害が起きたときは、データベースを使用する業務を継続できるようにデータベースを復旧することが絶対に必要になる。非常に大きなデータベースでは、復旧には時間およびコストがかかる場合がある。一般に、既存の技法は復旧段階の間にデータベースにアクセスする方法を提供しないので、復旧中はアクセスが制限されることがある。
【０００３】
図１に、データベースの復旧タイムライン１００を示す。復旧の３つの段階は、分析段階１０５（ＡからＢ）、リドゥ(redo)段階１１０（ＢからＣ）、アンドゥ(undo)段階１１５（ＢからＣ）である。分析段階１０５は一般に、データベースに関連するログファイルを読み取って分析することを含む。ログファイルはデータベース操作に伴って生成されることが多く、例えば、データベース更新操作中に、ログファイルはデータベースに対して行われるトランザクションを記録する。これらのトランザクションは、読取り操作を開始して書込み操作で終わる場合がある。しかし、書込みデータがデータベースにコミットされる前に、ディスククラッシュなどのデータベースイベントが生じることがある。そのため、ログファイルは、コミットされたトランザクションとコミットされていないトランザクションの両方を含む場合がある。データベース復旧の分析段階１０５は、通常、ログファイル上のすべてのトランザクションを読み取ることを含む。
【０００４】
データベース復旧タイムライン１００のリドゥ段階１１０では、ログファイルのエントリをデータベースと比較する。ログファイル中のトランザクションがデータベース中で表されている場合は、トランザクションログファイル中の次のエントリを調べる。ログファイル中にあるトランザクションがデータベース中にない場合は、復旧プロセスの一部として、リドゥ段階でトランザクションログをデータベースファイルに再適用して、トランザクションを記録する。しかし、再入力されたトランザクションは、データベースにコミットされたことがなかったために不完全である場合がある。また、すでにデータベース中にあり再入力する必要のないトランザクションも、不完全な場合がある。
【０００５】
コミットされなかったトランザクションをデータベースから選択的に削除することによって、データベース再構築は、復旧操作後には、トランザクション一貫性のある形をもたらすことができる。データベース復旧のアンドゥ段階１１５では、ログファイルがトランザクションのコミットメントのレコードを有さない場合に、トランザクションをデータベースからロールバックする。したがって、コミットされなかったトランザクションは削除され、それによりデータベース復旧は、一貫したコミット済みトランザクションのセットをもたらすことができる。
【０００６】
図１のデータベース復旧方式を使用するいくつかの従来技術システムは、アンドゥ段階１１５の後になるまで、データベースへのアクセスを可能にすることができない。すなわち、従来技術のシステムは、すべての復旧操作が完了するまではデータベースへのアクセスを可能にすることができない。従来技術のシステムは、復旧タイムライン１００中の時点Ｄの後でのみ、アクセスを可能にする。
【０００７】
【特許文献１】２００３年６月２３日に出願された「RESYNCHRONIZATION OF MULTIPLE COPIES OF A DATABASE AFTER A DIVERGENCE IN TRANSACTION HISTORY」という名称の特許出願第１０／６０２２８３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、アクセス可能性のためにより早期にデータベース復旧タイムライン中に入るのを可能にすることのできるアーキテクチャおよび方法が必要とされている。本発明は、前述の必要性に対処するものであり、本明細書に述べる追加の利点によってこれらを解決する。
【課題を解決するための手段】
【０００９】
本発明は、データベースの復旧中にデータベースへのアクセスを可能にする方法を含む。一実施形態では、方法は、ログファイルを読み取り、どのトランザクションを復旧操作の一部としてデータベースに入力する必要があるかを決定することを含む。不完全なトランザクションはリドゥロックをアサートし、このリドゥロックは、ロールバック（アンドゥ）操作が完了するまでアサートされたままである。本発明の一態様によれば、クエリがクエリ中で要求されたデータ項目のロックをテストするという条件で、復旧のアンドゥ段階の間にデータベースへのアクセスを行うことができる。データ項目がリドゥロックを有する場合は、クエリはこれらのデータ項目のリドゥロックが除去されるまで待機する。通常の書込みタイプのロックなど、他のロックの場合は、クエリは照会されたデータの前バージョンを読み取ることができるので、アクセスを遅延させることはない。
【００１０】
本発明の別の実施形態では、未入力トランザクションが入力されたときにバージョンを生成した場合、データベースが復旧段階にある間にクエリにアクセスを提供することができる。復旧のロールバック段階の間、バージョンストアへのクエリアクセスを提供することによって、クエリによるアクセスを達成することができる。バージョンストアは、データベース項目のバージョンを記憶するための位置である。照会されたデータ項目のコミット時刻をチェックすることができ、ロックされているデータ項目をクエリがバージョンストアから取り出すようにすることができる。そうでない場合、照会された項目はデータベースから取り出すことができる。
【００１１】
本発明の一実施形態では、本発明のバージョニング態様により、復旧に使用されるミラーデータベースシステムがロールバック復旧操作中にミラーデータベースへのアクセスを許可することができ、ロックされているデータ項目は、クエリに入手可能な、データの前バージョンを有する。この、データベースへの早期アクセスの態様は、可用性、同時実行性、および本明細書に述べるその他の利点をもたらす。
【００１２】
前述の概要、ならびに以下の好ましい実施形態の詳細な説明は、添付の図面と共に読めばよりよく理解される。本発明の実施形態を例示するために、図面には本発明の例示的な構造を示す。ただし、本発明は、開示する特定の方法および手段に限定されない。
【発明を実施するための最良の形態】
【００１３】
（概観）
本発明の一実施形態は、復旧のアンドゥ段階の間にデータベースへのアクセスを可能にする。図１を参照すると、従来技術のシステムは、時点Ｄの後でしか復旧を可能にしない。本発明のいくつかの実施形態は、時点Ｃでクエリのアクセス可能性を実現する。この早期アクセス可能性は、行レベルのバージョニングおよび行レベルのロッキングを採用する技法を用いることによって可能である。この技法を使用すると、アンドゥ段階の間にデータベースへのアクセスを必要とするユーザは、データに対するロックに留意してデータをデータベースとバージョンストアのどちらかから適切に採用することによって、トランザクション一貫性のあるデータをデータベースから読み取ることができる。
【００１４】
別の実施形態では、本発明の態様は、フェイルオーバ操作中にミラーデータベースへのアクセスを得る方法を可能にする。この実施形態では、主要データベースの障害発生時、ミラーデータベースを使用してデータベース復旧機構が提供される。復旧中のミラーデータベースへのアクセスは、本発明のバージョンストア態様を使用することによって容易になる。この方法により、ユーザは、従来技術のデータベースの場合よりも早期にミラーデータベースへのアクセスを得ることができる。
【００１５】
図２を使用して例示的な構成について論じた後、図３〜図６に関して例示的な方法および実施形態について論じる。また、図７に関して例示的なコンピューティング環境についても論じる。
【００１６】
（本発明の例示的な実施形態）
ミラーデータベース復旧方式を使用したデータベース復旧の発展が開示されている（例えば、特許文献１参照。）。  
本発明の一実施形態では、行レベルのバージョニングを有利に使用して、データベーススナップショット、すなわちある時点でのデータベースのビューを可能にする。行レベルのバージョニングは、スナップショット分離とも呼ばれ、情報の読取り側と書込み側が相互にブロックしないよう複数の行バージョンをユーザテーブル中で保持することによって、データベースアプリケーションの同時実行性を向上させる。行レベルのバージョニングは、更新や保守のための他者からのアクセスなど、データベースに対する操作として、データベース値のバージョンを記憶することを可能にし、それによりデータのバージョンが他者によって読めるようにする。スナップショットクエリは、特定の時点までに他のトランザクションによってデータベースに加えられた変更の一貫したセットを返す読取り専用クエリを指す。スナップショットクエリは、トランザクション一貫性のあるデータベースビューを可能にし、それにより、更新トランザクションをブロックすることなくデータベースに対するクエリが可能になる。
【００１７】
いくつかの従来技術システムでは、トランザクションが行を変更する場合、行レベルのロックをデータベーステーブルに対してアサートすることができる。あるタイプのロックの例は、行に対するリドゥ操作によってアサートされるロックであろう。ロックの第２の例は、行へのアクセスを得たいずれか他のユーザトランザクションによってアサートされるロックであろう。通常、行ロックは、トランザクションが完了して書込み側がコミットするまで、アサートされた状態に維持される。
【００１８】
行レベルのバージョニングにより、通常ならそのようなアクセスを許可しないことになるデータベースに対してクエリを実施することができる。行レベルのバージョニングでは、データベースの読取り側は前にコミットされた行値に到達することができ、したがって、システム中の同時実行性を増大させることができる。このため、データベースシステムは、行が更新されたときに行の古いバージョンを保持しておくのが有利である。行レベルのバージョニングは、トランザクション一貫性のあるデータベーススナップショットをトランザクションの読取り側に提供し、したがって有意義なクエリを可能にする。読取り側トランザクションが開始したときに読取り側以外のすべてのアクティブなトランザクションが無視される場合、データベースのスナップショットをデータベースの状態として定義することができる。
【００１９】
バージョニングは、データベースのスナップショットをデータの古いバージョンから構築できるよう、更新トランザクションが古いバージョンを保持できるようにすることによって機能する。テーブル中またはインデックス中のレコードが更新されるとき、更新を行っているトランザクションのトランザクションシーケンス番号を新しいレコードにスタンプすることができる。レコードの古いバージョンは、バージョンストアに記憶することができ、新しいレコードは、バージョンストア中の古いレコードへのポインタを含むことができる。バージョンストア中の古いレコードは、さらに古いバージョンへのポインタを含むことができる。特定レコードのすべての古いバージョンは、リンクリスト中で連鎖させることができる。リンクポインタを何回か辿ってデータベースの特定スナップショットの適切なバージョンに到達することによって、正しいバージョンに到達することができる。
【００２０】
図２に、本発明の態様を実施するのに使用することのできるソフトウェアコンポーネントを示すブロック図２００を示す。ユーザクエリ２０５は、クエリプロセッサ２１０への入力として働く。クエリプロセッサは、アクセスメソッド２１５コンポーネントを呼び出して、データベース２４０に対する読取りや書込みなどのアクセスを実施する。アクセスメソッドはまた、データベースデータの行に対して掛けられているロックをロックマネージャ２２０から読み取って分析することもできる。アクセスメソッドはまた、データベース２４０へのアクセスの実現を補助するために、バージョンストア２３０からバージョンレコードを受け取る。
【００２１】
図２のコンポーネントは、復旧のアンドゥ段階、すなわちトランザクション一貫性のあるデータベース状態を生み出すために未コミットのトランザクションがロールバックされている段階で、アクティブであることができる。ロギングおよび復旧マネージャ２５０は、データベース２４０に対してリドゥ操作ならびにアンドゥ操作を実施する。ロギングおよび復旧マネージャは、コミットされたトランザクションとコミットされていないトランザクションの両方を含むトランザクション情報を、データベースログファイル２６０から受け取る。
【００２２】
図３は、データベースが復旧モードにある間にデータベースに対するより多くの可用性をもたらす、本発明の方法３００を表す流れ図である。復旧において、データベースは、ログファイルトランザクションを読み取ることによって分析段階を開始することができる（ステップ３１０）。分析段階では、不完全なトランザクションが識別される。不完全なトランザクションにはコミットログレコードが欠けている。リドゥ段階の一部として、ログファイル中で未入力トランザクションが識別される（ステップ３１５）。未入力トランザクションは、データベースから抜けているかまたはデータベース中で反映されていない、ログファイル中のトランザクションである。検出された未入力トランザクションは、復旧シナリオの一部としてデータベースに再入力することができる。一実施形態では、ＳＱＬ標準データベースを使用することができる。通常、トランザクションの再入力は、１つまたは複数の一連のリドゥ命令によって実施することができる。リドゥ命令は、復旧前にログファイル中では反映されているがデータベース中にはないトランザクションを挿入する（ステップ３２０）。このリドゥ段階の間、不完全な（コミットされていない）トランザクションに対するリドゥ操作によって、データベースの行、ページ、テーブル、またはインデックスに対するロックを、これらのトランザクションがロールバックするまでアサートすることができる。
【００２３】
復旧方式の最終段階では、コミットされていないトランザクションを削除して、トランザクション一貫性のあるデータベースを生み出す。ＳＱＬ環境では、選択された未コミットトランザクションの削除は、１つまたは複数のアンドゥ命令によって達成することができる。図３のステップ３２５は、リドゥ段階が完了した後でアンドゥ段階を開始することができることを示す。通常なら、何らかの読取りまたは書込み操作のためにデータベースへのアクセスが許可される前に、復旧のこのアンドゥ段階が完了していなければならない。しかし、本発明は有利にも、アンドゥ段階の最初にデータベースへのアクセスを許可することができる（ステップ３３０）。
【００２４】
アンドゥ段階の間にデータベースにアクセスすることは、データベース内の行、ページ、インデックス、テーブル、またはその他の構造へのクエリによって開始することができる。このクエリは、ロッキングベースの分離レベルまたはスナップショットベースの分離レベルで動作することができる。分離レベルは、クエリの同時実行性挙動を指定するクエリ属性であり、結果セットに影響を及ぼす複数の同時更新があるとき、クエリに対して様々な結果セットをもたらす場合がある。ステップ３３２で、クエリがスナップショットベースのクエリかロッキングベースのクエリかをテストする。クエリがロッキングベースのクエリである場合は、所望のクエリデータが利用可能なときにそのクエリデータをデータベースから読み取ることができる（ステップ３３４）。しかし、クエリがスナップショットベースのクエリである場合は、ステップ３３５に入ることができる。クエリがスナップショットベースのクエリのアプリオリ(a-priori)であるとわかっている場合は、ステップ３３２は省略できることに留意されたい。
【００２５】
図３のステップ３３５〜３５５に、スナップショットベースの分離レベルにおけるクエリ操作に関する例示的なフローを示す。本発明の一態様を用いて、上で論じた行レベルのロックおよびデータベースバージョニングをこの方法に関して使用することができる。クエリを処理する中で、方法３００は、データベース要素に対して掛けられているかもしれない排他的または書込みタイプのロックがあるかどうかチェックする（ステップ３３５）。排他的または書込みタイプのロックがない場合は、利用可能な関連するデータの読取りを実施することができる（ステップ３５５）。共有または読取りタイプのロックがある場合もあることに留意されたい。その場合は、ステップ３３５の判定は失敗し、ステップ３５５からのテストおよび読取りを可能にする。
【００２６】
ステップ３５５は、どちらのデータソースを読み取るべきかに関するテストを含む。スナップショットクエリ環境では、データは時間とトランザクションの両方で一貫性があることが好ましい。含意されるテストは、クエリの開始時刻を、アクセスされているデータのコミット時刻と比較する。開始時刻がコミット時刻よりも前である場合は、データのバージョンストアを使用すべきである。そうでない場合は、データはコミットされており、トランザクションと時間の両方で一貫性があり、データベースから安全に読み取ることができる。したがってステップ３５５は、データの一貫性の状態に応じて、データベース値をデータベースとバージョンストアのどちらかから読み取ることを含むことができる。データがバージョンストアから読み取られる場合、データの一貫性の状態に応じて、いくつかのコミット済みバージョンの中から適切なバージョンが選択される。
【００２７】
書込みタイプのロックがある場合は、ロックタイプを知るためにロックをテストすることができる（ステップ３４０）。ロックがリドゥ段階の間に獲得された場合、ロックによって保護されるデータは、読み取るべきバージョンストア値を有さないことがある。この場合は、データベース復旧のアンドゥ段階の間にリドゥロックが解除されるのを待機する（ステップ３４５）ことによって、アクセスを遅延させることができる。リドゥロックが解除されると、テストおよびデータ読取りを行うことができる（ステップ３５５）。この場合もやはり、ステップ３５５は、データベース値をデータベースとバージョンストアのどちらかから読み取ることを含む。リドゥタイプのロックがアサートされていない場合は、すぐにデータ読取りを実施することができる（ステップ３５５）。このデータ読取りでは、データベースの行、ページ、テーブル、またはインデックスに対して何らかのタイプのロックがあるにもかかわらず、アクセスを継続することができる。何らかのタイプのロックの例は、別のユーザまたはクエリによってアサートされた排他的（書込みタイプ）ロックであろう。このような排他的ロックは、複数のユーザまたはクエリが同じデータに同時にアクセスするのを防ぐ。リドゥロックの解除を待機している複数のユーザまたはクエリがあり得ること、および、ユーザの中でもとりわけバージョン読取りを実施することになるユーザ（スナップショット分離レベルで操作しているとも言われる）は、データにアクセスするために共有ロックを獲得することが必要になるユーザよりも優先されることは、留意するに値する。後者のタイプのユーザは、ロッキングベースの分離レベルで操作していると言われる。
【００２８】
本発明の別の実施形態では、本発明の態様は有利にも、ミラーデータベースに関連して使用することができる。ミラーデータベースは、主要データベース中で障害が起きた場合のバックアップデータベースとして働くように使用することができる。図４にシステム４００を示すが、システム４００では、主要データベース４１０が、高可用性の目的で対応ミラーデータベース４２０を有する。システム４００の一態様では、主要データベースログ４１５がミラーデータベースサイトに継続的に送られており、それにより、送られたログファイル４２５は、主要データベース４１０のトランザクションを反映するようにミラーデータベース４２０を更新することができる。
【００２９】
図４のシステム４００の一態様では、ミラーデータベース４２０は、継続的にリドゥ操作を実施しており、送られたファイルログ４２５から受け取ったトランザクションを加える。リドゥ段階の間、ミラーデータベース４２０はまた、更新されたデータベース要素の行、ページ、テーブル、インデックスに対する適切なロックを継続的に獲得している。このようなシステム中で、バージョニングが適用され、それによりバージョンストアを使用して更新中のトランザクションデータのバージョンが記憶される場合、本発明の他の態様を適用することができる。
【００３０】
図５に、本発明の態様を組み入れたシステム５００のブロック図を示す。トランザクションログレコードが、主要データベース５１０からミラーデータベース５２０に送られる。ＳＱＬ環境を仮定すると、リドゥプロセス５３０は、ミラーリングされたデータベース５２０に対してリドゥ命令を実施する。リドゥプロセスはまた、バージョンストア５５０中のバージョンを生成し、同時にロックマネージャ５４０からロックを得る。ミラーリングされたデータベースに対してリドゥ中に生成されたバージョンは、そのバージョンを生成したトランザクションが終了するとすぐに削除することができる。また、バックグラウンドバージョンストアクリーンアッププロセス５６０もあり、これは、バージョンストア５５０に作用して、不要なバージョンを削除し、バージョンレコードによって消費される空間を解放し再利用する。一実施形態では、バージョンレコードはディスクに記憶することができ、バージョンレコードへは、バッファプールをメモリ内キャッシュとして使用してアクセスすることができる。図５のアーキテクチャは、復旧中にミラーデータベースへのアクセスを許可する方法をサポートする。
【００３１】
図６に、復旧操作中にデータベースへのアクセスを早期に許可することをサポートする、本発明の例示的な方法を示す。一実施形態では、復旧操作は、主要データベースのフェイルオーバ後に復旧されつつあるミラーデータベースに対して実施することができる。この実施形態では、フェイルオーバ時に主要データベースからの最後の更新の受領に伴ってミラーデータベースのリドゥ操作を終了することができ、アンドゥ操作を開始することができる。次いで、本発明の態様は、アンドゥ復旧操作中のアクセスを可能にすることができ、有利にも、従来技術のシステムの場合よりも早期にアクセスを可能にすることができる。
【００３２】
図６は、本発明の方法６００の流れ図を示す。方法６００は、ログファイルがデータベースによって受け取られることで開始する（ステップ６１０）。未入力トランザクションがデータベースに挿入される。ＳＱＬ環境では、挿入操作はリドゥ命令を使用することができる。リドゥ操作中、バージョンレコードが本発明の一態様により作成され、適切なリドゥロックがアサートされる（ステップ６２０）。ログからの未入力トランザクションが入力され、リドゥ操作が終わると、データベース復旧のアンドゥ段階が開始することができる（ステップ６２５）。
【００３３】
この時点で、方法６００は、本発明のバージョニング態様によりデータベースへのアクセスを許可することができる（６３０）。アクセスは、データベースに対するクエリとすることができる。方法は、クエリがスナップショットベースの分離レベルで動作するかどうかテストする（ステップ６４０）。分離がスナップショットベースである場合は、テスト、およびバージョンストアまたはデータベースからの読取りを実施することができる（ステップ６５０）。ステップ６５０のテストおよびバージョンストアまたはデータベースからの読取りは、図３のステップ３５５で実施されるのと同様であることに留意されたい。前と同様、テストおよび読取りは、所望のデータの時間およびトランザクションの一貫性に応じて、バージョンストアとデータベースのどちらかから読み取ることができる。図６に戻るが、ステップ６５０は、リドゥプロセス（ステップ６２０）がログファイルからの未実行トランザクションを実施していたときにデータのバージョンを作成したので、達成することができる。分離がロッキングベースである場合は、共有ロックがクエリに与えられた後で、データベース自体を安全に使用して（ステップ６４５）、クエリに必要なデータを得ることができる。
【００３４】
ロックのタイプ（すなわちリドゥプロセスによって得られたかどうか）は、方法６００でのテストには不要な場合があることに留意されたい。リドゥプロセス（ステップ６２０）は、前述のようにデータのバージョンを生成したことに留意されたい。また、データを変更したトランザクションも、データのバージョンを生成しており、したがって、コミットされていないトランザクションによってロックされた行、ページ、テーブル、またはインデックスはどれも、読取りアクセスに必要な情報をスナップショットクエリに提供するためのバージョンストアデータを有することにも留意されたい。
【００３５】
（例示的なコンピューティングデバイス）
図７および以下の考察は、本発明の実施形態を実施するのに適したコンピューティング環境に関する簡単な一般的記述を提供するものである。以下では汎用コンピュータについて述べるが、これは一例にすぎず、本発明の実施形態は、ネットワーク／バス相互運用性および対話を有するクライアントなど、その他のコンピューティングデバイスで実施することもできる。したがって、本発明の実施形態は、ごくわずかなまたは最小限のクライアントリソースが関係するネットワーク化された被ホストサービスの環境で実施することができる。すなわち、クライアントデバイスが単にネットワーク／バスへのインタフェース（アプライアンス中に配置されたオブジェクトやその他のコンピューティングデバイスおよびオブジェクトなど）として働くネットワーク化環境で実施することができる。本質的に、データを記憶することのできる場所またはデータを取り出すことのできる場所ならどこでも、動作に望ましいまたは適した環境とすることができる。
【００３６】
必須ではないが、本発明の実施形態はまた、デバイスまたはオブジェクトのためのサービスの開発者によって使用されるオペレーティングシステムを介して実施することができ、かつ／あるいは、アプリケーションソフトウェアに含めることができる。ソフトウェアは、クライアントワークステーション、サーバ、その他のデバイスなど１つまたは複数のコンピュータによって実行されるコンピュータ実行可能命令（プログラムモジュールなど）の一般的なコンテキストで述べることができる。一般に、プログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、様々な実施形態で望まれるように結合または分散させることができる。さらに、本発明の様々な実施形態はその他のコンピュータ構成で実施することもできることは、当業者なら理解するであろう。使用に適するであろう、その他の周知のコンピューティングシステム、環境、および／または構成には、限定しないがパーソナルコンピュータ（ＰＣ）、現金自動預け払い機、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な民生用電子機器、ネットワークＰＣ、アプライアンス、ライト、環境制御要素、ミニコンピュータ、メインフレームコンピュータなどが含まれる。本発明の実施形態は分散コンピューティング環境で実施することもでき、その場合、タスクは通信ネットワーク／バスまたはその他のデータ伝送媒体を介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含めてローカルとリモートの両方のコンピュータ記憶媒体に位置することができ、クライアントノードはサーバノードとして挙動することもできる。
【００３７】
したがって、図７は、本発明の実施形態を実施することに適したコンピューティングシステム環境７００の例を示しているが、上で明確にしたように、コンピューティングシステム環境７００は適したコンピューティング環境の一例にすぎず、本発明の一実施形態の使用または機能の範囲についてどんな制限を示唆するものでもない。また、コンピューティング環境７００は、この例示的な動作環境７００中に示すコンポーネントのいずれか１つまたは組合せに関してどんな依存や要件を有するものとも解釈すべきではない。
【００３８】
図７を参照すると、本発明の一実施形態を実施するための例示的なシステムは、コンピュータシステム７１０の形の汎用コンピューティングデバイスを含む。コンピュータシステム７１０のコンポーネントには、限定しないが、処理ユニット７２０と、システムメモリ７３０と、システムメモリを含めた様々なシステムコンポーネントを処理ユニット７２０に結合するシステムバス７２１とを含めることができる。システムバス７２１は、様々なバスアーキテクチャのいずれかを用いた、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスを含めて、いくつかのタイプのバス構造のいずれかとすることができる。限定ではなく例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス（メザニンバスとも呼ばれる）が含まれる。
【００３９】
コンピュータシステム７１０は通常、様々なコンピュータ可読媒体を備える。コンピュータ可読媒体は、コンピュータシステム７１０からアクセスできる任意の利用可能な媒体とすることができ、揮発性と不揮発性の媒体、取り外し式と固定式の媒体の両方が含まれる。限定ではなく例として、コンピュータ可読媒体には、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、その他のデータなどの情報を記憶するための任意の方法または技術で実現された、揮発性と不揮発性、取り外し式と固定式の媒体が含まれる。コンピュータ記憶媒体には、限定しないがランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気的に消去可能プログラム可能な読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、またはその他のメモリ技術、コンパクトディスク読取り専用メモリ（ＣＤＲＯＭ）、コンパクトディスク書換え可能（ＣＤＲＷ）、ディジタル多用途ディスク（ＤＶＤ）、またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、またはその他の磁気記憶デバイスが含まれ、あるいは、所望の情報を記憶するのに使用できコンピュータシステム７１０からアクセスできるその他の任意の媒体が含まれる。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを、搬送波やその他のトランスポート機構などの被変調データ信号中に組み入れるものであり、任意の情報送達媒体がこれに含まれる。用語「被変調データ信号」は、信号中の情報が符号化される形で１つまたは複数の特性が設定または変更される信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数、赤外線などの無線媒体およびその他の無線媒体とが含まれる。以上のいずれかの組合せも、コンピュータ可読媒体の範囲に含めるべきである。
【００４０】
システムメモリ７３０は、読取り専用メモリ（ＲＯＭ）７３１やランダムアクセスメモリ（ＲＡＭ）７３２など、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。ＲＯＭ７３１には通常、起動中などにコンピュータシステム７１０内の要素間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）７３３が記憶されている。ＲＡＭ７３２は通常、処理ユニット７２０がすぐにアクセス可能な、かつ／または処理ユニット７２０が現在作用している、データおよび／またはプログラムモジュールを含む。限定ではなく例として、図７には、オペレーティングシステム７３４、アプリケーションプログラム７３５、その他のプログラムモジュール７３６、プログラムデータ７３７を示す。
【００４１】
コンピュータシステム７１０は、その他の取り外し式／固定式、揮発性／不揮発性コンピュータ記憶媒体を備えることもできる。例にすぎないが図７には、固定式で不揮発性の磁気媒体に対して読み書きするハードディスクドライブ７４１と、取り外し式な不揮発性の磁気ディスク７５２に対して読み書きする磁気ディスクドライブ７５１と、ＣＤ  ＲＯＭ、ＣＤＲＷ、ＤＶＤ、またはその他の光媒体など取り外し式な不揮発性の光ディスク７５６に対して読み書きする光ディスクドライブ７５５を示す。この例示的な動作環境で使用することのできるその他の取り外し式／固定式、揮発性／不揮発性コンピュータ記憶媒体には、限定しないが磁気テープカセット、フラッシュメモリカード、ディジタル多用途ディスク、ディジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどが含まれる。ハードディスクドライブ７４１は通常、インタフェース７４０などの固定式メモリインタフェースを介してシステムバス７２１に接続され、磁気ディスクドライブ７５１および光ディスクドライブ７５５は通常、インタフェース７５０などの取り外し式メモリインタフェースでシステムバス７２１に接続される。
【００４２】
以上に論じ図７に示したドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、その他のデータの記憶域をコンピュータシステム７１０に提供する。例えば図７には、ハードディスクドライブ７４１がオペレーティングシステム７４４、アプリケーションプログラム７４５、その他のプログラムモジュール７４６、プログラムデータ７４７を記憶しているのが示されている。これらのコンポーネントは、オペレーティングシステム７３４、アプリケーションプログラム７３５、その他のプログラムモジュール７３６、プログラムデータ７３７と同じものとすることもでき、異なるものとすることもできることに留意されたい。ここでは、オペレーティングシステム７４４、アプリケーションプログラム７４５、その他のプログラムモジュール７４６、プログラムデータ７４７が少なくとも異なるコピーであることを示すために、異なる番号を付けてある。ユーザは、キーボード７６２、マウスやトラックボールやタッチパッドと一般に呼ばれるポインティングデバイス７６１などの入力デバイスを介して、コンピュータシステム７１０にコマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロホン、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナなどを含めることができる。これらおよびその他の入力デバイスは、システムバス７２１に結合されたユーザ入力インタフェース７６０を介して処理ユニット７２０に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など、その他のインタフェースおよびバス構造で接続されてもよい。モニタ７９１または他のタイプの表示デバイスも、ビデオインタフェース７９０などのインタフェースを介してシステムバス７２１に接続され、ビデオインタフェース７９０は、ビデオメモリ（図示せず）と通信することができる。モニタ７９１に加えて、コンピュータシステムは、スピーカ７９７やプリンタ７９６など、その他の周辺出力デバイスも備えることができ、これらは出力周辺インタフェース７９５を介して接続することができる。
【００４３】
コンピュータシステム７１０は、リモートコンピュータ７８０など１つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境または分散環境で動作することができる。リモートコンピュータ７８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードとすることができ、通常はパーソナルコンピュータ７１０に関して上述した要素の多くまたはすべてを備えるが、図７にはメモリ記憶デバイス７８１だけが示してある。図７に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）７７１およびワイドエリアネットワーク（ＷＡＮ）７７３を含むが、その他のネットワーク／バスを含むこともできる。このようなネットワーキング環境は、家庭、オフィス、企業全体のコンピュータネットワーク、イントラネット、インターネットでよくみられる。
【００４４】
ＬＡＮネットワーキング環境で使用されるときは、コンピュータシステム７１０は、ネットワークインタフェースまたはアダプタ７７０を介してＬＡＮ７７１に接続される。ＷＡＮネットワーキング環境で使用されるときは、コンピュータシステム７１０は通常、インターネットなどのＷＡＮ７７３を介した通信を確立するためのモデム７７２またはその他の手段を備える。モデム７７２は内蔵でも外付けでもよく、ユーザ入力インタフェース７６０またはその他の適切な機構を介してシステムバス７２１に接続することができる。ネットワーク化された環境では、コンピュータシステム７１０に関して示したプログラムモジュールまたはその一部をリモートのメモリ記憶デバイスに記憶することができる。限定ではなく例として、図７では、リモートアプリケーションプログラム７８５がメモリデバイス７８１上にあるのが示されている。図示のネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立するための他の手段を使用してもよいことは理解されるであろう。
【００４５】
パーソナルコンピューティングとインターネットの収束に鑑みて、様々な分散コンピューティングフレームワークが開発されてきており、また開発されつつある。アプリケーションおよびコンピューティングデバイスのためのシームレスに相互運用可能なウェブ対応のインタフェースが、個人にもビジネスユーザにも同様に提供され、それにより、コンピューティングアクティビティはますますウェブブラウザ指向またはネットワーク指向になっている。
【００４６】
例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＭＩＣＲＯＳＯＦＴ（登録商標）の．ＮＥＴ（商標）プラットフォームは、サーバと、ウェブベースのデータ記憶などのビルディングブロックサービスと、ダウンロード可能なデバイスソフトウェアとを含む。本明細書の例示的な実施形態を、コンピューティングデバイス上にあるソフトウェアに関して述べたが、本発明の一実施形態の１つまたは複数の部分は、オペレーティングシステムを介して、あるいはアプリケーションプログラミングインタフェース（ＡＰＩ）、またはコプロセッサと表示デバイスと要求元オブジェクトとのいずれかの間の「ミドルマン」オブジェクトを介して実施することもでき、したがって操作は、．ＮＥＴ（商標）の言語およびサービスのすべてによって、ならびにその他の分散コンピューティングフレームワークによって、実施、サポート、またはアクセスすることができる。
【００４７】
前述のように、本発明の例示的な実施形態を様々なコンピューティングデバイスおよびネットワークアーキテクチャに関して述べたが、基礎をなす概念は、復旧のアンドゥ段階の間にデータベースへのアクセスを達成するのが望ましい任意のコンピューティングデバイスまたはシステムに適用することができる。したがって、本発明の実施形態に関して述べた方法およびシステムは、様々なアプリケーションおよびデバイスに適用することができる。本発明では、様々な選択肢の代表として例示的なプログラミング言語、名前、例が選択されているが、これらの言語、名前、例は限定的なものではない。本発明の実施形態によって達成されるのと同じまたは同様のまたは等価なシステムおよび方法を達成するオブジェクトコードを提供する方法が多数あることは、当業者なら理解するであろう。
【００４８】
本明細書に述べた様々な技法は、ハードウェアまたはソフトウェア、あるいは適切な場合はこれらの組合せに関して実施することができる。したがって、本発明の方法および装置、あるいはそのいくつかの態様または部分は、フロッピー（登録商標）ディスケット、ＣＤ‐ＲＯＭ、ハードドライブ、またはその他の任意の機械可読記憶媒体など、有形の媒体に組み入れられたプログラムコード（すなわち命令）の形をとることができ、プログラムコードがコンピュータなどのマシンによってロードされ実行されると、マシンは本発明を実施するための装置になる。プログラムコードがプログラム可能コンピュータ上で実行される場合、コンピューティングデバイスは一般に、プロセッサと、プロセッサによって読取り可能な記憶媒体（揮発性と不揮発性のメモリおよび／または記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えることになる。例えばデータ処理ＡＰＩなどを使用して本発明の実施形態を利用することのできる１つまたは複数のプログラムは、コンピュータと通信するために高レベルのプロシージャ指向またはオブジェクト指向プログラミング言語で実施されることが好ましい。ただしプログラムは、望むならアセンブリ言語または機械語で実施することもできる。いずれの場合も、言語はコンパイルまたは解釈される言語とすることができ、ハードウェア実装形態と組み合わせることができる。
【００４９】
様々な図の好ましい実施形態に関して本発明の態様を述べたが、本発明と同様の機能を実施するために、本発明を逸脱することなく他の同様の実施形態を使用することもでき、述べた実施形態に修正および追加を施すこともできることを理解されたい。さらに、特に無線ネットワーク化デバイスの数が増加し続けているため、ハンドヘルドデバイスオペレーティングシステムおよびその他の特定用途向けオペレーティングシステムを含めて、様々なコンピュータプラットフォームが企図されることも強調しておくべきである。したがって、特許請求される本発明は、どんな単一の実施形態にも限定すべきではなく、添付の特許請求の範囲に従った幅および範囲で解釈すべきである。
【図面の簡単な説明】
【００５０】
【図１】典型的なデータベース復旧のタイムラインの図である。
【図２】本発明の第１の実施形態のアーキテクチャを示すブロック図である。
【図３】本発明のロック／解除態様の方法を示す流れ図である。
【図４】本発明のミラーデータベース態様を示すブロック図である。
【図５】本発明の第２の実施形態のアーキテクチャを示すブロック図である。
【図６】本発明のリドゥバージョン読取り態様の方法を示す流れ図である。
【図７】本発明の態様を実施することのできる例示的なコンピューティング環境を示すブロック図である。
【図１】
2007531156.tif 000003
【図２】
2007531156.tif 000004
【図３】
2007531156.tif 000005
【図４】
2007531156.tif 000006
【図５】
2007531156.tif 000007
【図６】
2007531156.tif 000008
【図７】
2007531156.tif 000009
【手続補正書】
【提出日】平成19年7月30日(2007.7.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データベース復旧中にデータベースにクエリする方法であって、
ログファイル・トランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイル・トランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全な各トランザクションに関連するデータ項目に対して第１のロックタイプをアサートすること、
前記データベース中で反映されているトランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを削除することであって、前記トランザクションを削除することによって、前記不完全なトランザクションに関連するデータ項目に対する第１のロックタイプがアサート解除されること、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショット・クエリを許可することであって、第１のデータ項目に対して第１のロックタイプが検出された場合は、前記スナップショット・クエリは前記第１のロックタイプがアサート解除されるまで遅延されること
を含むことを特徴とする方法。
【請求項２】
第１のロックタイプをアサートすることは、行、ページ、テーブル、インデックスのうちの少なくとも１つをアサートすることを含むことを特徴とする請求項１記載の方法。
【請求項３】
第１のロックタイプをアサートすることは、リドゥーロックをアサートすることを含むことを特徴とする請求項１記載の方法。
【請求項４】
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショット・クエリを許可することを更に含み、第２のトランザクションに対して第２のロックタイプが検出された場合は、前記第２のトランザクションの旧バージョンから読取りが行われることを特徴とする請求項１記載の方法。
【請求項５】
前記第２のロックタイプは、読取りロックと書込みロックのうちの一方を含むことを特徴とする請求項４記載の方法。
【請求項６】
データベースの復旧中に前記データベースにクエリするシステムであって、
ソフトウェア・コンポーネントの命令を有するメモリにアクセスするプロセッサと、
ソフトウェア・コンポーネントを備え、
前記ソフトウェア・コンポーネントは、
ログファイル・トランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイル・トランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションによってリドゥー・オペレーションを実施すること、
コミットされていないトランザクションによってアンドゥー・オペレーションを実施すること、
前記アンドゥー・オペレーションと同時に行われる前記データベースに対するスナップショット・クエリを許可すること、
前記スナップショット・クエリのデータ項目に関係するロックをテストすることであって、リドゥー・オペレーションに関係するロックが検出された場合は前記データ項目の旧バージョンから読取りを行うこと
を実行することを特徴とするシステム。
【請求項７】
ロックは、行、ページ、テーブル、インデックスのうちの１つのリドゥー・オペレーション時にアサートされることを特徴とする請求項６記載のシステム。
【請求項８】
クエリ結果を見るための表示装置を更に備えることを特徴とする請求項６記載のシステム。
【請求項９】
データベースの復旧中に前記データベースにクエリする方法を実施するためのコンピュータ実行可能命令を記録したコンピュータ読み取り可能な記録媒体であって、
前記方法は、
ログファイル・トランザクションを含むログファイルを読み取って不完全なトランザクションを見つけること、
前記ログファイル・トランザクションを、前記データベース中で反映されているトランザクションと比較して、未入力トランザクションを見つけること、
前記未入力トランザクションを前記データベースに挿入すること、
不完全な各トランザクションに関連するデータ項目に対して第１のロックタイプをアサートすること、
前記データベース中で反映されているトランザクションが前記ログファイル中でコミットされていない場合に前記トランザクションを削除することであって、前記トランザクションを削除することによって、前記不完全なトランザクションに関連するデータ項目に対する第１のロックタイプがアサート解除されること、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショット・クエリを許可することであって、第１のデータ項目に対して第１のロックタイプが検出された場合は、前記スナップショット・クエリは前記第１のロックタイプがアサート解除されるまで遅延されること
を含むことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１０】
前記方法は、
不完全なトランザクションの削除と同時に行われる前記データベースのスナップショット・クエリを許可することを更に含み、第２のトランザクションに対して第２のロックタイプが検出された場合は、前記第２のトランザクションの旧バージョンから読取りを行うことを特徴とする請求項９記載のコンピュータ読み取り可能な記録媒体。
【国際調査報告】
2007531156.tif 000010