web-dev-qa-db-ja.com

WITH REPLACEを使用してバックアップを復元する際のエラー3154

コンピューターにSQL 2012 SP1がインストールされています。データベースtest.bakのバックアップを作成しました。

同じデータベースであるtest2という名前のデータベースがありますが、データが変更されています。

test.bakデータベースにtest2を復元したい。

私はいつもエラーが出ます:

エラー3154:バックアップセットは、既存のデータベース以外のデータベースのバックアップを保持しています。

私は試した:

  1. test2 -> Restore database -> From deviceを右クリックしました

    test.bakを選択してWith Replaceをチェックしましたが、エラーが発生します。

  2. 次に、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...)のような名前を再利用する場合。

12
Aaron Bertrand

指摘したとおり、正しい答えはWITH REPLACEオプションを使用することです。

差分バックアップ(完全なバックアップなし)から復元しようとすると、WITH REPLACEを使用している場合でも問題のエラーが発生する可能性があることを指摘しておきます。

2
Brimstedt

これを行うことはできますが、追加の手順が必要です。

復元ダイアログを開き、2008年の習慣に従って通常の選択を行います。元のデータベースがDBの場合、ソースにDB.bakデバイスを選択し、宛先名をDBTestに変更します。次に、[ページの選択](左上隅)の下に、[全般]、[ファイル]、[オプション]の順に表示されます。[ファイル]を選択します。グリッドを見てください。元のファイル名とファイル名で復元の列が表示されます。後者を手動で拡大して新しい名前を入力します(データベースの元の名前がDBで、DBTestを作成する場合は....\DB.mdfを...\DBTest.mdfに変更します)

これは、ソースとしてDBの.bakファイルを受け入れ、宛先としてDBTestを受け入れます。 [オプション]ページに移動して、[置換あり]を選択する必要がある場合もあります。他の理由でする必要があるので、このオプションなしではテストできません。

2
Debby

間違ったデータベースを復元しています。 「testからのバックアップを使用してtest2を復元する」とは考えないでください。「testのバックアップを復元して、名前をtest2に変更してください」と考えてください。 testから復元タスクを選択し、[To database:]フィールドにtest2を入力できます。

アーロンが述べているように、ウィザードに依存するのではなく、スクリプトを学習します。

2
SQLFox

1)WITH REPLACERESTOREコマンドの使用中。

2)DROP競合している古いデータベースとRESTOREコマンドを使用して再度復元します。

SQL Serverのバージョンに問題はありません。 Aaronが指摘したように、2008年から2012年までのデータベースと同じバージョンを復元することもできます。

2
Kin Shah

これがうまくいくことを願っています。

  1. パスを設定したら、ファイルを復元します。
  2. 左側の「オプション」をクリックします。
  3. チェックボックス-「宛先データベースへの既存の接続を閉じる」にチェックを入れます。
  4. OKをクリックします。 enter image description here
0
Vinu M Shankar