データベースを新しい場所に復元する (SQL Server)
適用対象: SQL Server
この記事では、SQL Server Management Studio(SSMS) または Transact-SQL を使用して、SQL Server で SQL Server データベースを新しい場所に復元し、必要に応じてデータベースの名前を変更する方法について説明します。 新しいディレクトリ パスにデータベースを移動できるほか、同じサーバー インスタンスまたは別のサーバー インスタンスにデータベースのコピーを作成できます。
開始する前に
制限事項と制約事項
- データベースの完全バックアップの復元中は、復元作業を実行するシステム管理者以外は、復元中のデータベースを使用しないでください。
前提条件
完全復旧モデルまたは一括ログ復旧モデルを使用する場合は、データベースを復元する前に、アクティブ トランザクション ログをバックアップする必要があります。 詳細については、トランザクション ログのバックアップ (SQL Server) に関するページを参照してください。
暗号化されたデータベースを復元するには、データベースを暗号化するために使用した証明書や非対称キーにアクセスする必要があります。証明書や非対称キーがない場合、データベースを復元することはできません。 バックアップが必要な間は、データベースの暗号化キーの暗号化に使用した証明書を保持する必要があります。 詳細については、「 SQL Server Certificates and Asymmetric Keys」をご覧ください。
推奨事項
データベースの移動に関するその他の考慮事項については、「バックアップと復元によるデータベースのコピー」を参照してください。
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 を使用してデータベースの名前を変更する
SQL Server データベース エンジンの適切なインスタンスに接続した後、オブジェクト エクスプローラーでサーバー名を選択してサーバー ツリーを展開します。
[データベース] を右クリックして、 [データベースの復元]を選択します。 [データベースの復元] ダイアログ ボックスが表示されます。
[全般] ページの 復元元のセクションを使用して、復元するバックアップ セットの復元元ファイルと場所を指定します。 次のいずれかのオプションを選択してください。
データベース
復元するデータベースをドロップダウン リストから選択します。 このリストには、 msdb バックアップ履歴に従ってバックアップされたデータベースのみが含まれます。
Note
別のサーバーで作成されたバックアップの場合、復元先のサーバーには指定されたデータベースのバックアップ履歴情報が存在しません。 この場合、 [デバイス] をクリックして、復元するファイルまたはデバイスを手動で指定します。
Device
参照ボタン ([...]) を選択し、[バックアップ デバイスの選択] ダイアログ ボックスを開きます。 [バックアップ メディアの種類] ボックスから、デバイスの種類を 1 つ選択します。 [バックアップ メディア] ボックスにデバイスを追加するには、 [追加]を選択します。
[バックアップ メディア] リスト ボックスに目的のデバイスを追加したら、[OK] をクリックして、[全般] ページに戻ります。
[ソース: デバイス: データベース] リスト ボックスで、復元するデータベースの名前を選択します。
メモ この一覧は [デバイス] をクリックした場合にのみ使用できます。 選択されたデバイスにバックアップを持つデータベースのみが使用できるようになります。
復元先のセクションの [データベース] ボックスに、復元するデータベースの名前が自動的に表示されます。 データベースの名前を変更するには、 [データベース] ボックスに新しい名前を入力します。
[復元先] ボックスで、既定値の [最後に作成されたバックアップ] のままにするか、 [タイムライン] をクリックして、[バックアップのタイムライン] ダイアログ ボックスにアクセスし、具体的にどの時点で復旧アクションを停止するかを手動で選択します。 特定の時点を指定する方法の詳細については、「 Backup Timeline 」を参照してください。
[復元するバックアップ セット] グリッドで、復元するバックアップを選択します。 このグリッドには、指定された場所に対して使用可能なバックアップが表示されます。 既定では、復旧計画が推奨されています。 推奨された復元計画を変更するには、グリッドの選択を変更します。 以前のバックアップの選択を解除すると、以前のバックアップの復元に依存するバックアップは自動的に選択が解除されます。
[復元するバックアップ セット] グリッドの列の詳細については、「データベースの復元 ([全般] ページ)」を参照してください。
データベース ファイルの新しい場所を指定するには、[ファイル] ページを選択し、[すべてのファイルをフォルダーに移動する]を選択します。 [データ ファイルのフォルダー] および [ログ ファイルのフォルダー]の新しい場所を指定します。 このグリッドの詳細については、「データベースの復元 ([ファイル] ページ)」を参照してください。
[オプション] ページで必要に応じてオプションを調整します。 これらのオプションの詳細については、「データベースの復元 ([オプション] ページ)」を参照してください。
新しい場所にデータベースを復元し、必要に応じて T-SQL を使用してデータベースの名前を変更する
必要に応じて、復元するデータベースの完全バックアップを含んでいるバックアップ セット内のファイルの論理名と物理名を判断します。 このステートメントは、バックアップ セットに保存されているデータベースとログ ファイルのリストを返します。 基本構文は次のとおりです。
RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number
この backup_set_file_number は、メディア セット内のバックアップの位置を示します。 バックアップ セットの位置は、 RESTORE HEADERONLY ステートメントを使用して取得できます。 詳細については、「バックアップ セットの指定」を参照してください。
このステートメントは、いくつかの WITH オプションもサポートします。 詳細については、「RESTORE FILELISTONLY (Transact-SQL)」を参照してください。
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* ]
}
;
Note
データベースを別のディスクに再配置する準備をする場合は、容量が十分あるかどうか、および既存のファイルと衝突する可能性がないかどうかを確認してください。 この作業は、 RESTORE VERIFYONLY ステートメントを使用して、RESTORE DATABASE ステートメントで使用するのと同じ MOVE パラメーターを指定する必要があります。
次の表で、データベースを新しい場所に復元するという点で、この RESTORE ステートメントの引数を説明します。 これらの引数の詳細については、「RESTORE (Transact-SQL)」を参照してください。
new_database_name
データベースの新しい名前。
Note
異なるサーバー インスタンスにデータベースを復元している場合は、新しい名前ではなく元のデータベース名を使用することができます。
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 }
復元するバックアップ セットを特定します。 たとえば、 1 の backup_set_file_number は、バックアップ 目での最初のバックアップ セットを示し、2 の backup_set_file_number は 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)
この例では、 MyAdvWorks
サンプル データベースのバックアップを復元して、 AdventureWorks2022
という名前の新しいデータベースを作成します。このデータベースには、2 つのファイル、 AdventureWorks2022
_Data と AdventureWorks2022
_Log が含まれます。 このデータベースは、単純復旧モデルを使用しています。 AdventureWorks2022
データベースはサーバー インスタンスに既に存在するため、バックアップ内のファイルを新しい場所に復元する必要があります。 RESTORE FILELISTONLY ステートメントは、復元するデータベース内のファイル数と名前を判断するために使用します。 データベース バックアップは、バックアップ デバイスの 1 番目のバックアップ セットです。
Note
特定日時への復元を含む、トランザクション ログのバックアップと復元の例では、次の MyAdvWorks_FullRM
の例と同様、AdventureWorks2022
から作成した MyAdvWorks
データベースを使用します。 ただし、作成された 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.
-- AdventureWorks2022_Backup is the name of the backup device.
RESTORE FILELISTONLY
FROM AdventureWorks2022_Backup;
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
FROM AdventureWorks2022_Backup
WITH RECOVERY,
MOVE 'AdventureWorks2022_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',
MOVE 'AdventureWorks2022_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf';
GO
AdventureWorks2022
データベースの完全データベース バックアップを作成する方法の例については、「データベースの完全バックアップの作成 (SQL Server)」を参照してください。