データベースの完全な復元では、データベース全体を復元することが目標です。 復元中、データベース全体がオフラインになります。 データベースの一部がオンラインになる前に、すべてのデータは、データベースのすべての部分が同じ時点にあり、コミットされていないトランザクションが存在しない一貫したポイントに復旧されます。
完全復旧モデルでは、データ バックアップまたはバックアップを復元した後、後続のすべてのトランザクション ログ バックアップを復元してから、データベースを復旧する必要があります。 これらのログ バックアップの 1 つ内の特定の 復旧ポイント にデータベースを復元できます。 復旧ポイントには、特定の日時、マークされたトランザクション、またはログ シーケンス番号 (LSN) を指定できます。
データベースを復元する場合 (特に完全復旧モデルまたは一括ログ復旧モデルの場合)、単一の復元シーケンスを使用する必要があります。 復元シーケンスは、1 つ以上の復元フェーズを通じてデータを移動する 1 つ以上の復元操作で構成されます。
重要
不明なソースまたは信頼されていないソースからデータベースをアタッチまたは復元しないことをお勧めします。 これらのデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させたりする悪意のあるコードが含まれている可能性があります。 不明なソースまたは信頼されていないソースのデータベースを使用する前に、非運用サーバー上のデータベースで DBCC CHECKDB を実行し、ストアド プロシージャやその他のユーザー定義コードなどのコードをデータベースで調べます。
このトピックでは:
注
以前のバージョンの SQL Server からのバックアップのサポートについては、 RESTORE (Transact-SQL) の「互換性サポート」セクションを参照してください。
障害発生時点へのデータベースの復元
通常、障害発生時点へのデータベースの復旧には、次の基本的な手順が含まれます。
アクティブなトランザクション ログ (ログの末尾と呼ばれます) をバックアップします。 これにより、ログ末尾のバックアップが作成されます。 アクティブなトランザクション ログが使用できない場合、ログのその部分のすべてのトランザクションが失われます。
重要
一括ログ復旧モデルでは、一括ログ操作を含むすべてのログをバックアップするには、データベース内のすべてのデータ ファイルにアクセスする必要があります。 データ ファイルにアクセスできない場合は、トランザクション ログをバックアップできません。 その場合は、最新のログ バックアップ以降に行われたすべての変更を手動でやり直す必要があります。
詳細については、「 Tail-Log バックアップ (SQL Server)」を参照してください。
データベースを復旧せずに最新のデータベースの完全バックアップを復元します (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。
差分バックアップが存在する場合は、データベースを復旧せずに最新のバックアップを復元します (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY)。
最新の差分バックアップを復元すると、復元する必要があるログ バックアップの数が減ります。
復元したバックアップの後に作成された最初のトランザクション ログ バックアップから始めて、NORECOVERY を使用してログを順番に復元します。
データベースを復旧します (RESTORE DATABASE database_name WITH RECOVERY)。 または、この手順を最後のログ バックアップの復元と組み合わせることができます。
次の図は、この復元シーケンスを示しています。 障害が発生した後 (1)、ログ末尾のバックアップが作成されます (2)。 次に、障害が発生した時点にデータベースが復元されます。 これには、データベース バックアップの復元、後続の差分バックアップ、差分バックアップの後に作成されたすべてのログ バックアップ (ログ末尾のバックアップを含む) の復元が含まれます。
発生時
注
データベース バックアップを別のサーバー インスタンスに復元する場合は、「 バックアップと復元を使用したデータベースのコピー」を参照してください。
基本的な Transact-SQL RESTORE 構文
前の図の復元シーケンスの基本的な RESTORETransact-SQL 構文は次のとおりです。
RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;
RESTORE LOG database FROM log_backup WITH NORECOVERY;
追加のログ バックアップごとに、このログ復元手順を繰り返します。
RESTORE DATABASE database WITH RECOVERY;
例: 障害時点への復旧 (Transact-SQL)
次の Transact-SQL 例は、データベースを障害発生時点に復元する復元シーケンスの重要なオプションを示しています。 この例では、データベースのログ末尾バックアップを作成します。 次に、データベースの完全バックアップとログ バックアップを復元し、ログ末尾のバックアップを復元します。 この例では、別の最後の手順でデータベースを復旧します。
注
この例では、データベースの完全バックアップ (SQL Server) の「完全復旧モデルでのデータベース バックアップの使用」セクションで作成されたデータベース バックアップとログ バックアップを使用します。 データベースバックアップの前に、 AdventureWorks2012 サンプル データベースが完全復旧モデルを使用するように設定されていました。
USE master;
--Create tail-log backup.
BACKUP LOG AdventureWorks2012
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH NORECOVERY;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=1,
NORECOVERY;
--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2012
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=2,
NORECOVERY;
--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2012
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=3,
NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;
GO
ログ バックアップ内のポイントへのデータベースの復元
完全復旧モデルでは、通常、データベースの完全な復元は、ログ バックアップ内の特定の時点、マークされたトランザクション、または LSN に復旧できます。 ただし、一括ログ復旧モデルでは、ログ バックアップに一括ログの変更が含まれている場合、ポイントインタイム リカバリーは実行できません。
ポイントインタイム リストアシナリオの例
次の例では、データベースの完全バックアップが毎日午前 0 時に作成され、データベースの差分バックアップが 1 時間、月曜日から土曜日に作成され、トランザクション ログ バックアップが 1 日 10 分ごとに作成されるミッション クリティカルなデータベース システムを想定しています。 データベースを水曜日の午前 5 時 19 分の状態に復元するには、次の操作を行います。
火曜日の午前 0 時に作成されたデータベースの完全バックアップを復元します。
水曜日の午前 5 時に作成されたデータベースの差分バックアップを復元します。
水曜日の午前 5 時 10 分に作成されたトランザクション ログ バックアップを適用します。
水曜日の午前 5 時 20 分に作成されたトランザクション ログ バックアップを適用し、復旧プロセスが午前 5 時 19 分より前に発生したトランザクションにのみ適用されるように指定します。
または、木曜日の午前 3 時 4 分にデータベースをその状態に復元する必要があるが、木曜日の午前 3 時に作成されたデータベースの差分バックアップが使用できない場合は、次の操作を行います。
水曜日の午前 0 時に作成されたデータベース バックアップを復元します。
木曜日の午前 2 時に作成されたデータベースの差分バックアップを復元します。
木曜日の午前 2 時 10 分から午前 3 時に作成されたすべてのトランザクション ログ バックアップを適用します。
木曜日の午前 3 時 10 分に作成されたトランザクション ログ バックアップを適用し、午前 3 時 4 分に復旧プロセスを停止します。
注
特定の時点への復元の例については、「特定の時点 への SQL Server データベースの復元 (完全復旧モデル)」を参照してください。
関連タスク
データベースの完全バックアップを復元するには
データベースの差分バックアップを復元するには
トランザクション ログ バックアップを復元するには
SQL Server 管理オブジェクト (SMO) を使用してバックアップを復元するには
ログ バックアップ内のポイントにデータベースを復元するには
こちらもご覧ください
RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
トランザクション ログ バックアップの適用 (SQL Server)
sp_addumpdevice (Transact-SQL)
データベースの完全バックアップ (SQL Server)
差分バックアップ (SQL Server)
バックアップの概要 (SQL Server)
復元と復旧の概要 (SQL Server)