データベースを新しい場所に復元する (SQL Server)

適用対象:yesSQL Server (サポートされているすべてのバージョン)

このトピックでは、SQL Server Management Studio(SSMS) または Transact-SQL を使用して、SQL Server データベースを新しい場所に復元し、必要に応じてSQL Serverでデータベースの名前を変更する方法について説明します。 新しいディレクトリ パスにデータベースを移動できるほか、同じサーバー インスタンスまたは別のサーバー インスタンスにデータベースのコピーを作成できます。

作業を開始する準備

制限事項と制約事項

  • データベースの完全バックアップの復元中は、復元作業を実行するシステム管理者以外は、復元中のデータベースを使用しないでください。

必須コンポーネント

  • 完全復旧モデルまたは一括ログ復旧モデルを使用する場合は、データベースを復元する前に、アクティブ トランザクション ログをバックアップする必要があります。 詳細については、「トランザクション ログのバックアップ (SQL Server)」を参照してください。

  • 暗号化されたデータベースを復元するには、データベース の暗号化に使用される証明書または非対称キーにアクセスできる必要があります。 その証明書または非対称キーがないと、データベースを復元できません。 バックアップが必要な間は、データベースの暗号化キーの暗号化に使用した証明書を保持する必要があります。 詳細については、「 SQL Server Certificates and Asymmetric Keys」をご覧ください。

Recommendations

  • データベースの移行に関するその他の考慮事項については、「 バックアップと復元によるデータベースのコピー」を参照してください。

  • SQL Server 2005 (9.x) 以降のデータベースをSQL Serverに復元すると、データベースは自動的にアップグレードされます。 通常、データベースは直ちに使用可能になります。 ただし、SQL Server 2005 (9.x) データベースにフルテキスト インデックスがある場合、アップグレード プロセスでは、upgrade_option サーバー プロパティの設定に応じて、それらをインポート、リセット、または再構築します。 アップグレード オプションがインポート (upgrade_option = 2) または再構築 (upgrade_option = 0) に設定されている場合、アップグレード中はフルテキスト インデックスを使用できなくなります。 インデックスを作成するデータ量によって、インポートには数時間、再構築には最大でその 10 倍の時間がかかることがあります。 また、アップグレード オプションがインポートに設定されており、フルテキスト カタログが使用できない場合は、関連付けられたフルテキスト インデックスが再構築されます。 upgrade_option サーバー プロパティの設定を変更するには、 sp_fulltext_serviceを使用します。

セキュリティ

セキュリティを確保するため、不明なソースや信頼されていないソースからのデータベースは、アタッチまたは復元しないことをお勧めします。 このようなデータベースには、意図しない Transact SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを引き起こしたりする悪意のあるコードが含まれている可能性があります。 不明または信頼できないソースのデータベースを使用する前に、運用サーバー以外のサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

アクセス許可

復元するデータベースが存在しない場合、ユーザーは RESTORE を実行できる CREATE DATABASE 権限を使用する必要があります。 データベースが存在する場合、既定では、RESTORE 権限は sysadmin 固定サーバー ロールおよび dbcreator 固定サーバー ロールのメンバーと、データベースの所有者 (dbo) に与えられています。

RESTORE 権限は、サーバーでメンバーシップ情報を常に確認できるロールに与えられます。 固定データベース ロールのメンバーシップは、データベースがアクセス可能で破損していない場合にのみ確認することができますが、RESTORE の実行時にはデータベースがアクセス可能で損傷していないことが必ずしも保証されないため、 db_owner 固定データベース ロールのメンバーには RESTORE 権限は与えられません。

