SQL Server-Datenbanken stecken im Wiederherstellungsstatus


79

Ich habe einen Sharepoint-Server. Wir hatten ein Problem mit unserem Backup-Tool und jetzt sind einige meiner Datenbanken im Wiederherstellungszustand!

Bild zeigt die Wiederherstellung von Datenbanken

Kann der Wiederherstellungsprozess abgebrochen werden? Und wie kann ich sicherstellen, dass die Datenbankintegrität nicht beeinträchtigt wurde?

Antworten:


129

Dies wird wahrscheinlich durch das Wiederherstellungsskript verursacht, das den WITH NORECOVERYParameter hinzufügt , um die Datenbank für ein Transaktionsprotokoll vorzubereiten, das nach der Wiederherstellung angewendet wird.

Die Datenbank wartet jetzt auf die neueste Transaktionsprotokolldatei.

Du kannst entweder:

  1. Wenden Sie das neueste Transaktionslog mit RESTORE LOG database_name FROM backup_device WITH RECOVERY;... oder an
  2. Stellen Sie die Datenbank erneut wieder her, diesmal jedoch mit ... WITH RECOVERY;... oder
  3. Deaktivieren Sie den Wiederherstellungsmodus für die Datenbank, indem Sie Folgendes ausführen: RESTORE DATABASE YourDb WITH RECOVERY;

Bevor Sie dies tun, stellen Sie bitte sicher, dass Sie die Auswirkungen dieser Optionen verstehen. Sie können Datenverlust verursachen, wenn Sie nicht vorsichtig sind.

Siehe dies für Details:


Wenn diese nicht funktionieren, lesen Sie dba.stackexchange.com/questions/11175/… - erneut VIELE WARNUNGEN VON DOOM, wenn Sie nicht wissen, was Sie tun, und das volle Risiko eines Datenverlusts verstehen. Wenn Sie sich jedoch auf einem Nicht-Produktionsserver in einer Schwebe befinden, haben Sie gute Backups, von denen Sie eine neue Wiederherstellung durchführen können, und Sie können es sich leisten, SQL auf diesem Server neu zu starten.
NateJ

6
Msgstr "Erzwinge den Wiederherstellungsmodus der Datenbank durch Ausführen von: RESTORE DATABASE YourDb WITH RECOVERY". 20 Minuten Kopfkratzen und Neustarten von Diensten, dann mit einem Einzeiler fixiert. Vielen Dank!
Echilon

2
Ich steckte in der gleichen Situation wie meine Entwickler-Box fest. Option 3 funktionierte wie ein Zauber!
Moiz Tankiwala

Ich habe versucht, eine Datenbank aus .bak in eine neue Datenbank wiederherzustellen , habe jedoch vergessen, die Dateinamen auf der Festplatte zu ändern. Die Wiederherstellung ist fehlgeschlagen, obwohl die Dateien nicht von einer vorhandenen Datenbank verwendet wurden, sondern von einem anderen Fehler. Dies hat die vorhandene Datenbank durcheinander gebracht (sie steckt im Wiederherstellungszustand fest). Nr. 3 stellt es in einer Sekunde wieder online und überprüft die Daten, alles sieht gut aus. Vielen Dank!
CoDEmanX

44

Einfaches T-SQL-Skript zur Lösung dieses Problems:

Schreiben Sie dieses Skript in das Fenster "Neue Abfrage" und führen Sie Folgendes aus:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

RESTORE DATABASE [database_name] WITH RECOVERY .... Hat perfekt für mich funktioniert. Danke!

10
Seien Sie sehr vorsichtig, um die Auswirkungen zu verstehen. Wenn die Datenbank auf eine Protokollwiederherstellung wartet, kann dies zu erheblichen Datenverlusten führen.
David Spillett

2
Funktioniert aufgrund eines Fehlers nicht. "Die Datenbank kann nicht wiederhergestellt werden, da das Protokoll nicht wiederhergestellt wurde."
Ian Boyd

0

