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

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

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    前提条件

    推奨事項

    セキュリティ

  • 新しい場所にデータベースを復元し、必要に応じて名前を変更する方法:

    SQL Server Management Studio

    Transact-SQL

  • 関連タスク

作業を開始する準備

制限事項と制約事項

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

前提条件

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

推奨事項

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

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

  • SQL Server 2005 または SQL Server 2008 データベースを SQL Server 2012 に復元すると、データベースが自動的にアップグレードされます。 通常、データベースは直ちに使用可能になります。 ただし、SQL Server 2005 データベースにフルテキスト インデックスがある場合、アップグレード プロセスでは、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 権限は与えられません。

[トップに戻る] リンクで使用される矢印アイコン[Top]

SQL Server Management Studio の使用

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

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

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

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

    • [データベース]

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

    注意

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

    1. [デバイス]

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

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

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

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

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

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

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

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[Top]

Transact-SQL の使用

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

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

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

    ここで、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 }
      復元するバックアップ セットを特定します。 たとえば、backup_set_file_number が 1 の場合はバックアップ メディアの 1 番目のバックアップ セットを示し、backup_set_file_number が 2 の場合は 2 番目のバックアップ セットを示します。 バックアップ セットの 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 サンプル データベースのバックアップを復元して、MyAdvWorks という名前の新しいデータベースを作成します。このデータベースには、2 つのファイル、 AdventureWorks2012 _Data と AdventureWorks2012 _Log が含まれます。 このデータベースは、単純復旧モデルを使用しています。 AdventureWorks2012 データベースはサーバー インスタンスに既に存在するため、バックアップ内のファイルを新しい場所に復元する必要があります。 RESTORE FILELISTONLY ステートメントは、復元するデータベース内のファイル数と名前を判断するために使用します。 データベース バックアップは、バックアップ デバイスの 1 番目のバックアップ セットです。

注意

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

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)」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[Top]

関連タスク

[トップに戻る] リンクで使用される矢印アイコン[Top]

関連項目

参照

RESTORE (Transact-SQL)

概念

データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)

バックアップと復元によるデータベースのコピー