SQL Server 2008 でバックアップから新しいデータベースを復元:ステップバイステップガイド
SQL Server 2008 では、同じサーバー上の別のデータベースのバックアップから新しいデータベースを作成することができます。これは、テスト環境や開発環境でのデータベースのコピー、本番環境への移行、または破損したデータベースの復元など、様々なシナリオで役立ちます。
方法
以下の手順で、SQL Server 2008 で同じサーバー上の別のデータベースのバックアップから新しいデータベースを作成することができます。
バックアップの復元
- SQL Server Management Studio を開きます。
- データベースを復元するサーバーインスタンスに接続します。
- オブジェクト エクスプローラーで、データベースノードを展開します。
- データベースを右クリックし、復元を選択します。
- 復元データベースウィンドウで、ソースページを選択します。
- バックアップデバイスオプションを選択し、追加をクリックします。
- バックアップファイルを含むデバイスを選択します。
- OKをクリックします。
- オプションページを選択します。
- 復元するデータベースボックスに、新しいデータベースの名前を入力します。
データベースの所有権の変更
新しいデータベースが復元されたら、その所有権を新しいユーザーに変更する必要があります。これを行うには、次の手順を実行します。
- プロパティを選択します。
- 所有者ボックスに、新しいデータベースの所有者となるユーザーの名前を入力します。
データベースの初期化
- 新しいデータベースに接続します。
- データベースを初期化する T-SQL スクリプトを実行します。
補足事項
- 新しいデータベースを作成する前に、バックアップファイルが完全であることを確認してください。
- 新しいデータベースの名前は、既存のデータベースの名前と一意にする必要があります。
- 新しいデータベースの所有権を変更する前に、新しいユーザーがデータベースを作成および変更する権限を持っていることを確認してください。
SQL Server 2008 で同じサーバー上の別のデータベースのバックアップから新しいデータベースを作成する T-SQL スクリプト例
-- バックアップファイルの場所を指定します
DECLARE @backupDevice NVARCHAR(4000) = 'C:\Backups\mydatabase.bak';
-- 復元するデータベースの名前を指定します
DECLARE @newDatabaseName NVARCHAR(128) = 'new_database';
-- バックアップデバイスを復元します
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'mydatabase' TO 'new_database',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'tempdb' TO 'new_tempdb',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'master' TO 'new_master',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'msdb' TO 'new_msdb';
-- 新しいデータベースの所有権を新しいユーザーに変更します
DECLARE @newOwnerLogin NVARCHAR(128) = 'new_owner';
ALTER DATABASE @newDatabaseName OWNERSHIP TO @newOwnerLogin;
使用方法
- 上記のスクリプトをテキストエディタで開きます。
@backupDevice
変数に、バックアップファイルの場所を指定します。@newDatabaseName
変数に、復元するデータベースの名前を指定します。
例
以下の例では、C:\Backups\mydatabase.bak
という名前のバックアップファイルから new_database
という名前の新しいデータベースを作成します。新しいデータベースの所有者は new_owner
になります。
-- バックアップファイルの場所を指定します
DECLARE @backupDevice NVARCHAR(4000) = 'C:\Backups\mydatabase.bak';
-- 復元するデータベースの名前を指定します
DECLARE @newDatabaseName NVARCHAR(128) = 'new_database';
-- バックアップデバイスを復元します
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'mydatabase' TO 'new_database',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'tempdb' TO 'new_tempdb',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'master' TO 'new_master',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'msdb' TO 'new_msdb';
-- 新しいデータベースの所有権を新しいユーザーに変更します
DECLARE @newOwnerLogin NVARCHAR(128) = 'new_owner';
ALTER DATABASE @newDatabaseName OWNERSHIP TO @newOwnerLogin;
このスクリプトはあくまでも例であり、必要に応じて変更する必要があります。スクリプトを実行する前に、必ずバックアップを取っておいてください。
- このスクリプトは、SQL Server 2008 でのみ動作します。
SQL Server 2008 で同じサーバー上の別のデータベースのバックアップから新しいデータベースを作成するその他の方法
SQL Server Management Studio (SSMS) を使用して、グラフィカル ユーザー インターフェースで新しいデータベースを作成することができます。これを行うには、次の手順を実行します。
- SSMS を開きます。
T-SQL スクリプトを使用して、新しいデータベースを作成することもできます。これを行うには、次のスクリプトをテキストエディタに保存し、SQL Server Management Studio で実行します。
-- バックアップファイルの場所を指定します
DECLARE @backupDevice NVARCHAR(4000) = 'C:\Backups\mydatabase.bak';
-- 復元するデータベースの名前を指定します
DECLARE @newDatabaseName NVARCHAR(128) = 'new_database';
-- バックアップデバイスを復元します
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'mydatabase' TO 'new_database',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'tempdb' TO 'new_tempdb',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'master' TO 'new_master',
RESTORE DATABASE @newDatabaseName
FROM DEVICE = @backupDevice
WITH MOVE 'msdb' TO 'new_msdb';
-- 新しいデータベースの所有権を新しいユーザーに変更します
DECLARE @newOwnerLogin NVARCHAR(128) = 'new_owner';
ALTER DATABASE @newDatabaseName OWNERSHIP TO @newOwnerLogin;
サードパーティ製ツールを使用する
新しいデータベースを作成するために、Red Gate Software の SQL Server Backup and Restore などのサードパーティ製ツールを使用することもできます。これらのツールは、SSMS よりも多くの機能を提供することがあり、複雑な復元シナリオを処理するのに役立ちます。
使用する方法は、ニーズと好みによって異なります。 SSMS は、新しいデータベースを作成する最も簡単な方法ですが、T-SQL スクリプトを使用すると、より多くの制御と柔軟性を提供できます。 サードパーティ製ツールは、複雑な復元シナリオを処理する必要がある場合に役立ちます。
sql database sql-server-2008