Ich versuche tatsächlich, ein Skript (in SQL Server 2008) zu erstellen, um eine Datenbank aus einer Sicherungsdatei wiederherzustellen. Ich habe den folgenden Code erstellt und erhalte eine Fehlermeldung:
Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.
Wie behebe ich dieses Problem?
IF DB_ID('AdventureWorksDW') IS NOT NULL
BEGIN
RESTORE DATABASE [AdventureWorksDW]
FILE = N'AdventureWorksDW_Data'
FROM
DISK = N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak'
WITH FILE = 1,
MOVE N'AdventureWorksDW_Data'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf',
MOVE N'AdventureWorksDW_Log'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF',
NOUNLOAD, STATS = 10
END
sql
sql-server
sql-server-2008
Dampf
quelle
quelle
Antworten:
Ich gehe davon aus, dass Sie sich beim Wiederherstellen einer Datenbank nicht um vorhandene Transaktionen auf dieser Datenbank kümmern. Richtig? Wenn ja, sollte dies für Sie funktionieren:
Nun ein weiterer Punkt zu beachten. Nachdem Sie die Datenbank in den Einzelbenutzermodus versetzt haben, versucht möglicherweise eine andere Person, eine Verbindung zur Datenbank herzustellen. Wenn sie erfolgreich sind, können Sie mit der Wiederherstellung nicht fortfahren. Es ist ein Rennen! Mein Vorschlag ist, alle drei Anweisungen gleichzeitig auszuführen.
quelle
USE master
nichtUSER master
.ALTER DATABASE [AdventureWorksDW] SET MULTI_USER
am Ende hinzu, um sicherzustellen, dass sich die Datenbank wieder im normalen Mehrbenutzermodus befindet.SINGLE_USER
ZeitpunktSINGLE_USER
der Sicherung im Modus befand , befindet sie sich bei der Wiederherstellung der Sicherung im Modus. Wenn es sichMULTI_USER
zur Sicherungszeit imMULTI_USER
Modus befand, befindet es sich bei der Wiederherstellung im Modus. Sie machen einen großen Punkt: Es lohnt sich auf jeden Fall, nach Abschluss der Wiederherstellung zu überprüfen. Sie können RESTORE HEADERONLY auch auf dem Sicherungsmedium ausführen undIsSingleUser
dieFlags
Spalte überprüfen oder bitweise berechnen .quelle
Führen Sie diese Abfrage aus, bevor Sie die Datenbank wiederherstellen:
und dieser nach der Wiederherstellung:
quelle
Für mich ist die Lösung:
Aktivieren Sie das Kontrollkästchen Vorhandene Datenbank überschreiben (MIT ERSETZEN) auf der Registerkarte optoins auf der linken Seite.
Deaktivieren Sie alle anderen Optionen.
Wählen Sie die Quell- und Zieldatenbank aus.
OK klicken.
Das ist es.
quelle
Verwenden Sie das folgende Skript, um alle geöffneten Verbindungen zur Datenbank zu finden und zu beenden, bevor Sie die Datenbank wiederherstellen.
Hoffe das wird helfen ...
quelle
Ich denke, Sie müssen nur die Datenbank auf den Einzelbenutzermodus einstellen, bevor Sie versuchen, wie unten beschrieben wiederherzustellen. Stellen Sie einfach sicher, dass Sie verwenden
master
quelle
Ich habe gerade den sqlexpress-Dienst neu gestartet und dann die Wiederherstellung ordnungsgemäß abgeschlossen
quelle
quelle
Lösung 1: Starten Sie die SQL-Dienste neu und versuchen Sie, die Datenbank wiederherzustellen. Lösung 2: Starten Sie das System / den Server neu und versuchen Sie, die Datenbank wiederherzustellen. Lösung 3: Nehmen Sie die aktuelle Datenbank zurück, löschen Sie die aktuelle / Ziel-Datenbank und versuchen Sie, die Datenbank wiederherzustellen.
quelle
Das Einstellen der Datenbank in den Einzelbenutzermodus hat bei mir nicht funktioniert, aber es hat funktioniert, sie offline zu schalten und dann wieder online zu schalten. Es befindet sich im Kontextmenü der Datenbank unter Aufgaben.
Stellen Sie sicher, dass im Dialogfeld die Option "Alle aktiven Verbindungen löschen" aktiviert ist.
quelle
Hier ist eine Möglichkeit, wie ich die Datenbank von der Produktion bis zur Entwicklung wiederherstellen kann:
HINWEIS: Ich mache es über einen SSAS-Job, um die Produktionsdatenbank täglich zur Entwicklung zu bringen:
Schritt 1: Löschen Sie die Sicherung des Vortages in der Entwicklung:
Schritt 2: Kopieren Sie die Produktionsdatenbank in die Entwicklung:
Schritt 3: Wiederherstellung durch Ausführen eines SQL-Skripts
Code in der Datei AE11_Restore.sql:
quelle
Ich habe diesen Fehler erhalten, als nicht genügend Speicherplatz vorhanden war, um Db wiederherzustellen. Das Reinigen von etwas Platz löste es.
quelle
Es hat bei mir funktioniert, die ursprüngliche Datenbank offline zu schalten
quelle