ロールフォワード中の追加ファイル作成の管理

一般に、完全バックアップ後のファイルとファイル グループへの変更は、ユーザーに意識させずに処理されます。ファイル グループの前回のバックアップ後にデータベースにファイルが追加されている場合、データベースを復元するための最も容易な方法は、復元されたデータベース内にすべてのファイルが自動的に再作成されるようにすることです。ただし、この場合破損していない読み取り専用のファイルも不必要に再作成されます。復元を使用して既知の特定された問題を修復するときは、問題が発生したファイルだけを復元することで、復元のパフォーマンスを最適化することができます。

注意

削除されると SQL Server データベース エンジンが予測しているファイルが含まれているバックアップを復元すると、SQL Server データベース エンジンはこれらのファイルのデータのコピー フェーズと再実行フェーズをスキップします。これらのフェーズの詳細については、「SQL Server でのバックアップの復元と復旧の動作について」を参照してください。

以下のように、復元によってファイルが作成されるかどうかは、ファイルまたはページを RESTORE DATABASE ステートメントに指定するかどうかによって異なります。

  • 特定のファイルまたはページを指定しない場合

    これは、通常のシナリオです。ファイルをデータベースに追加するログ エントリが検出された場合、復元によって自動的にファイルが作成され、そのファイルがロールフォワード セットに追加されます。正確な動作は、任意のファイル グループを RESTORE DATABASE ステートメントに指定するかどうかによって異なります。ファイル グループを指定しないと、新しいファイルがすべて作成され、ロールフォワード セットに追加されます。任意のファイル グループを指定すると、新しいファイルが作成され、そのファイルが指定されたファイル グループに所属する場合にのみ、ロールフォワード セットに追加されます。

    ベスト プラクティス : ほとんどの復元では、ログ記録されたトランザクションによって作成されたすべてのファイルを自動的に再作成できるように、特定のファイルを指定しないようにします。

  • 特定のファイルまたはページを指定する場合

    特定のファイルまたはページを RESTORE DATABASE ステートメントに指定すると、正確なロールフォワード セットが定義されます。ファイルまたはページを指定すると、指示に正確に従って復元が行われ、指定されたアイテムだけが復元されます。

    指定されていないファイルは正常なファイルであると見なされ、ログから作成されません。したがって、ファイルの追加操作を含むログ バックアップを復元するときは、追加したファイル名を RESTORE ステートメントに指定する必要があります。

このトピックの残りの部分では、ファイルの追加操作を含むファイルを識別する方法、およびこれらのファイルを復元シーケンス中に確実に再作成する方法について説明します。

ファイルの追加操作を含むログ ファイルの識別

以下の方法で、ファイルの追加操作を含むログ ファイルを識別できます。

  • ファイルの作成 LSN (create_lsn) を使用できます。この LSN は、sys.database_files カタログ ビューと sys.master_files カタログ ビューのどちらにも表示されます。

  • msdb のバックアップ履歴テーブルから、または RESTORE FILELISTONLY を使用して、バックアップのファイル内容に関する情報を取得できます。詳細については、「RESTORE FILELISTONLY (Transact-SQL)」を参照してください。

完全バックアップのないファイルまたはページの復元

ログの復元または差分復元でファイルの一覧、ページの一覧、またはファイル グループを指定できます。この機能により、データベースの完全バックアップが存在しないファイルやページを復元できます。差分バックアップまたはログ バックアップからファイルやページを復元することは、完全バックアップを使用して復元シーケンスを開始する必要があるという規則の例外です。

ファイルの差分バックアップから復元するための基本構文は次のとおりです。

RESTORE DATABASE database_name <file_filegroup_page_list> FROM <differential backup>

ログ バックアップから復元するための基本構文は次のとおりです。

RESTORE LOG database_name <file_filegroup_page_list> FROM <log backup>