新しい場所にデータベースを復元し、必要に応じて SSMS を使用してデータベースの名前を変更する

  1. 適切な SQL Server データベース エンジンのインスタンスに接続した後、オブジェクト エクスプローラーでサーバー名をクリックしてサーバー ツリーを展開します。

  2. [データベース] を右クリックし、 [データベースの復元] をクリックします。 [データベースの復元] ダイアログ ボックスが表示されます。

  3. [全般] ページの 復元元のセクションを使用して、復元するバックアップ セットの復元元ファイルと場所を指定します。 以下のオプションの 1 つを選択します。

    • [データベース]

      復元するデータベースをドロップダウン リストから選択します。 このリストには、 msdb バックアップ履歴に従ってバックアップされたデータベースのみが含まれます。

    注: 別のサーバーで作成されたバックアップの場合、復元先のサーバーには指定されたデータベースのバックアップ履歴情報が存在しません。 この場合、 [デバイス] をクリックして、復元するファイルまたはデバイスを手動で指定します。

    1. [デバイス]

      参照ボタン ( [...] ) をクリックし、 [バックアップ デバイスの選択] ダイアログ ボックスを開きます。 [バックアップ メディアの種類] ボックスから、デバイスの種類を 1 つ選択します。 [バックアップ メディア] ボックスにデバイスを追加するには、 [追加] をクリックします。

      [バックアップ メディア] ボックスに目的のデバイスを追加したら、 [OK] をクリックして、 [全般] ページに戻ります。

      [ソース: デバイス:データベース] リスト ボックスで、復元するデータベースの名前を選択します。

      メモ この一覧は [デバイス] をクリックした場合にのみ使用できます。 選択されたデバイスにバックアップを持つデータベースのみが使用できるようになります。

  4. 復元先のセクション[データベース] ボックスに、復元するデータベースの名前が自動的に表示されます。 データベースの名前を変更するには、 [データベース] ボックスに新しい名前を入力します。

  5. [復元先] ボックスで、既定値の [最後に作成されたバックアップ] のままにするか、 [タイムライン] をクリックして、 [バックアップのタイムライン] ダイアログ ボックスにアクセスし、具体的にどの時点で復旧アクションを停止するかを手動で選択します。 特定の時点を指定する方法の詳細については、「 Backup Timeline 」を参照してください。

  6. [復元するバックアップ セット] グリッドで、復元するバックアップを選択します。 このグリッドには、指定された場所に対して使用可能なバックアップが表示されます。 既定では、復旧計画が推奨されています。 推奨された復元計画を変更するには、グリッドの選択を変更します。 以前のバックアップの選択を解除すると、以前のバックアップの復元に依存するバックアップは自動的に選択が解除されます。

    [復元するバックアップ セット] グリッドの列の詳細については、「データベースの復元 (全般ページ)」を参照してください。

  7. データベース ファイルの新しい場所を指定するには、 [ファイル] ページを選択し、 [すべてのファイルをフォルダーに移動する] をクリックします。 [データ ファイルのフォルダー] および [ログ ファイルのフォルダー] の新しい場所を指定します。 このグリッドの詳細については、「データベースの 復元 ([ファイル] ページ)」を参照してください。

  8. [オプション] ページで必要に応じてオプションを調整します。 これらのオプションの詳細については、 データベースの復元 ([オプション] ページ) を参照してください。

新しい場所にデータベースを復元し、必要に応じて T-SQL を使用してデータベースの名前を変更する

  1. 必要に応じて、復元するデータベースの完全バックアップを含んでいるバックアップ セット内のファイルの論理名と物理名を判断します。 このステートメントは、バックアップ セットに保存されているデータベースとログ ファイルのリストを返します。 基本構文は次のとおりです。

    BACKUP_DEVICE WITH FILE = backup_set_file_number>から< FILELISTONLY を復元する

    この backup_set_file_number は、メディア セット内のバックアップの位置を示します。 バックアップ セットの位置は、 RESTORE HEADERONLY ステートメントを使用して取得できます。 詳細については、「RESTORE 引数 (Transact-SQL)」の「バックアップ セットの指定」を参照してください。

    このステートメントは、多くの WITH オプションもサポートします。 詳細については、「RESTORE FILELISTONLY (Transact-SQL)」を参照してください。

  2. RESTORE DATABASE ステートメントを使用し、データベースの完全バックアップを復元します。 既定で、データとログ ファイルが元の場所に復元されます。 データベースを再配置するには、MOVE オプションを使用して、各データベース ファイルを再配置し、既存ファイルとの衝突が発生するのを防ぎます。

データベースを新しい場所に復元するための基本的な Transact-SQL 構文と新しい名前は次のとおりです。

RESTORE DATABASE *new_database_name*  

FROM *backup_device* [ ,...*n* ]  

