データベースの全体復元 (完全復旧モデル)Complete Database Restores (Full Recovery Model)

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

データベースの全体復元の目的は、データベース全体を復元することです。In a complete database restore, the goal is to restore the whole database. 復元の実行中は、データベース全体がオフラインになります。The whole database is offline for the duration of the restore. データベースの各部がオンラインになる前に、すべてのデータが一貫性のある状態に復旧されます。一貫性のある状態とは、データベースのすべての部分が同じ時点にあり、コミットされていないトランザクションが存在しない状態を示します。Before any part of the database can come online, all data is recovered to a consistent point in which all parts of the database are at the same point in time and no uncommitted transactions exist.

完全復旧モデルでは、1 つまたは複数のデータ バックアップを復元した後、それ以降のトランザクション ログ バックアップをすべて復元してから、データベースを復旧する必要があります。Under the full recovery model, after you restore your data backup or backups, you must restore all subsequent transaction log backups and then recover the database. そのいずれかのログ バックアップ内の特定の 復旧ポイント までデータベースを復元することができます。You can restore a database to a specific recovery point within one of these log backups. 復旧ポイントとは、特定の日時、マークされたトランザクション、またはログ シーケンス番号 (LSN) を指します。The recovery point can be a specific date and time, a marked transaction, or a log sequence number (LSN).

特に完全復旧モデルと一括ログ復旧モデルでは、データベースを復元するときに、単一の復元シーケンスを使用する必要があります。When restoring a database, particularly under the full recovery model or bulk-logged recovery model, you should use a single restore sequence. 復元シーケンス は、1 つ以上の復元フェーズによってデータを移動する、1 つ以上の復元操作で構成されます。A restore sequence consists of one or more restore operations that move data through one or more of the phases of restore.

信頼されていないソースUntrusted sources

不明なソースや信頼されていないソースからのデータベースのアタッチまたは復元は_実行しない_ことをお勧めします。We recommend that you do not attach or restore databases from unknown or untrusted sources. そのようなデータベースには、意図しない Transact-SQLTransact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更することによりエラーを発生させる悪意のあるコードが含まれている可能性があります。These databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. 不明なソースや信頼されていないソースからのデータベースを使用する場合は、事前に運用サーバー以外のサーバー上のデータベースで DBCC CHECKDB を実行してください。Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a non-production server. さらに、ストアド プロシージャやその他のユーザー定義コードなどのデータベース内に記述されたユーザーのコードを調べてください。Also, examine the user-written code in the database, such as stored procedures or other user-defined code.

以前のバージョンからのバックアップBackups from earlier versions

以前のバージョンの SQL ServerSQL Serverからのバックアップに対するサポートの情報については、「 RESTORE (Transact-SQL)」の「互換性サポート」のセクションを参照してください。For information about support for backups from earlier versions of SQL ServerSQL Server, see the "Compatibility Support" section of RESTORE (Transact-SQL).

障害発生時点へのデータベースの復旧Restoring a Database to the Point of Failure

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

