ファイル復元の実行 (完全復旧モデル)

このトピックは、複数のファイルまたはファイル グループが含まれている、完全復旧モデルまたは一括読み込み復旧モデルを使用するデータベースだけに関連しています。

ファイル復元の目標は、データベース全体を復元することなく 1 つ以上の破損したファイルを復元することです。SQL Server のすべてのエディションでは、データベースがオフラインのときにファイル復元を実行できます (オフライン ファイル復元)。SQL Server 2005 Standard、SQL Server 2005 Express Edition、および SQL Server 2005 Workgroup 以降のバージョンでは、オフライン復元のみがサポートされるため、プライマリ ファイル グループに対してファイル復元を実行するときは、必ずデータベースがオフラインになっている必要があります。SQL Server 2005 Enterprise Edition 以降のバージョンでは、データベースが既にオフラインであれば、オフライン復元が使用されます。

SQL Server 2005 Enterprise Edition 以降のバージョンでは、ファイル復元中にデータベースがオンラインであれば、データベースをオンラインにしたままファイル復元を実行できます。データベースがオンラインのときにファイルを復元および復旧することを、オンライン ファイル復元と呼びます。

これらのファイル復元のシナリオは次のとおりです。

  • オフライン ファイル復元

    オフライン ファイル復元では、破損したファイルまたはファイル グループを復元する間、データベースはオフラインになります。データベースは、復元シーケンスの最後にオンラインになります。

  • オンライン ファイル復元

    SQL Server 2005 Enterprise Edition 以降のバージョンでは、データベースがオンラインのときは、ファイル復元は自動的にオンラインで実行されます。ただし、復元中のファイルが含まれているファイル グループはすべてオフラインです。オフライン ファイル グループ内のすべてのファイルが復旧されると、そのファイル グループは自動的にオンラインになります。オンライン復元の詳細については、「オンライン復元の実行」を参照してください。

    注意

    クエリや更新の対象にできるのは、オンラインのファイル グループだけです。復元中または復旧中のファイルを含むファイル グループなど、オフラインのファイル グループにアクセスしようとすると、エラーが発生します。

復元中のファイル グループが読み取り/書き込み可能である場合、最後に実行されたデータ バックアップまたは差分バックアップを復元した後、チェーンが途切れていないログ バックアップを適用する必要があります。これにより、ログ ファイル内の現在アクティブなログ レコードの状態がファイル グループに反映されます。復旧ポイントは通常ログの末尾付近にありますが、必ずというわけではありません。

復元中のファイル グループが読み取り専用の場合、通常はログ バックアップを適用する必要がないため、スキップされます。ファイルが読み取り専用になった後でバックアップが行われた場合、それが復元する最後のバックアップになります。ロールフォワードは、目的の時点で停止します。

ファイルまたはファイル グループの復元

破損したファイルをファイル バックアップとファイルの差分バックアップから復元するには

  1. アクティブなトランザクション ログのログ末尾のバックアップを作成します。

    ログが破損していることが原因でこの操作を実行できない場合は、データベース全体を復元する必要があります。トランザクション ログのバックアップ方法の詳細については、「トランザクション ログ バックアップの作成」を参照してください。

    重要な注意事項重要

    オフライン ファイル復元では、必ずファイルの復元前にログ末尾のバックアップを行う必要があります。オンライン ファイル復元では、必ずファイルの復元後にログ バックアップを行う必要があります。ファイルを他のデータベースと一貫性のある状態に復旧できるようにする必要があるため、このログ バックアップが必要になります。

  2. 破損したファイルについては、そのファイルの最新のファイル バックアップから復元します。

  3. 差分バックアップがある場合は、復元したファイルごとに最新のファイルの差分バックアップを復元します。

  4. トランザクション バックアップを順番に復元します。復元したファイルの中で最も古いファイルに対応するバックアップの復元から始め、最後に手順 1. で作成したログ末尾のバックアップを復元します。

    データベースを一貫性のある状態にするには、ファイル バックアップより後に作成されたトランザクション ログ バックアップを復元する必要があります。トランザクション ログ バックアップは、復元するファイルに関連のある変更のみが適用されるので、すばやくロールフォワードできます。破損していないファイルに関しては、コピーされずにロールフォワードが行われるので、データベース全体の復元より個別のファイルの復元の方が適している場合があります。ただし、ログ バックアップのチェーンは、全体を読み取る必要があります。

  5. データベースを復旧します。

注意

ファイル バックアップを使用して、データベースを以前の時点の状態に復元することもできます。この操作を行うには、ファイル バックアップの完全なセットを復元してから、一番最近に復元されたファイル バックアップの後の時点までのトランザクション ログ バックアップを順番に復元する必要があります。特定の時点への復旧の詳細については、「バックアップ内の特定の時点へのデータベースの復元」を参照してください。

ファイルおよびファイル グループを復元するには

高度なトピック

オフラインのファイル復元用の Transact-SQL 復元シーケンス (完全復旧モデル)

ファイル復元シナリオは、適切なデータをコピーし、ロールフォワードして、復旧する単一の復元シーケンスで構成されます。

次の Transact-SQL コードは、ファイル復元シナリオの復元シーケンスでの重要な RESTORE オプションを示しています。説明の目的に関係しない構文や詳細は、省略しています。

この例では、NORECOVERY を使用した 2 つのセカンダリ ファイル A と B のオフライン復元を示します。次に、NORECOVERY を使用して 2 つのログ バックアップを適用してから、RECOVERY を使用してログ末尾のバックアップを復元します。この例では、オフライン ファイル復元を行うために、まずファイルをオフラインにします。

--Take the file offline.
ALTER DATABASE database_name MODIFY FILE SET OFFLINE
-- Back up the currently active transaction log.
BACKUP LOG database_name
   TO <tail_log_backup>
   WITH NORECOVERY
GO 
-- Restore the files.
RESTORE DATABASE database_name FILE=<name> 
   FROM <file_backup_of_file_A> 
   WITH NORECOVERY
RESTORE DATABASE database_name FILE=<name> ......
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY
-- Restore the log backups.
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <tail_log_backup> 
   WITH RECOVERY

--Take the file offline.
ALTER DATABASE database_name MODIFY FILE SET OFFLINE
-- Back up the currently active transaction log.
BACKUP LOG database_name
   TO <tail_log_backup>
   WITH NORECOVERY
GO 
-- Restore the files.
RESTORE DATABASE database_name FILE=<name> 
   FROM <file_backup_of_file_A> 
   WITH NORECOVERY
RESTORE DATABASE database_name FILE=<name> ......
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY
-- Restore the log backups.
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <tail_log_backup> 
   WITH RECOVERY

関連項目

参照

概念

その他の技術情報