障害発生時点まで復元する方法 (Transact-SQL)
このトピックでは、障害が発生する直前の状態まで復元する方法について説明します。このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用しているデータベースのみを対象としています。
障害発生時点まで復元するには
次の基本的な BACKUP ステートメントを実行して、ログの末尾をバックアップします。
BACKUP LOG <database_name>TO <backup_device> WITH NORECOVERY, NO_TRUNCATE; BACKUP LOG <database_name>TO <backup_device> WITH NORECOVERY, NO_TRUNCATE;
次の基本的な RESTORE DATABASE ステートメントを実行して、データベースの完全バックアップを復元します。
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;
必要に応じて、次の基本的な RESTORE DATABASE ステートメントを実行して、データベースの差分バックアップを復元します。
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;
RESTORE LOG ステートメントで WITH NORECOVERY を指定して、手順 1. で作成したログ末尾のバックアップを含む各トランザクション ログ バックアップを適用します。
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
次の RESTORE DATABASE ステートメントを実行して、データベースを復旧します。
RESTORE DATABASE <database_name> WITH RECOVERY; RESTORE DATABASE <database_name> WITH RECOVERY;
使用例
この例を実行する前に、次の準備作業を完了する必要があります。
AdventureWorks2008R2 データベースの既定の復旧モデルは、単純復旧モデルです。この復旧モデルでは障害発生時点までの復旧がサポートされていないため、次の ALTER DATABASE ステートメントを実行して、完全復旧モデルが使用されるように AdventureWorks2008R2 を設定します。
USE master; GO ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL; USE master; GO ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL;
次の BACKUP ステートメントを使用して、このデータベースの完全バックアップを作成します。
BACKUP DATABASE AdventureWork2008R2s TO DISK = 'C:\AdventureWorks2008R2_Data.bck'; BACKUP DATABASE AdventureWork2008R2s TO DISK = 'C:\AdventureWorks2008R2_Data.bck';
次のように、定期的なログ バックアップを作成します。
BACKUP LOG AdventureWorks2008R2 TO DISK = 'C:\AdventureWorks2008R2_Log.bck'; BACKUP LOG AdventureWorks2008R2 TO DISK = 'C:\AdventureWorks2008R2_Log.bck';
次の例では、AdventureWorks2008R2 データベースのログ末尾のバックアップを作成した後に、以前作成したバックアップを復元します (この手順は、ログ ディスクにアクセスできることを前提としています)。
まず、データベースのログ末尾のバックアップを作成して、アクティブなログをキャプチャし、データベースを復元中の状態にしておきます。次に、データベースのバックアップを復元し、以前作成した定期的なログ バックアップを適用し、ログ末尾のバックアップを適用します。最後に、別の手順でデータベースを復旧します。
注 |
---|
既定の動作では、最終的なバックアップを復元するステートメントに、データベースの復旧が含まれています。 |
/* Example of restoring a to the point of failure */
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.
BACKUP LOG AdventureWorks2008R2
TO DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 2: Restore the full database backup.
RESTORE DATABASE AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Data.bck'
WITH NORECOVERY;
GO
-- Step 3: Restore the first transaction log backup.
RESTORE LOG AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 4: Restore the tail-log backup.
RESTORE LOG AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 5: Recover the database.
RESTORE DATABASE AdventureWorks2008R2
WITH RECOVERY;
GO
/* Example of restoring a to the point of failure */
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.
BACKUP LOG AdventureWorks2008R2
TO DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 2: Restore the full database backup.
RESTORE DATABASE AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Data.bck'
WITH NORECOVERY;
GO
-- Step 3: Restore the first transaction log backup.
RESTORE LOG AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 4: Restore the tail-log backup.
RESTORE LOG AdventureWorks2008R2
FROM DISK = 'C:\AdventureWorks2008R2_Log.bck'
WITH NORECOVERY;
GO
-- Step 5: Recover the database.
RESTORE DATABASE AdventureWorks2008R2
WITH RECOVERY;
GO