Fehler 3154 beim Wiederherstellen einer Sicherung mit WITH REPLACE

16

Ich habe SQL 2012 mit SP1 auf meinem Computer installiert. Ich habe ein Backup einer Datenbank erstellt test.bak.

Ich habe eine Datenbank mit test2demselben Namen , die Daten wurden jedoch geändert.

Ich möchte test.baküber die test2Datenbank wiederherstellen .

Ich erhalte immer den Fehler:

Fehler 3154: Der Sicherungssatz enthält eine Sicherung einer anderen Datenbank als der vorhandenen Datenbank.

Ich habe es versucht:

  1. Ich habe mit der rechten Maustaste geklickt test2 -> Restore database -> From device

    Ich habe gewählt test.bakund geprüft, With Replaceaber ich bekomme den Fehler.

  2. Dann habe ich versucht mit der rechten Maustaste darauf zu klicken test2 -> Restore file and filegroups

    Ich habe gewählt test.bakund geprüft, With Replaceaber ich bekomme den Fehler.

Ich kann meine alte Datenbank löschen und dann mein Backup mit dem richtigen Namen wiederherstellen, aber als ich SQL 2008 verwendete, hatte ich keine Probleme, über eine vorhandene Datenbank wiederherzustellen.

Es scheint, dass ich diesen Fehler sehr oft bekomme, seit ich SQL2012 verwende!

Danielle Paquette-Harvey
quelle

Antworten:

12

Sie sollten WITH REPLACEdie Point-and-Click-Objekte in Management Studio verwenden und generell vermeiden - sie sind unflexibel und weisen häufig Fehler auf.

Das hat bei mir funktioniert:

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';

Außerdem sollten Sie sicherstellen, dass Sie beim Sichern von Datenbanken, die Sie verwenden, WITH INITund / oder das Gerät nicht auf eine Datei verweisen, die bereits ein Backup enthält (da es sich möglicherweise nicht um dieselbe Datenbank handelt, die Sie gerade sichern), insbesondere wenn Sie Namen wie wiederverwenden test...).

Aaron Bertrand
quelle
@ AaronBertrand fyi, diese Funktion existiert. Normalerweise benutze ich die Benutzeroberfläche und schreibe sie aus, um sicherzustellen, dass alles in Ordnung ist. Es gibt viele Bugs, ja.
USR
2

1) Verwenden Sie, WITH REPLACEwährend Sie den RESTOREBefehl verwenden.

2) DROPDie ältere Datenbank, die in Konflikt steht, und die Wiederherstellung erfolgt erneut mit dem RESTOREBefehl.

Es gibt kein Problem mit der SQL Server-Version. Wie Aaron betonte, kann ich auch die Datenbank von 2008 bis 2012 und die gleichen Versionen wiederherstellen.

Kin Shah
quelle
2

Sie stellen die falsche Datenbank wieder her. Betrachten Sie es nicht als "Wiederherstellen test2mit einem Backup von test", testsondern als test2" Wiederherstellen meines Backups von", aber benennen Sie es um als ". Sie können die Wiederherstellungsaufgabe auswählen testund test2in das Feld "An Datenbank:" einfügen.

Wie Aaron erwähnt, sollten Sie das Skript lernen, anstatt sich auf den Assistenten zu verlassen - es ist klarer, was wohin geht.

SQLFox
quelle
2

Sie können dies immer noch tun, es ist jedoch ein zusätzlicher Schritt erforderlich.

Öffnen Sie den Wiederherstellungsdialog und treffen Sie Ihre gewohnten Auswahlen für 2008. Wenn die ursprüngliche Datenbank DB ist, wählen Sie das DB.bak-Gerät als Quelle und ändern Sie den Zielnamen in DBTest. Dann unter Wählen Sie eine Seite (obere linke Ecke), wo Sie Allgemein / Dateien / Optionen sehen - wählen Sie Dateien. Schau in das Gitter. Sie sehen Spalten für Original File Name und Restore As File Name. Erweitern Sie letzteres manuell und geben Sie den neuen Namen ein. (Wenn der ursprüngliche Name der Datenbank DB ist und Sie DBTest erstellen möchten, ändern Sie .... \ DB.mdf in ... \ DBTest.mdf usw.)

Dadurch wird Ihre .bak-Datei für DB als Quelle und DBTest als Ziel akzeptiert. Möglicherweise müssen Sie auch zur Seite "Optionen" gehen und "Mit Ersetzen" auswählen. Ich muss aus anderen Gründen, damit ich es nicht ohne diese Option testen kann.

Debby
quelle
2

Die richtige Antwort ist, wie bereits erwähnt, die Verwendung der WITH REPLACEOption.

Ich möchte nur darauf hinweisen, dass Sie den Fehler in der Frage auch bei der Verwendung erhalten können WITH REPLACE, wenn Sie versuchen, von einer differenziellen Sicherung (ohne die vollständige) wiederherzustellen.

Brimstedt
quelle
Wahrscheinlich habe ich nicht genug Punkte , um Kommentar zu dem Zeitpunkt dieser Antwort habe, ich wollte nur darauf hinweisen , dass Sie den Fehler selbst erhalten können bei der Verwendung von „Ersetzen durch“ , wenn Sie versuchen , aus einer differenziellen Sicherung gestellt werden (ohne die vollen)
Brimstedt
0

Hoffe das wird funktionieren.

  1. Sobald Sie den Pfad zum Wiederherstellen der Datei festgelegt haben.
  2. Klicken Sie auf der linken Seite auf "Optionen".
  3. Aktivieren Sie das Kontrollkästchen "Bestehende Verbindungen zur Zieldatenbank schließen".
  4. OK klicken. Bildbeschreibung hier eingeben
Vinu M Shankar
quelle
-4

Bitte stoppen Sie Ihren laufenden Server und stellen Sie dann die Datenbank wieder her. Dies wird Ihnen helfen. :)

Dupinder Singh
quelle