通常、障害が発生した時点までデータベースを復旧するには、次の基本的な手順が必要です。Typically, recovering a database to the point of failure involves the following basic steps:

  1. アクティブなトランザクション ログ (ログの末尾と呼ばれます) をバックアップします。Back up the active transaction log (known as the tail of the log). これにより、ログ末尾のバックアップが作成されます。This creates a tail-log backup. アクティブなトランザクション ログを使用できない場合は、そのログ部分にあるすべてのトランザクションが失われます。If the active transaction log is unavailable, all transactions in that part of the log are lost.

    重要

    一括ログ復旧モデルで、一括ログ操作が含まれるすべてのログをバックアップするには、データベース内のすべてのデータ ファイルへのアクセス許可が必要です。Under the bulk-logged recovery model, backing up any log that contains bulk-logged operations requires access to all data files in the database. データ ファイルにアクセスできないと、トランザクション ログをバックアップできません。If the data files cannot be accessed, the transaction log cannot be backed up. その場合は、最新のログ バックアップ以降に加えられたすべての変更を手動で再実行する必要があります。In that case, you have to manually redo all changes that were made since the most recent log backup.

    詳細については、「ログ末尾のバックアップ (SQL Server)」を参照してください。For more information, see Tail-Log Backups (SQL Server).

  2. データベースの最新の完全バックアップが復元されますが、データベースは復旧されません (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。Restore the most recent full database backup without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. 差分バックアップが存在する場合は、データベースを復旧しないで最新の差分バックアップを復元します (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY)。If differential backups exist, restore the most recent one without recovering the database (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    最新の差分バックアップを復元した方が、復元する必要のあるログ バックアップの数が少なくて済みます。Restoring the most recent differential backup reduces the number of log backups that must be restored.

  4. バックアップを復元した直後に作成された、最初のトランザクション ログのバックアップから順番に、NORECOVERY を指定してログを復元します。Starting with the first transaction log backup that was created after the backup you just restored, restore the logs in sequence with NORECOVERY.

  5. データベースを復旧します (RESTORE DATABASE database_name WITH RECOVERY)。Recover the database (RESTORE DATABASE database_name WITH RECOVERY). または、この手順を最後のログ バックアップの復元と組み合わせることもできます。Alternatively, this step can be combined with restoring the last log backup.

次の図に、この復元シーケンスを示します。The following illustration shows this restore sequence. (1) 障害が発生した後、(2) ログ末尾のバックアップが作成されます。After a failure occurs (1), a tail-log backup is created (2). 次に、データベースが障害発生時点まで復元されます。Next, the database is restored to the point of the failure. このときに、データベース バックアップと、それ以降の差分バックアップ、および、ログ末尾のバックアップを含め、差分バックアップ後に作成されたすべてのログ バックアップが復元されます。This involves restoring a database backup, a subsequent differential backup, and every log backup taken after the differential backup, including the tail-log backup.

障害発生時点へのデータベースの全体復元Complete database restore to the time of a failure

注意

データベースのバックアップを別のサーバー インスタンスに復元する場合は、「 バックアップと復元によるデータベースのコピー」を参照してください。When you restore a database backup onto a different server instance, see Copy Databases with Backup and Restore.

基本的な Transact-SQL RESTORE 構文Basic Transact-SQL RESTORE Syntax

前の図に示した復元シーケンスの基本的な RESTORETransact-SQLTransact-SQL 構文は次のとおりです。The basic RESTORETransact-SQLTransact-SQL syntax for the restore sequence in the preceding illustration is as follows:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;RESTORE LOG database FROM log_backup WITH NORECOVERY;

    このログの復元手順を、追加のログ バックアップごとに繰り返します。Repeat this restore-log step for each additional log backup.

  4. RESTORE DATABASE database WITH RECOVERY;RESTORE DATABASE database WITH RECOVERY;

例: 障害発生時点への復元 (Transact-SQL)Example: Recovering to the Point of Failure (Transact-SQL)

次の Transact-SQLTransact-SQL の例は、データベースを障害発生時点まで復元する復元シーケンスに不可欠なオプションを示しています。The following Transact-SQLTransact-SQL example shows the essential options in a restore sequence that restores the database to the point of failure. この例では、データベースのログ末尾のバックアップを作成します。The example creates a tail-log backup of the database. 次に、データベースの完全バックアップとログ バックアップを復元してから、ログ末尾のバックアップを復元します。Next, the example restores a full database backup and log backup and then restores the tail-log backup. 最後に、別の手順でデータベースを復旧します。The example recovers the database in a separate, final step.

注意

この例では、「 データベースの完全バックアップ (SQL Server)」の「互換性サポート」のセクションを参照してください。This example uses a database backup and log backup that is created in the "Using Database Backups Under the Full Recovery Model" section in Full Database Backups (SQL Server). AdventureWorks2012AdventureWorks2012 サンプル データベースは完全復旧モデルを使用するように、データベースのバックアップ前に設定されています。Before the database backup, the AdventureWorks2012AdventureWorks2012 sample database was set to use the full recovery model.

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  

ログ バックアップ内の特定の時点へのデータベースの復元Restoring a Database to a Point Within a Log Backup

一般に、完全復旧モデルでは、データベースの全体復元によって、特定の時点、マークされたトランザクション、またはログ バックアップ内の特定の LSN まで復元することができます。Under the full recovery model, a complete database restore can usually be recovered to a point of time, a marked transaction, or an LSN within a log backup. ただし、一括ログ復旧モデルの場合は、一括ログ操作による変更がログ バックアップに含まれていると、特定の時点への復旧はできません。However, under the bulk-logged recovery model, if the log backup contains bulk-logged changes, point-in-time recovery is not possible.

特定の時点への復元のサンプル シナリオSample Point-in-Time Restore Scenarios

ミッションクリティカルなデータベース システムで、データベースの完全バックアップを毎晩午前 0 時に作成し、データベースの差分バックアップを月曜日から土曜日まで 1 時間ごとに作成し、トランザクション ログのバックアップを 1 日中 10 分間隔で作成するとします。The following example assumes a mission-critical database system for which a full database backup is created daily at midnight, a differential database backup is created on the hour, Monday through Saturday, and transaction log backups are created every 10 minutes throughout the day. データベースを水曜日の午前 5 時 19 分の状態に復元するには、To restore the database to the state is was in at 5:19 A.M. 次のようにします。Wednesday, do the following:

  1. 火曜日の午前 0 時に作成したデータベースの完全バックアップを復元します。Restore the full database backup that was created Tuesday at midnight.

  2. 午前 5 時に作成したデータベースの差分バックアップを復元します。Restore the differential database backup that was created at 5:00 A.M. 適用します。on Wednesday.

  3. 水曜日の午前 5 時 10 分に作成したトランザクション ログのバックアップをApply the transaction log backup that was created at 5:10 A.M. 適用します。on Wednesday.

  4. 水曜日の午前 5 時 20 分に作成したトランザクション ログのバックアップを適用し、Apply the transaction log backup that was created 5:20 A.M. 午前 5 時 19 分までに発生したトランザクションにだけ復旧処理を適用するように指定します。on Wednesday, specifying that the recovery process applies only to transactions that occurred before 5:19 A.M.

データベースを木曜日の午前 3 時 4 分の状態に復元する必要があり、Alternatively, if the database needs to be restored to its state at 3:04 A.M. 木曜日の午前 3 時に作成したデータベースの差分バックアップがない場合は、Thursday, but the differential database backup that was created at 3:00 A.M. 次のようにします。Thursday is unavailable, do the following:

  1. 水曜日の午前 0 時に作成したデータベース バックアップを復元します。Restore the database backup that was created Wednesday at midnight.

  2. 木曜日の午前 2 時に作成したデータベースの差分バックアップをRestore the differential database backup that was created at 2:00 A.M. 適用します。on Thursday.

  3. 木曜日の午前 2 時 10 分から 3 時までに作成したすべてのApply all the transaction log backups created from 2:10 A.M. トランザクション ログのバックアップをto 3:00 A.M. 適用します。on Thursday.

  4. 木曜日の午前 3 時 10 分に作成したトランザクション ログ バックアップを適用し、Apply the transaction log backup that was created at 3:10 A.M. 復旧処理を午前 3 時 4 分で停止します。on Thursday, stopping the recovery process at 3:04 A.M.

注意

特定の時点への復元の例については、「 SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル)」の「互換性サポート」のセクションを参照してください。For an example of a point-in-time restore, see Restore a SQL Server Database to a Point in Time (Full Recovery Model).

関連タスクRelated Tasks

データベースの完全バックアップを復元するにはTo restore a full database backup

データベースの差分バックアップを復元するにはTo restore a differential database backup

トランザクション ログ バックアップを復元するにはTo restore a transaction log backup

SQL Server 管理オブジェクト (SMO) を使用してバックアップを復元するにはTo restore a backup by using SQL Server Management Objects (SMO)

ログ バックアップ内の特定の時点までデータベースを復元するにはTo restore a database to a point within a log backup

参照See Also

RESTORE (Transact-SQL) RESTORE (Transact-SQL)
BACKUP (Transact-SQL) BACKUP (Transact-SQL)
トランザクション ログ バックアップの適用 (SQL Server) Apply Transaction Log Backups (SQL Server)
sp_addumpdevice (Transact-SQL) sp_addumpdevice (Transact-SQL)
データベースの完全バックアップ (SQL Server) Full Database Backups (SQL Server)
差分バックアップ (SQL Server) Differential Backups (SQL Server)
バックアップの概要 (SQL Server) Backup Overview (SQL Server)
復元と復旧の概要 (SQL Server)Restore and Recovery Overview (SQL Server)