it-swarm.com.de

Stellen Sie eine Datenbank mit einem anderen Namen auf demselben Server wieder her

Ich benötige zu Testzwecken eine Kopie einer Live-Datenbank namens Carers auf demselben Server. Der Name der Testdatenbank lautet Carers_Test.

Ich habe ein Backup von Carers mit SSMS erstellt. Und versucht, es über die GUI wiederherzustellen. Als ich die Schritte befolgte, änderte ich nur den Namen der Datenbank.

Die Wiederherstellung schlägt jedoch mit dem Fehler fehl:

Es konnte kein exklusiver Zugriff erhalten werden, da die Datenbank verwendet wird.

Ich möchte mit der aktuellen Live-Datenbank nichts anfangen. Warum ist es wichtig, dass die Datenbank verwendet wird? Ich habe versucht, dasselbe Backup auf meinem lokalen Host wiederherzustellen, und es wurde erfolgreich wiederhergestellt. Wenn ich versuche, es auf demselben Server mit der Live-Datenbank wiederherzustellen, wird dieser Fehler angezeigt.

Bitte jemand hilft mir ... ich werde verrückt!

3
Junior_dba

Es ist wirklich einfach zu lösen. Sie versuchen, die Originaldateien zu überschreiben, die Sie benötigen, um die Option move wie folgt zu verwenden

restore database <Your-Database> from disk ='<backup-file-path>' 
with move 'mdf_file_name' to '<new-path>',
move 'log_file_name' to '<new-path>'

verwenden Sie diesen Befehl, um den Dateinamen aus der Sicherung zu ermitteln

restore filelistonly from disk ='<backup-file-path>' 
5
Krismorte

Ich denke, es hängt auch davon ab, welche Version von Management Studio Sie verwenden. Wenn Sie ab 2016 den Namen der Zieldatenbank ändern, ändert SSMS den Namen der Wiederherstellungsdateien (siehe Screenshots). Ich scheine mich zu erinnern, dass Sie in älteren SSMS-Versionen die Namen der Dateien manuell ändern mussten, da sie sonst mit den vorhandenen Dateien in Konflikt geraten würden.

Achten Sie auch sehr auf die Optionen "Vorhandene Datenbank überschreiben" und "Vor der Wiederherstellung eine Sicherungskopie des Endprotokolls erstellen". Beide sollten deaktiviert sein!

Wenn ich Sie wäre, würde ich unmittelbar vor dem Versuch, diese Produktionsdatenbank wiederherzustellen, eine Sicherungskopie der Produktionsdatenbank erstellen.

Hier habe ich den Namen der neuen Datenbank geändert: page 1

Hier werden die Namen der neuen Dateien von SSMS geändert. Möglicherweise müssen Sie diese manuell ändern. Überprüfen Sie auf jeden Fall, was SSMS versucht: page 2

Hier sind die beiden wichtigen Optionen deaktiviert: page 3

3
Conrad S.

Es wurde vermutet, dass der Grund für Ihren Fehler in den Datenbankdateien liegt (verwenden Sie dieselben Dateien wie in Ihrer aktuellen/vorhandenen Datenbank). Das ist nicht der Grund für Ihren Fehler. Wenn das die Resonanz wäre, hätten Sie eine andere Fehlermeldung gesehen. Im Folgenden wird versucht, eine Datenbank mit dem Namen TSQL unter Verwendung der gleichen Dateinamen wie die vorhandene TSQL-Datenbank unter dem Namen TSQLTest wiederherzustellen:

Die Datei 'C:\DemoDatabases\DbFiles\a\TSQL.mdf' kann nicht überschrieben werden. Es wird von der Datenbank 'TSQL' verwendet.

SSMS ist ziemlich gut darin, die Namen der Datenbankdateien für Sie zu ändern, wenn Sie etwas für den Namen der wiederherzustellenden Datenbank eingeben. Altes SSMS hat dies auf ziemlich dumme Weise getan, und dann kam eine Version, die die Namen für Sie nicht geändert hat, und in der nächsten Version kam die "intelligente" Dateiänderung, die wir heute sehen. Ich erinnere mich nicht an den Versionsverlauf, als diese Änderungen vorgenommen wurden, aber es ist eine Weile her.

Der Grund für Ihren Fehler ist, dass die Wiederherstellungs-GUI standardmäßig versucht, eine Endprotokollsicherung mit der Option NORECOVERY durchzuführen. Dies schlägt fehl, wenn sich Benutzer in dieser Datenbank befinden.

2
Tibor Karaszi

wie wäre es mit so etwas? Ich stelle die Datenbank mit dem Namen [Northwind] in einer neuen Datenbank mit dem Namen [NORTHWND_new] wieder her.

beachten Sie, dass ich den Namen von Daten und Protokolldateien ändere.

USE [master]

RESTORE DATABASE [NORTHWND_new]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\Northwind.bak'
WITH FILE = 1, MOVE N'Northwind' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\NORTHWND_new.MDF', 
    MOVE N'Northwind_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\NORTHWND_new_log.ldf', NOUNLOAD, STATS = 5
GO
0
Nathan L

Vielen Dank für alle Antworten. Tibor Karaszi und Conrad S., besonders danke an Sie beide, da das Problem das Heck-Backup war. Es wurde ursprünglich angekreuzt und der Fehler wurde dadurch verursacht.

Ich bin jetzt erleichtert :)

0
Junior_dba