コンピューターにSQL 2012 SP1がインストールされています。データベースtest.bak
のバックアップを作成しました。
同じデータベースであるtest2
という名前のデータベースがありますが、データが変更されています。
test.bak
データベースにtest2
を復元したい。
私はいつもエラーが出ます:
エラー3154:バックアップセットは、既存のデータベース以外のデータベースのバックアップを保持しています。
私は試した:
test2 -> Restore database -> From device
を右クリックしました
test.bak
を選択してWith Replace
をチェックしましたが、エラーが発生します。
次に、test2 -> Restore file and filegroups
を右クリックしてみました
test.bak
を選択してWith Replace
をチェックしましたが、エラーが発生します。
古いデータベースを削除してから、正しい名前でバックアップを復元できますが、SQL 2008を使用している場合は、既存のデータベースを復元しても問題はありませんでした。
SQL2012を使用しているため、このエラーが頻繁に発生するようです。
WITH REPLACE
を使用する必要があります。一般的に、Management Studioでポイントアンドクリックのモノを使用しないでください。柔軟性がなく、バグが発生することがよくあります。
これは私のために働きました:
USE [master];
GO
CREATE DATABASE test;
GO
CREATE DATABASE test2;
GO
BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO
RESTORE DATABASE test2
FROM DISK = 'c:\temp\test.bak'
WITH REPLACE,
MOVE 'test' TO 'c:\temp\test2.mdf',
MOVE 'test_log' TO 'c:\temp\test2.ldf';
また、データベースをバックアップするときは、WITH INIT
を使用するか、すでにバックアップが含まれているファイルをデバイスに指定しないようにしてください(現在バックアップしているデータベースとは異なる可能性があるため、特にtest
...)のような名前を再利用する場合。
指摘したとおり、正しい答えはWITH REPLACE
オプションを使用することです。
差分バックアップ(完全なバックアップなし)から復元しようとすると、WITH REPLACE
を使用している場合でも問題のエラーが発生する可能性があることを指摘しておきます。
これを行うことはできますが、追加の手順が必要です。
復元ダイアログを開き、2008年の習慣に従って通常の選択を行います。元のデータベースがDBの場合、ソースにDB.bakデバイスを選択し、宛先名をDBTestに変更します。次に、[ページの選択](左上隅)の下に、[全般]、[ファイル]、[オプション]の順に表示されます。[ファイル]を選択します。グリッドを見てください。元のファイル名とファイル名で復元の列が表示されます。後者を手動で拡大して新しい名前を入力します(データベースの元の名前がDBで、DBTestを作成する場合は....\DB.mdfを...\DBTest.mdfに変更します)
これは、ソースとしてDBの.bakファイルを受け入れ、宛先としてDBTestを受け入れます。 [オプション]ページに移動して、[置換あり]を選択する必要がある場合もあります。他の理由でする必要があるので、このオプションなしではテストできません。
間違ったデータベースを復元しています。 「test
からのバックアップを使用してtest2
を復元する」とは考えないでください。「test
のバックアップを復元して、名前をtest2
に変更してください」と考えてください。 test
から復元タスクを選択し、[To database:]フィールドにtest2
を入力できます。
アーロンが述べているように、ウィザードに依存するのではなく、スクリプトを学習します。
1)WITH REPLACE
RESTORE
コマンドの使用中。
2)DROP
競合している古いデータベースとRESTORE
コマンドを使用して再度復元します。
SQL Serverのバージョンに問題はありません。 Aaronが指摘したように、2008年から2012年までのデータベースと同じバージョンを復元することもできます。