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


16

コンピューターに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を使用しているため、このエラーが頻繁に発生するようです。

回答:


12

WITH REPLACEManagement 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...)。


@AaronBertrand fyi、その機能は存在します。私が通常やることは、UIを使用してスクリプトを作成し、すべてが正常であることを確認することです。ありますバグの多くは、はい、。
usr

2

1)コマンドの使用WITH REPLACE中に使用しRESTOREます。

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

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


2

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

アーロンが言及しているように、ウィザードに頼るのではなく、スクリプトを学んでください。


2

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

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

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


2

指摘されているように、正しい答えはWITH REPLACEオプションを使用することです。

WITH REPLACE差分バックアップから(完全バックアップを使用せずに)復元しようとすると、を使用している場合でも質問でエラーが発生する可能性があることを指摘したいだけです。


おそらく私は、私はちょうどあなたが(フル1なし)差分バックアップから復元しようとすると、「WITH REPLACEを」使用した場合でも、エラーを得ることができることを指摘したかった、この回答の時点でコメントへの十分なポイントを持っていませんでし
ブリムシュテット

0

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

  1. ファイルを復元するパスを設定したら。
  2. 左側の「オプション」をクリックします。
  3. チェックボックス-[接続先データベースへの既存の接続を閉じる]をオンにします。
  4. OKをクリックします。 ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.