[ WITH  

 {  

    [ **RECOVERY** | NORECOVERY ]  

    [ , ] [ FILE ={ *backup_set_file_number* | @*backup_set_file_number* } ]  

    [ , ] MOVE '*logical_file_name_in_backup*' TO '*operating_system_file_name*' [ ,...*n* ]  

}  

;  

注意

データベースを別のディスクに再配置する準備をする場合は、容量が十分あるかどうか、および既存のファイルと衝突する可能性がないかどうかを確認してください。 この作業は、 RESTORE VERIFYONLY ステートメントを使用して、RESTORE DATABASE ステートメントで使用するのと同じ MOVE パラメーターを指定する必要があります。

次の表で、データベースを新しい場所に復元するという点で、この RESTORE ステートメントの引数を説明します。 これらの引数の詳細については、「RESTORE (Transact-SQL)」を参照してください。

new_database_name
データベースの新しい名前。

注意

異なるサーバー インスタンスにデータベースを復元している場合は、新しい名前ではなく元のデータベース名を使用することができます。

backup_device [ , ...n ]
データベース バックアップを復元する 1 ~ 64 個のバックアップ デバイスのコンマ区切りリストを指定します。 物理バックアップ デバイスを指定したり、対応する論理バックアップ デバイス (定義されている場合) を指定したりできます。 物理バックアップ デバイスを指定するには、DISK オプションまたは TAPE オプションを使用します。

{ DISK | TAPE } =physical_backup_device_name

詳細については、「バックアップ デバイス (SQL Server)」を参照してください。

{ RECOVERY | NORECOVERY }
データベースで完全復旧モデルを使用している場合は、データベースの復元後にトランザクション ログ バックアップを適用しなければならない場合があります。 この場合は、NORECOVERY オプションを指定します。

そうでない場合は、既定の RECOVERY オプションを使用します。

FILE = { backup_set_file_number | @backup_set_file_number }
復元するバックアップ セットを特定します。 たとえば、 1backup_set_file_number は、バックアップ 目での最初のバックアップ セットを示し、2 の backup_set_file_number2 番目のバックアップ セットを示します。 バックアップ セットの backup_set_file_number を取得するには、 RESTORE HEADERONLY ステートメントを使用します。

このオプションを指定しない場合、既定ではバックアップ デバイスの 1 番目のバックアップ セットを使用します。

詳細については、「RESTORE 引数 (Transact-SQL)」の「バックアップ セットの指定」を参照してください。

MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ , ...n ]
logical_file_name_in_backup で指定されるデータまたはログ ファイルが、 operating_system_file_nameで指定される位置に復元されることを指定します。 バックアップ セットから新しい位置に復元する論理ファイルごとに、MOVE ステートメントを指定してください。

オプション 説明
logical_file_name_in_backup バックアップ セット内のデータまたはログ ファイルの論理名を指定します。 バックアップ セット内のデータ ファイルまたはログ ファイルの論理ファイル名は、バックアップ セットが作成されたときのデータベース内における論理名と同じです。



注:バックアップ セットに含まれる論理ファイルの一覧を取得するには、RESTORE FILELISTONLY を使用します。
operating_system_file_name logical_file_name_in_backupで指定したファイルの新しい場所を指定します。 ファイルはこの場所に復元されます。

必要に応じて、 operating_system_file_name に復元するファイルの新しいファイル名を指定します。 これは、同じサーバー インスタンスで既存のデータベースのコピーを作成する場合に必要です。
n 追加の MOVE ステートメントを指定できることを示すプレースホルダーです。

例 (Transact-SQL)

次の使用例は、AdventureWorks2012 と AdventureWorks2012 の 2 つのファイルを含む AdventureWorks2012 サンプル データベースのバックアップを復元することによって名前が付けられたMyAdvWorks新しいデータベースを作成_Data_Log。 このデータベースは、単純復旧モデルを使用しています。 AdventureWorks2012 データベースはサーバー インスタンスに既に存在するため、バックアップ内のファイルを新しい場所に復元する必要があります。 RESTORE FILELISTONLY ステートメントは、復元するデータベース内のファイル数と名前を判断するために使用します。 データベース バックアップは、バックアップ デバイスの 1 番目のバックアップ セットです。

メモ:特定の時点の復元を含むトランザクション ログのバックアップと復元の例では、次MyAdvWorksの例と同様に、AdventureWorks2012 から作成されたデータベースを使用MyAdvWorks_FullRMします。 ただし、結果MyAdvWorks_FullRMのデータベースは、Transact-SQL ステートメント ALTER DATABASE <database_name> SET RECOVERY FULL を使用して、完全復旧モデルを使用するように変更する必要があります。

USE master;  
GO  
-- First determine the number and names of the files in the backup.  
-- AdventureWorks2012_Backup is the name of the backup device.  
RESTORE FILELISTONLY  
   FROM AdventureWorks2012_Backup;  
-- Restore the files for MyAdvWorks.  
RESTORE DATABASE MyAdvWorks  
   FROM AdventureWorks2012_Backup  
   WITH RECOVERY,  
   MOVE 'AdventureWorks2012_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',   
   MOVE 'AdventureWorks2012_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf';  
GO  
  

AdventureWorks2012 データベースの完全データベース バックアップを作成する方法の例については、「データベースの完全バックアップの作成 (SQL Server)」を参照してください。

関連タスク

関連項目

データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)
RESTORE (Transact-SQL)
バックアップと復元によるデータベースのコピー