Eine MDF-Datei kann beim Wiederherstellen einer Datenbank in SQL Server nicht überschrieben werden

21

Ich habe eine Datenbank A. Sie enthält einige Daten. Ich habe ein Backup für A als A.bak- Datei erstellt. Dann erstelle ich eine neue leere Datenbank B. Und dann versuche ich, B aus A.bak wiederherzustellen . Aber der SQL Server sagt mir den folgenden Fehler:

Die Datei 'C: \ SQL-Verzeichnis \ DATA \ A.mdf' kann nicht überschrieben werden. Es wird von der Datenbank 'A' verwendet.

Wenn ich jedoch A von SQL Server lösche, ist die Wiederherstellung in Ordnung.

Ich verstehe nicht, warum SQL beim Wiederherstellen von einer separaten Sicherungsdatei in die ursprüngliche Datenbankdatei schreiben muss .

Vielen Dank ~

smwikipedia
quelle

Antworten:

19

Wenn Sie eine Datenbank wiederherstellen, versucht SQL Server standardmäßig, alle Daten und Protokolldateien an ihren ursprünglichen Speicherorten wiederherzustellen. Da diese ursprünglichen Speicherorte noch von der ursprünglichen Datenbank ("A") verwendet werden, schlägt die Wiederherstellung fehl. Sie müssen die WITH MOVE-Klausel verwenden, um neue Speicherorte für alle Dateien in der Datenbank anzugeben.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Sowas sowieso. Verwenden Sie RESTORE FILELISTONLY FROM DISK ..., um bei Bedarf die logischen Dateinamen in der Sicherung anzuzeigen.

db2
quelle
11

WITH MOVE/ MOVEIst die richtige Lösung in T-SQL.

Übrigens, wenn Sie die GUI verwenden möchten, können Sie zu Dateien gehen und umbenennen:

  • a.MDF
  • a.NDF
  • a.LDF

zu

  • b.MDF
  • b.NDF
  • b.LDF

Bildbeschreibung hier eingeben

Francesco Mantovani
quelle
1
Wenn Sie den Namen der Zieldatenbank auf der Registerkarte "Allgemein" ändern, aktualisiert die grafische Benutzeroberfläche die Namen der Wiederherstellungsdateien automatisch entsprechend.
Wouter
0

Wenn Sie die Sicherung wiederherstellen, können Sie die wiederherzustellenden Datendateien angeben.

Schau hier und hier . Sie können die Option "Datenbankdateien wiederherstellen als" und das Flag "Vorhandene Datenbank überschreiben" verwenden.

demas
quelle
0

Verwenden Sie die Option REPLACE entweder im TSQL-Befehl oder als ausgewähltes Kontrollkästchen? Alternativ können Sie die Dateien umbenennen und der Datenbank einen anderen Namen geben.

Es ist auch etwas schwierig, eine Datenbank wiederherzustellen, die gerade verwendet wird. Sie müssen die Prozesse mithilfe der Datenbank beenden. ODER löschen Sie zuerst die Datenbank und schließen Sie die Verbindungen (dies ist wahrscheinlich die einfachste). ODER stellen Sie die Datenbank, die Sie überschreiben möchten, auf einen eingeschränkten Benutzermodus mit sofortigem Rollback ein, damit hoffentlich nur DBAs sie verwenden können. ODER stoppen Sie sogar SQL Server und starten Sie ihn neu - hoffentlich wird die Wiederherstellung ausgeführt, bevor jemand diese Datenbank verwendet.

PS: Erstellen Sie für alle Fälle eine Sicherungskopie der zu überschreibenden Datenbank.

Peter Schofield
quelle
0

Wenn jemand eine Lösung in der Benutzeroberfläche von Management Studio sucht, nachdem er die OptionsSeite bereits verwendet und die Overwrite the existing database (WITH REPLACE)Option aktiviert hat :

Klicken Sie einfach in die Restore AsSpalte und ändern Sie die Dateinamen der *.mdfDatei und der *.ldfDatei.

jan
quelle