Ich habe eine Datenbank gesichert:
BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing
Und dann versucht, es wiederherzustellen:
RESTORE DATABASE MyDatabase
FROM DISK = 'MyDatabase.bak'
WITH REPLACE --force restore over specified database
Und jetzt steckt die Datenbank im Wiederherstellungszustand fest.
Einige Leute haben die Theorie aufgestellt, dass es daran liegt, dass die Sicherung keine Protokolldatei enthält und dass sie mithilfe von:
RESTORE DATABASE MyDatabase
WITH RECOVERY
Nur dass das natürlich fehlschlägt:
Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Und genau das, was Sie in einer katastrophalen Situation wollen, ist eine Wiederherstellung, die nicht funktioniert.
Die Sicherung enthält sowohl eine Daten- als auch eine Protokolldatei:
RESTORE FILELISTONLY
FROM DISK = 'MyDatabase.bak'
Logical Name PhysicalName
============= ===============
MyDatabase C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
sql-server
backup
restore
Ian Boyd
quelle
quelle
DROP DATABASE db
Befehl über SSMS ausgegeben, und es hat funktioniert (früher habe ich SSMS von einem anderen Computer verwendet, um die Befehle auszugeben). Ich vermute, die anderen Lösungen hätten auch funktioniert.Antworten:
Sie müssen die
WITH RECOVERY
Option mit Ihrem Datenbankbefehl verwendenRESTORE
, um Ihre Datenbank im Rahmen des Wiederherstellungsprozesses online zu schalten.Dies ist natürlich nur dann der Fall, wenn Sie keine Transaktionsprotokollsicherungen wiederherstellen möchten, dh nur eine Datenbanksicherung wiederherstellen möchten und dann auf die Datenbank zugreifen können.
Ihr Befehl sollte so aussehen,
Möglicherweise haben Sie mit dem Assistenten zum Wiederherstellen der Datenbank in SQL Server Management Studio mehr Erfolg. Auf diese Weise können Sie die spezifischen Speicherorte der Dateien, die Option zum Überschreiben und die Option WITH Recovery auswählen.
quelle
In dieser Situation wurde eine Datenbank mit Symantec Backup Exec 11d in einer SQL Server 2005 Standard Edition-Instanz wiederhergestellt. Nach Abschluss des Wiederherstellungsauftrags blieb die Datenbank im Status "Wiederherstellen". Ich hatte keine Probleme mit dem Speicherplatz - die Datenbank hat den Status "Wiederherstellen" einfach nicht verlassen.
Ich habe die folgende Abfrage für die SQL Server-Instanz ausgeführt und festgestellt, dass die Datenbank sofort verwendbar wurde:
quelle
So geht's:
quelle
drop database <dbname>
in einem Abfragefenster zu löschen. Dann habe ich mit der rechten Maustaste auf Datenbanken geklickt und Aktualisieren ausgewählt, wodurch der Eintrag in Management Studio entfernt wurde. Danach habe ich eine neue Wiederherstellung durchgeführt, die einwandfrei funktioniert hat ( beachten Sie, dass das Offline-Schalten nicht funktioniert hat, ein Neustart des SQL-Dienstes nicht funktioniert hat und ein Neustart des Servers ebenfalls nicht funktioniert hat).Ich hatte einen ähnlichen Vorfall beim Stoppen eines sekundären Protokollversand-Servers. Nach dem Befehl zum Entfernen des Servers aus dem Protokollversand und zum Stoppen des Protokollversands vom Primärserver blieb die Datenbank auf dem Sekundärserver nach dem Befehl im Wiederherstellungsstatus hängen
Die Datenbanknachrichten:
Die Datenbank war nach diesen 18 Sekunden wieder verwendbar.
quelle
Ich hatte ein ähnliches Problem beim Wiederherstellen mit SQL Management Studio. Ich habe versucht, eine Sicherung der Datenbank in einer neuen mit einem anderen Namen wiederherzustellen. Zuerst schlug dies fehl und nach dem Korrigieren der Dateinamen der neuen Datenbank wurde es erfolgreich ausgeführt - auf jeden Fall trat das von mir beschriebene Problem erneut auf, selbst wenn ich es vom ersten Mal an richtig verstanden habe. Nach der Wiederherstellung blieb die ursprüngliche Datenbank mit einem (Wiederherstellen ...) neben ihrem Namen. In Anbetracht der Antworten des obigen Forums (Bhusans) habe ich versucht, im Abfrage-Editor nebenbei Folgendes auszuführen:
was das Problem behoben hat. Ich hatte zuerst Probleme wegen des Datenbanknamens, der Sonderzeichen enthielt. Ich habe dies durch Hinzufügen von doppelten Anführungszeichen behoben - einfache Anführungszeichen würden nicht funktionieren und einen Fehler "Falsche Syntax in der Nähe von ..." ergeben.
Dies war die minimale Lösung, mit der ich versucht habe, dieses Problem zu beheben (Datenbank steckt im Wiederherstellungszustand fest), und ich hoffe, dass sie auf weitere Fälle angewendet werden kann.
quelle
OK, ich habe ein ähnliches Problem und genau wie im Fall von Pauk wurde es dadurch verursacht, dass dem Server beim Wiederherstellen der Speicherplatz ausgeht und somit ein dauerhafter Wiederherstellungsstatus verursacht wurde. Wie kann ich diesen Status beenden, ohne die SQL Server-Dienste zu beenden?
Ich habe eine Lösung gefunden :)
quelle
Die Option WITH RECOVERY wird standardmäßig verwendet, wenn die Befehle RESTORE DATABASE / RESTORE LOG ausgeführt werden. Wenn Sie im "Wiederherstellungs" -Prozess stecken bleiben, können Sie eine Datenbank wieder in den Online-Status versetzen, indem Sie Folgendes ausführen:
Wenn mehrere Dateien wiederhergestellt werden müssen, erfordern CLI-Befehle WITH NORECOVERY bzw. WITH RECOVERY. Nur die letzte Datei im Befehl sollte WITH RECOVERY haben, um die Datenbank wieder online zu schalten:
Sie können den SQL Server Management Studio-Assistenten auch verwenden:
Es gibt auch einen virtuellen Wiederherstellungsprozess, aber Sie müssen Lösungen von Drittanbietern verwenden. Normalerweise können Sie eine Datenbanksicherung als Live-Online-Datenbank verwenden. ApexSQL und Idera haben ihre eigenen Lösungen. Überprüfung durch SQL Hammer über ApexSQL Restore . Die virtuelle Wiederherstellung ist eine gute Lösung, wenn Sie mit einer großen Anzahl von Sicherungen arbeiten. Der Wiederherstellungsprozess ist viel schneller und kann auch viel Speicherplatz auf dem Festplattenlaufwerk sparen. Zum Vergleich können Sie sich hier die Infografik ansehen .
quelle
Das mag ziemlich offensichtlich sein, aber es hat mich gerade gestolpert:
Wenn Sie eine Endprotokollsicherung durchführen, kann dieses Problem auch dadurch verursacht werden, dass diese Option im SSMS-Wiederherstellungsassistenten aktiviert ist - "Quelldatenbank im Wiederherstellungsstatus belassen (WITH NORECOVERY)".
quelle
Ich habe herausgefunden warum.
Wenn der Client, der den
RESTORE DATABASE
Befehl ausgegeben hat , während der Wiederherstellung die Verbindung trennt, bleibt die Wiederherstellung hängen.Es ist seltsam, dass der Server, wenn er über eine Clientverbindung angewiesen wird, eine Datenbank wiederherzustellen, die Wiederherstellung erst abschließt, wenn der Client die ganze Zeit in Verbindung bleibt.
quelle
Dieser hat funktioniert:
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457
Ich hatte eine Situation, in der meine Datenbank den Wiederherstellungsstatus anzeigte und ich keine Abfragen ausführen und keine Verbindung mit unserer Software herstellen konnte.
Was ich getan habe, um aus dieser Situation herauszukommen, ist:
Stoppen Sie alle SQL-bezogenen Dienste von Windows-Diensten.
Ich habe den DATA-Ordner geöffnet, in dem sich die Ldf- und Mdf-Dateien im SQL-Verzeichnis befinden. Normalerweise lautet er wie folgt: "C: \ Programme *********** \ MSSQL \ DATA
Dann habe ich sowohl die Ldf- als auch die Mdf-Datei der Datenbank kopiert: [Datenbankname] .mdf und [Datenbankname] _log.ldf
Ich habe diese beiden Dateien in einen anderen Ordner kopiert.
Dann habe ich alle SQL-bezogenen Dienste (in Schritt 1) erneut über Windows-Dienste gestartet.
Startete mein MS SQL Management Studio mit normaler Anmeldung.
Klicken Sie mit der rechten Maustaste auf die Täterdatenbank und drücken Sie LÖSCHEN (um die Datenbank überhaupt zu löschen).
Alle LDF- und MDF-Dateien, die sich auf diese Datenbank beziehen, wurden aus dem DATA-Ordner entfernt (siehe Schritt 2).
Erstellt eine neue Datenbank mit demselben Namen (derselbe Name der Datenbank, die ich in Schritt 6 gelöscht habe - die Datenbank der Schuldigen).
Dann [Datenbankname] -> Rechtsklick -> Aufgaben -> Offline nehmen.
Ich habe dann beide Dateien (ab Schritt 3) zurück in den DATA-Ordner kopiert (Schritt 2).
[Datenbankname] -> Rechtsklick -> Aufgaben -> Online bringen.
quelle
Ich hatte ein . in meinem Datenbanknamen, und die Abfrage funktionierte aus diesem Grund nicht (mit der Angabe Falsche Syntax in der Nähe von '.'). Dann wurde mir klar, dass ich eine Klammer für den Namen benötige:
quelle
In meinem Fall war es ausreichend, die Datenbank, die im Status "Wiederherstellen ..." hing, mit dem SQL-Befehl zu löschen
in einem Abfragefenster.
Dann habe ich mit der rechten Maustaste auf Datenbanken geklickt und Aktualisieren ausgewählt, wodurch der Eintrag in Management Studio entfernt wurde. Danach habe ich eine neue Wiederherstellung durchgeführt, die einwandfrei funktioniert hat (beachten Sie, dass das Offline-Schalten nicht funktioniert hat, ein Neustart des SQL-Dienstes nicht funktioniert hat und ein Neustart des Servers ebenfalls nicht funktioniert hat).
quelle
Ich hatte dieses Problem, als ich auch einen TCP-Fehler im Ereignisprotokoll erhielt ...
Löschen Sie die Datenbank mit SQL oder klicken Sie mit der rechten Maustaste darauf im Manager "Löschen" und stellen Sie sie wieder her.
Ich habe standardmäßig damit begonnen. Skripten Sie den DB-Drop, erstellen Sie ihn neu und stellen Sie ihn dann wieder her.
quelle
Standardmäßig wird jeder
RESTORE DATABASE
mitRECOVERY
Setup geliefert. Die Option 'NORECOVERY' teilt dem SQL Server im Wesentlichen mit, dass die Datenbank auf weitere Wiederherstellungsdateien wartet (dies kann eine DIFF- und eine LOG- Datei sein und, falls möglich, eine Tail-Log-Sicherungsdatei enthalten). Mit den Optionen 'WIEDERHERSTELLUNG' können Sie alle Transaktionen abschließen und die Datenbank für die Ausführung von Transaktionen bereitstellen.Damit:
NORECOVERY
Option nur durchführen , wenn Sie über eine DIFF- Sicherung verfügen . In der SIMPLE- Wiederherstellungsmodelldatenbank ist keine LOG- Sicherung zulässig .NORECOVERY
Option durchführen, dann eine DIFF gefolgt von einer Option durchführenNORECOVERY
und schließlich eine LOG- Wiederherstellung mitRECOVERY
Option durchführen.Denken Sie daran, DIE LETZTE RESTORE QUERY MUST HAVE
RECOVERY
OPTION . Es könnte ein expliziter Weg sein oder nicht. In Therms von T-SQL ist die Situation:1.
Die Option WITH REPLACE muss mit Vorsicht verwendet werden, da dies zu Datenverlust führen kann
Wenn Sie eine FULL- und DIFF-Sicherung durchführen, können Sie diese verwenden
Natürlich können Sie eine Wiederherstellung mit der Option STATS = 10 durchführen , die den SQL Server anweist , alle 10% abgeschlossen zu melden.
Wenn Sie möchten, können Sie den Prozess beobachten oder in Echtzeit abfragen. Wie folgt:
Ich hoffe das hilft.
quelle
Es kann auch Probleme beim Löschen einer feststeckenden Datenbank geben, wenn der Snapshot aktiviert ist. Bei mir hat das geklappt:
quelle
Haben Sie versucht, NUR eine VERIFY durchzuführen? Nur um sicherzugehen, dass es sich um ein Sound-Backup handelt.
http://msdn.microsoft.com/en-us/library/ms188902.aspx
quelle
Ich habe den Fall MyDbName (Wiederherstellen ...) aufgrund des SQL Express-Lizenzlimits.
In der Protokolldatei habe ich Folgendes gefunden:
Wenn Sie also versuchen, eine größere Datenbank wiederherzustellen, müssen Sie beispielsweise Ihren SQL Express-Server auf Developer Edition umstellen .
quelle
Beim Wiederherstellen der Datenbank mit SQL Server Management Studio ist ein ähnliches Problem aufgetreten, das im Wiederherstellungsmodus hängen geblieben ist. Nach mehreren Stunden der Problemverfolgung funktionierte die folgende Abfrage für mich. Die folgende Abfrage stellt die Datenbank von einer vorhandenen Sicherung auf einen vorherigen Status zurück. Ich glaube, der Haken ist, die .mdf- und .log-Datei im selben Verzeichnis zu haben.
quelle
Verwendung von folgendem T-SQL:
SELECT Dateiname FROM master.sys.sysaltfiles WHERE dbid = DB_ID ('db_name');
Kontinuierliche Verwendung von T-SQL:
RESTORE DATABASE FROM DISK = 'DB_path' WITH RESTART, REPLACE;
Ich hoffe das hilft!
quelle
Alle auf WITH RECOVERY basierenden Optionen haben bei mir nicht funktioniert.
Die vollständige Wiederherstellung aus Management Studio wurde durchgeführt.
quelle
Ich hatte das gleiche Problem ... obwohl ich nicht weiß, warum in meiner Datenbank dieses Problem aufgetreten ist, da mein Laufwerk nicht voll war ... Es ist, als wäre es beschädigt oder so. Ich habe alle oben genannten Funktionen ausprobiert. Keiner von ihnen hat vollständig funktioniert. Ich dachte insbesondere, dass der Vorschlag, den Dienst zu beenden und die MDF- und LDF-Dateien zu löschen, funktionieren würde ... aber er ist bei der Wiederherstellung immer noch eingefroren?
Am Ende habe ich dieses Problem behoben, indem ich die Dateien wie erwähnt gelöscht habe. Statt jedoch erneut zu versuchen, die Datenbank wiederherzustellen, habe ich neue MDF- und .ldf-Dateien kopiert und diese mit dem Front-End-Anhang-Assistenten angehängt. Erleichterung, es hat funktioniert !!
Das Kopieren der neuen Dateien dauerte für immer, da ich eine virtuelle Maschine verwende. Das Kopieren und Einfügen über die Zwischenablage dauerte also ungefähr eine Stunde. Daher würde ich dies nur als letzten Versuch empfehlen.
quelle
Was es für mich reparierte, war
quelle
quelle
Verwenden Sie den folgenden Befehl, um dieses Problem zu beheben
quelle