データベースを新しい場所に復元する (SQL Server)
適用対象:SQL Server
この記事では、SQL Server データベースを新しい場所に復元し、必要に応じて、SQL Server Management Studio (SSMS) または Transact-SQL を使用して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 データベース エンジンの適切なインスタンスに接続し、オブジェクト エクスプローラーでサーバー名を選択してサーバー ツリーを展開します。
[ データベース] を右クリックし、[ データベースの復元] を選択します。 [データベースの復元] ダイアログ ボックスが表示されます。
[全般] ページの 復元元のセクションを使用して、復元するバックアップ セットの復元元ファイルと場所を指定します。 以下のオプションの 1 つを選択します。
[データベース]
復元するデータベースをドロップダウン リストから選択します。 このリストには、 msdb バックアップ履歴に従ってバックアップされたデータベースのみが含まれます。
Note
別のサーバーで作成されたバックアップの場合、復元先のサーバーには指定されたデータベースのバックアップ履歴情報が存在しません。 この場合、 [デバイス] をクリックして、復元するファイルまたはデバイスを手動で指定します。
[デバイス]
[参照] (...) ボタンを選択して、[ バックアップ デバイスの選択 ] ダイアログ ボックスを開きます。 [バックアップ メディアの種類] ボックスから、デバイスの種類を 1 つ選択します。 [ バックアップ メディア ] ボックスで 1 つ以上のデバイスを選択するには、[追加] を選択 します。
目的のデバイスを [バックアップ メディア ] リスト ボックスに追加したら、[ OK] を選択して [ 全般 ] ページに戻ります。
[ソース: デバイス: データベース] リスト ボックスで、復元するデータベースの名前を選択します。
メモ この一覧は [デバイス] をクリックした場合にのみ使用できます。 選択されたデバイスにバックアップを持つデータベースのみが使用できるようになります。
復元先のセクションの [データベース] ボックスに、復元するデータベースの名前が自動的に表示されます。 データベースの名前を変更するには、 [データベース] ボックスに新しい名前を入力します。
[ 復元先 ] ボックスで、既定値を [最後に作成したバックアップまで ] のままにするか、[ タイムライン ] を選択して [ バックアップ タイムライン ] ダイアログ ボックスにアクセスし、回復アクションを停止する特定の時点を手動で選択します。 特定の時点を指定する方法の詳細については、「 Backup Timeline 」を参照してください。
[復元するバックアップ セット] グリッドで、復元するバックアップを選択します。 このグリッドには、指定された場所に対して使用可能なバックアップが表示されます。 既定では、復旧計画が推奨されています。 推奨された復元計画を変更するには、グリッドの選択を変更します。 以前のバックアップの選択を解除すると、以前のバックアップの復元に依存するバックアップは自動的に選択が解除されます。
[ 復元するバックアップ セット ] グリッドの列の詳細については、「 データベースの復元 (全般ページ)」を参照してください。
データベース ファイルの新しい場所を指定するには、[ ファイル ] ページを選択し、[ すべてのファイルをフォルダーに再配置] を選択します。 [データ ファイルのフォルダー] および [ログ ファイルのフォルダー] の新しい場所を指定します。 このグリッドの詳細については、「 データベースの復元 ([ファイル] ページ)」を参照してください。
[オプション] ページで必要に応じてオプションを調整します。 これらのオプションの詳細については、「データベースの 復元 ([オプション] ページ)」を参照してください。
新しい場所にデータベースを復元し、必要に応じて T-SQL を使用してデータベースの名前を変更する
必要に応じて、復元するデータベースの完全バックアップを含んでいるバックアップ セット内のファイルの論理名と物理名を判断します。 このステートメントは、バックアップ セットに保存されているデータベースとログ ファイルのリストを返します。 基本構文は次のとおりです。
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)」を参照してください。
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 ステートメントを使用します。
このオプションを指定しない場合、既定ではバックアップ デバイスで最初のバックアップ セットが使用されます。
詳細については、「 RESTORE Arguments (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 番目のバックアップ セットです。
注意
特定日時への復元を含む、トランザクション ログのバックアップと復元の例では、次の MyAdvWorks_FullRM
の例と同様、AdventureWorks2022
から作成した MyAdvWorks
データベースを使用します。 ただし、結果 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.
-- 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)」を参照してください。
関連タスク
こちらもご覧ください
データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)
RESTORE (Transact-SQL)
バックアップと復元によるデータベースのコピー