Ich hatte gerade diese Situation und die Heilung war ziemlich überraschend:

ALTER DATABASE DBName SET ONLINE;

Anscheinend hat die NetBackup-Wiederherstellung einen seltsamen Zustand hinterlassen. Keine andere Lösung funktionierte (obwohl ich noch nicht versucht hatte, den SQL Server-Dienst neu zu starten)

Ich würde jedoch mit der Datenbank vorsichtig sein, da theoretisch, sobald eine Wiederherstellung startet und dann fehlschlägt, Daten beschädigt werden könnten. Ich stelle die Datenbank trotzdem wieder her, also ist es mir egal.


Dies ist die falsche Antwort auf diese Frage. Wenn Sie versuchen, eine Datenbank festzulegen, die sich in der Online-Wiederherstellung befindet, wird die Fehlermeldung "ALTER DATABASE ist nicht zulässig, während sich eine Datenbank im Wiederherstellungsstatus befindet" angezeigt.
James Jenkins

Vielleicht sind Sie nicht vertraut damit, wie wir auf StackOverflow manchmal Fragen beantworten, die sich geringfügig von den gestellten unterscheiden. Dies bietet einen Mehrwert, da Menschen nach der Online-Suche häufig ähnliche Fragen stellen. Bezüglich Ihrer tatsächlichen Behauptung, ALTER DATABASEnicht erlaubt zu sein, versichere ich Ihnen, dass in meinem Fall die Datenbank tatsächlich so angezeigt wurde, wie sie wiederhergestellt wurde, und SET ONLINEtatsächlich funktioniert hat . Erkenne also, dass du mich falsch oder gelogen nennst. Müssen Sie das wirklich tun, wenn eine Alternative verfügbar ist?
ErikE

@ JamesJenkins Und was ist das für eine Alternative? Die Alternative ist die Hypothese, dass eine Datenbank bei der Statuswiederherstellung angezeigt werden könnte, jedoch nicht tatsächlich wiederhergestellt wird. Oder es könnte sich um den letzten Schritt der Wiederherstellung handeln, bei dem die Wiederherstellung tatsächlich abgeschlossen ist, sodass der ONLINEStatus tatsächlich festgelegt werden kann . Ich denke, Ihr Kommentar und Ihre Ablehnung sind für diese Website nicht zutreffend und Ihre Informationen sind sachlich falsch, da sie nicht den von mir angegebenen Daten entsprechen.
ErikE

0

Wie wir wissen, ist die Standardoption für die Datenbankwiederherstellung die Option "Wiederherstellung", mit der sichergestellt wird, dass die Datenbank nach Abschluss der Datenbankwiederherstellung verfügbar ist und online verwendet werden kann.

Beispiel:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

Sehen wir uns die wichtigen Punkte zu Wiederherstellen ohne Wiederherstellung an

  • Datenbank ist nicht verwendbar
  • Bleibt im Wiederherstellungsmodus
  • Die nächste Wiederherstellungssequenz kann durchgeführt werden
  • Rollback von nicht festgeschriebenen Transaktionen

Mit NoRecovery wiederherstellen

Diese Option wird insbesondere verwendet, wenn mehrere Sicherungen wiederhergestellt werden sollen. Wenn Sie den Wiederherstellungsbefehl mit der Option norecovery ausführen, bedeutet dies, dass die Datenbank für die Benutzer erst freigegeben wird, wenn die letzte Sicherung in Folge wiederhergestellt wurde. Bei der letzten Sicherung wird die Wiederherstellungsoption verwendet und die Datenbank wird online geschaltet.

Beispiel:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

Und dann:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

1
Möglicherweise haben Sie einen Tippfehler in Ihrer Antwort. In dem mit ... gekennzeichneten Abschnitt über Mit Wiederherstellung wiederherstellen werden alle Optionen aufgelistet, die für die RESTORE ...WITH NORECOVERYOption gelten. Könnten Sie das noch einmal überprüfen?
hot2use
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.