SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル)Restore a SQL Server Database to a Point in Time (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

このトピックでは、 SQL Server 2017SQL Server 2017 または SQL Server Management StudioSQL Server Management Studio を使用して、 Transact-SQLTransact-SQLのデータベースを特定の時点まで復元する方法について説明します。This topic describes how to restore a database to a point in time in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用する SQL ServerSQL Server データベースにのみ関連しています。This topic is relevant only for SQL ServerSQL Server databases that use the full or bulk-logged recovery models.

重要

一括ログ復旧モデルでは、ログ バックアップに一括ログ記録された変更内容が含まれていると、そのバックアップ内の特定の時点への復旧を行うことができません。Under the bulk-logged recovery model, if a log backup contains bulk-logged changes, point-in-time recovery is not possible to a point within that backup. データベースは、トランザクション ログ バックアップの終了時点へ復旧する必要があります。The database must be recovered to the end of the transaction log backup.

作業を開始する準備Before You Begin

推奨事項Recommendations

  • 特定の復元時点が不明な場合の STANDBY を使用した検索Use STANDBY to find unknown point in time.

  • 復元シーケンスの早い段階での特定時点の指定Specify the point in time early in a restore sequence

セキュリティSecurity

PermissionsPermissions

復元するデータベースが存在しない場合、ユーザーは RESTORE を実行できる CREATE DATABASE 権限を使用する必要があります。If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. データベースが存在する場合、既定では、RESTORE 権限は sysadmin 固定サーバー ロールおよび dbcreator 固定サーバー ロールのメンバーと、データベースの所有者 (dbo) に与えられています (FROM DATABASE_SNAPSHOT オプションを使用する場合、データベースは常に存在します)。If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

RESTORE 権限は、サーバーでメンバーシップ情報を常に確認できるロールに与えられます。RESTORE permissions are given to roles in which membership information is always readily available to the server. 固定データベース ロールのメンバーシップは、データベースがアクセス可能で破損していない場合にのみ確認することができますが、RESTORE の実行時にはデータベースがアクセス可能で損傷していないことが必ずしも保証されないため、 db_owner 固定データベース ロールのメンバーには RESTORE 権限は与えられません。Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

SQL Server Management Studio の使用Using SQL Server Management Studio

特定の時点にデータベースを復元するにはTo restore a database to a point in time

  1. オブジェクト エクスプローラーで、 SQL Server データベース エンジンSQL Server Database Engineの適切なインスタンスに接続し、サーバー ツリーを展開します。In Object Explorer, connect to the appropriate instance of the SQL Server データベース エンジンSQL Server Database Engine, and expand the server tree.

  2. [データベース] を展開します。Expand Databases. 復元するデータベースに応じて、ユーザー データベースを選択するか、 [システム データベース] を展開してシステム データベースを選択します。Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. データベースを右クリックして [タスク] をポイントし、 [復元] をポイントして、 [データベース] をクリックします。Right-click the database, point to Tasks, point to Restore, and then click Database.

  4. [全般] ページの 復元元のセクションを使用して、復元するバックアップ セットの復元元ファイルと場所を指定します。On the General page, use the Source section to specify the source and location of the backup sets to restore. 以下のオプションの 1 つを選択します。Select one of the following options:

    • [データベース]Database

      復元するデータベースをドロップダウン リストから選択します。Select the database to restore from the drop-down list. このリストには、 msdb バックアップ履歴に従ってバックアップされたデータベースのみが含まれます。The list contains only databases that have been backed up according to the msdb backup history.

    注意

    別のサーバーで作成されたバックアップの場合、復元先のサーバーには指定されたデータベースのバックアップ履歴情報が存在しません。If the backup is taken from a different server, the destination server will not have the backup history information for the specified database. この場合、 [デバイス] をクリックして、復元するファイルまたはデバイスを手動で指定します。In this case, select Device to manually specify the file or device to restore.

    • [デバイス]Device

      参照ボタン ( [...] ) をクリックし、 [バックアップ デバイスの選択] ダイアログ ボックスを開きます。Click the browse (...) button to open the Select backup devices dialog box. [バックアップ メディアの種類] ボックスから、デバイスの種類を 1 つ選択します。In the Backup media type box, select one of the listed device types. [バックアップ メディア] ボックスにデバイスを追加するには、 [追加] をクリックします。To select one or more devices for the Backup media box, click Add.

      [バックアップ メディア] ボックスに目的のデバイスを追加したら、 [OK] をクリックして、 [全般] ページに戻ります。After you add the devices you want to the Backup media list box, click OK to return to the General page.

      [ソース: デバイス: データベース] リスト ボックスで、復元するデータベースの名前を選択します。In the Source: Device: Database list box, select the name of the database which should be restored.

      メモ この一覧は [デバイス] をクリックした場合にのみ使用できます。Note This list is only available when Device is selected. 選択されたデバイスにバックアップを持つデータベースのみが使用できるようになります。Only databases that have backups on the selected device will be available.

  5. 復元先のセクション[データベース] ボックスに、復元するデータベースの名前が自動的に表示されます。In the Destination section, the Database box is automatically populated with the name of the database to be restored. データベースの名前を変更するには、 [データベース] ボックスに新しい名前を入力します。To change the name of the database, enter the new name in the Database box.

  6. [タイムライン] をクリックして、 [バックアップのタイムライン] ダイアログ ボックスにアクセスします。Click Timeline to access the Backup Timeline dialog box.

  7. [復元先] セクションで、 [特定の日付と時刻] をクリックします。In the Restore to section, click Specific date and time.

  8. [日付][時刻] ボックスを使用するか、スライダー バーを使用して、復元を止める特定の日付と時刻を指定します。Use either the Date and Time boxes or the slider bar to specify a specific date and time to where the restore should stop. [OK] をクリックします。Click OK.

    注意

    [タイムラインの間隔] ボックスを使用して、タイムラインに表示される時間を変更します。Use the Timeline Interval box to change the amount of time displayed on the timeline.

  9. 特定の時点を指定すると、データベース復旧アドバイザーによって、その特定の時点に復元するために必要なバックアップだけが [復元するバックアップ セット] グリッドの [復元] 列で選択されます。After you have specified a specific point in time, the Database Recovery Advisor ensures that only backups that are required for restoring to that point in time are selected in the Restore column of the Backup sets to restore grid. これらの選択されたバックアップは、特定の時点への復元用として推奨される復元プランを示しています。These selected backups make up the recommended restore plan for your point-in-time restore. 特定の時点への復元操作には選択されているバックアップのみを使用するようにします。You should use only the selected backups for your point-in-time restore operation.

    [復元するバックアップ セット] グリッドの列の詳細については、「データベースの復元 ([全般] ページ)」を参照してください。For information about the columns in the Backup sets to restore grid, see Restore Database (General Page). データベースの復旧アドバイザーの詳細については、「復元と復旧の概要 (SQL Server)」を参照してください。For information about the Database Recovery Advisor, see Restore and Recovery Overview (SQL Server).

  10. [オプション] ページの [復元オプション] パネルでは、状況に応じて、次の任意のオプションを選択できます。On the Options page, in the Restore options panel, you can select any of the following options, if appropriate for your situation:

    • [既存のデータベースを上書きする (WITH REPLACE)]Overwrite the existing database (WITH REPLACE)

    • [レプリケーションの設定を保存する (WITH KEEP_REPLICATION)]Preserve the replication settings (WITH KEEP_REPLICATION)

    • [復元するデータベースへのアクセスを制限する (WITH RESTRICTED_USER)]Restrict access to the restored database (WITH RESTRICTED_USER)

    これらのオプションの詳細については、「データベースの復元 ([オプション] ページ)」を参照してください。For more information about these options, see Restore Database (Options Page).

  11. [復旧状態] ボックスのオプションを選択します。Select an option for the Recovery state box. このボックスの選択内容により、復元操作後のデータベースの状態が決まります。This box determines the state of the database after the restore operation.

    • [RESTORE WITH RECOVERY] : コミットされていないトランザクションをロールバックして、データベースを使用可能な状態にします。これが既定の動作です。RESTORE WITH RECOVERY is the default behavior which leaves the database ready for use by rolling back the uncommitted transactions. 別のトランザクション ログは復元できません。Additional transaction logs cannot be restored. このオプションは、必要なバックアップをすべて復元する場合に選択します。Select this option if you are restoring all of the necessary backups now.

    • [RESTORE WITH NORECOVERY] : データベースは操作不可状態のままとなり、コミットされていないトランザクションはロールバックされません。RESTORE WITH NORECOVERY which leaves the database non-operational, and does not roll back the uncommitted transactions. 別のトランザクション ログは復元できますAdditional transaction logs can be restored. データベースは、復旧されるまで使用できません。The database cannot be used until it is recovered.

    • [RESTORE WITH STANDBY] : データベースを読み取り専用モードにします。RESTORE WITH STANDBY which leaves the database in read-only mode. コミットされていないトランザクションは元に戻されますが、復旧結果を元に戻せるように元に戻す操作をスタンバイ ファイルに保存します。It undoes uncommitted transactions, but saves the undo actions in a standby file so that recovery effects can be reverted.

    オプションの詳細については、「データベースの復元 ([オプション] ページ)」を参照してください。For descriptions of the options, see Restore Database (Options Page).

  12. 選択した時点まで復元するために必要であれば、 [復元の前にログ末尾のバックアップを実行する] が選択されます。Take tail-log backup before restore will be selected if it is necessary for the point in time that you have selected. この設定を変更する必要はありません。ログの末尾をバックアップする必要がない場合でも、そのように選択してかまいません。You do not need to modify this setting, but you can choose to backup the tail of the log even if it is not required.

  13. データベースへのアクティブな接続がある場合、復元操作は失敗する可能性があります。Restore operations may fail if there are active connections to the database. とデータベース間のすべてのアクティブな接続を閉じるには、 [既存の接続を閉じる] Management StudioManagement Studio オプションをオンにします。Check the Close existing connections option to ensure that all active connections between Management StudioManagement Studio and the database are closed. このチェック ボックスをオンにすると、データベースは復元操作の実行前にシングル ユーザー モードに設定され、復元操作の完了後にマルチユーザー モードに設定されます。This check box sets the database to single user mode before performing the restore operations, and sets the database to multi-user mode when complete.

  14. 復元操作と復元操作の間に、その都度、確認のメッセージを表示するには、 [各バックアップを復元する前に確認する] をオンにします。Select Prompt before restoring each backup if you wish to be prompted between each restore operation. 通常は、その必要はありません。データベースが大きく、復元操作のステータスを監視する必要がある場合にのみ使用します。This is not usually necessary unless the database is large and you wish to monitor the status of the restore operation.

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。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.

Transact-SQL の使用Using Transact-SQL

Before you beginBefore you begin

指定した時点への復元は、常にログ バックアップから行われます。A specified time is always restored from a log backup. 復元シーケンスのすべての RESTORE ステートメントで、同一の STOPAT 句で目的の時点またはトランザクションを指定する必要があります。In every RESTORE LOG statement of the restore sequence, you must specify your target time or transaction in an identical STOPAT clause. 特定の時点への復元の前提条件として、最初にエンド ポイントが目的の復元時点よりも前になっているデータベースの完全バックアップを復元する必要があります。As a prerequisite to a point-in-time restore, you must first restore a full database backup whose end point is earlier than your target restore time. このデータベースの完全バックアップは、データベースの最新の完全バックアップより古くてもかまいません。ただし、これは、データベースの完全バックアップを復元した後で、目的の時点を含むログ バックアップまで後続のログ バックアップをすべて復元する場合に限ります。That full database backup can be older than the most recent full database backup as long as you then restore every subsequent log backup, up to and including the log backup that contains your target point in time.

復元するデータベース バックアップを識別しやすくするには、RESTORE DATABASE ステートメントで WITH STOPAT 句をオプションで指定し、指定した目的の時点に対してデータのバックアップが近すぎる場合はエラーが発生するようにします。To help you identify which database backup to restore, you can optionally specify your WITH STOPAT clause in your RESTORE DATABASE statement to raise an error if a data backup is too recent for the specified target time. データ バックアップに目的の時点が含まれている場合でも、常にデータ バックアップ全体が復元されます。The complete data backup is always restored, even if it contains the target time.

Transact-SQLTransact-SQL の基本構文Basic Transact-SQLTransact-SQL syntax

RESTORE LOG database_name FROM <backup_device> WITH STOPAT = time , RECOVERY...RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY...

復旧ポイントは、 time で指定する datetimeの値以前に行われた最後のトランザクション コミットの時点です。The recovery point is the latest transaction commit that occurred at or before the datetime value that is specified by time.

特定の時点より前に行われた変更のみを復元するには、復元するバックアップごとに WITH STOPAT = time を指定します。To restore only the modifications that were made before a specific point in time, specify WITH STOPAT = time for each backup you restore. これにより、目的の時点を過ぎる危険性を回避できます。This makes sure that you do not go past the target time.

特定の時点にデータベースを復元するにはTo restore a database to a point in time

注意

この手順の例については、このセクションの後半の「 例 (Transact-SQL)」を参照してください。For an example of this procedure, see Example (Transact-SQL), later in this section.

  1. データベースを復元するサーバー インスタンスに接続します。Connect to server instance on which you want to restore the database.

  2. NORECOVERY オプションを指定した RESTORE DATABASE ステートメントを実行します。Execute the RESTORE DATABASE statement using the NORECOVERY option.

    注意

    部分復元シーケンスで FILESTREAM ファイル グループを除外した場合、特定の時点への復元はサポートされません。If a partial restore sequence excludes any FILESTREAM filegroup, point-in-time restore is not supported. 復元シーケンスを強制的に実行して続行することもできます。You can force the restore sequence to continue. ただし、RESTORE ステートメントから除外された FILESTREAM ファイル グループは復元できません。However the FILESTREAM filegroups that are omitted from your RESTORE statement can never be restored. 特定の時点への復元を強制的に実行するには、STOPAT、STOPATMARK、または STOPBEFOREMARK オプションに CONTINUE_AFTER_ERROR オプションを組み合わせて指定します。これらのオプションは、後続の RESTORE LOG ステートメントでも指定する必要があります。To force a point-in-time restore, specify the CONTINUE_AFTER_ERROR option together with the STOPAT, STOPATMARK, or STOPBEFOREMARK option, which you must also specify in your subsequent RESTORE LOG statements. CONTINUE_AFTER_ERROR を指定した場合、部分復元シーケンスは正常に実行されますが、FILESTREAM ファイル グループは復元できなくなります。If you specify CONTINUE_AFTER_ERROR, the partial restore sequence succeeds and the FILESTREAM filegroup becomes unrecoverable.

  3. 差分バックアップが存在する場合、データベースを復旧せずに最新のデータベースの差分バックアップを復元します (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。Restore the last differential database backup, if any, without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. 各トランザクション ログ バックアップを作成順に適用して、ログの復元を停止する時点を指定します (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT = time , RECOVERY)。Apply each transaction log backup in the same sequence in which they were created, specifying the time at which you intend to stop restoring log (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT**=time,** RECOVERY).

    注意

    RECOVERY オプションと STOPAT オプション。The RECOVERY and STOPAT options. トランザクション ログ バックアップに、要求した時点の情報が格納されていない場合、たとえば、指定した日時がトランザクション ログに記録されている時点より後の場合などに、警告が生成されます。この場合、データベースは復旧されません。If the transaction log backup does not contain the requested time (for example, if the time specified is beyond the end of the time covered by the transaction log), a warning is generated and the database remains unrecovered.

例 (Transact-SQL)Example (Transact-SQL)

次の例では、データベースを 12:00 AM April 15, 2020 の状態に復元し、複数のログ バックアップが関連する復元操作を行います。The following example restores a database to its state as of 12:00 AM on April 15, 2020 and shows a restore operation that involves multiple log backups. バックアップ デバイス AdventureWorksBackupsにおいて、復元するデータベース全体のバックアップはデバイス上の 3 番目のバックアップ セット (FILE = 3)、最初のログ バックアップは 4 番目のバックアップ セット (FILE = 4)、2 番目のログ バックアップは 5 番目のバックアップ セット (FILE = 5) です。On the backup device, AdventureWorksBackups, the full database backup to be restored is the third backup set on the device (FILE = 3), the first log backup is the fourth backup set (FILE = 4), and the second log backup is the fifth backup set (FILE = 5).

重要

AdventureWorks2012AdventureWorks2012 データベースは、単純復旧モデルを使用しています。The AdventureWorks2012AdventureWorks2012 database uses the simple recovery model. ただし、ログ バックアップを可能にするために、データベースの完全バックアップを行う前に、 ALTER DATABASE AdventureWorks SET RECOVERY FULLを使用して、データベースが完全復旧モデルを使用するように設定されています。To permit log backups, before taking a full database backup, the database was set to use the full recovery model, using ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  
  

関連タスクRelated Tasks

参照See Also

backupset (Transact-SQL) backupset (Transact-SQL)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL)RESTORE HEADERONLY (Transact-SQL)