Identifizieren Sie die Grundursache dafür, warum die Datenbank im Status RESTORING steckt

10

Ich weiß, dass es Fragen gibt, die das Problem lösen, dass eine Datenbank im RESTORINGStatus steckt, und habe diese Lösungen verwendet, um die Datenbank manuell wieder online zu schalten, aber mein Szenario ist etwas anders.

Ich habe eine automatische Wiederherstellung mit Powershell-Skripten, die eine Kopie der Produktion in einer DEV-Instanz wiederherstellt. Die Skripte bleiben ungefähr ein Jahr lang unverändert und gelegentlich wird der Wiederherstellungsprozess abgeschlossen, aber die wiederhergestellte Datenbank bleibt im RESTORINGStatus hängen (manchmal funktioniert das Skript einwandfrei, manchmal schlägt es so fehl).

Jedes Mal, wenn ich den Prozess manuell erneut ausführe, funktioniert er oder wenn ich die Datenbank manuell über die Benutzeroberfläche von SSMS oder über T-SQL wiederherstelle, wird sie problemlos abgeschlossen.

Ich habe Antworten gefunden, die empfohlen haben, CHECKDBauf der wiederhergestellten Datenbank ausgeführt zu werden, aber es hat sich nichts als Ursache für dieses Problem herausgestellt.

Da die Wiederherstellungsskripte eine vollständige Sicherung der Datenbank wiederherstellen und eine "WITH RECOVERY"Option verwenden, versuche ich herauszufinden, was den Wiederherstellungsprozess möglicherweise stoppt, obwohl ich ihn tatsächlich mithilfe von wiederherstelle "WITH RECOVERY".

Alle Vorschläge werden sehr geschätzt, da ich nicht verstehen kann, warum dies von Zeit zu Zeit geschieht.

Ich würde sehr gerne die Grundursache des Problems lösen, anstatt die Symptome zu behandeln, nämlich die DB erneut manuell wiederherzustellen.

Aktualisieren:

Github Gist als @Brent empfohlen - hier .

Radu Gheorghiu
quelle
1
Sie können die Antwort aus den SQL Server-Protokollen und der Ereignisanzeige abrufen. Haben Sie dies überprüft? Tritt ein Platzproblem auf, weil dies dazu führen kann, dass der Wiederherstellungszustand hängen bleibt. Überprüfen Sie die Sicherungsintegrität vor dem Wiederherstellen? Wie ist Ihr Speichersubsystem
Shanky
@Shanky Ich werde mir diese ansehen, obwohl ich keinen direkten Zugriff auf diese Informationen habe (ich muss mich mit meinem SAN-Administrator vertraut machen). Die Sicherungsintegrität wird so eingestellt, dass sie sowohl beim Sichern als auch beim Schreiben auf die Festplatte überprüft wird.
Radu Gheorghiu
1
Was sagt das SQL Server-Fehlerprotokoll? Versuchen Sie es auszuführen EXEC sys.xp_readerrorlog 0,1;- suchen Sie nach Nachrichten zum Zeitpunkt des Wiederherstellungsvorgangs.
Max Vernon
@MaxVernon Das Fehlerprotokoll vom Zeitpunkt der Wiederherstellung . Ich habe die Fehlermeldung überprüft und es scheint zu empfehlen, den Speicherplatz zu überprüfen, was ausreichend ist. Ich werde tiefer graben und sehen, was ich finden kann, aber auf einen kurzen Blick könnte sich dies ziemlich erweitern und mich dazu bringen, viele Dinge zu betrachten .
Radu Gheorghiu

Antworten:

8

Occams Rasiermesser schlägt vor, mit dem Offensichtlichen zu beginnen:

Wenn Ihr Skript manchmal eine Datenbank im Wiederherstellungsstatus belässt, debuggen Sie das Skript.

Beginnen Sie, indem Sie protokollieren, was Sie in einer Tabelle oder Datei tun. Wenn sich die Datenbank im Wiederherstellungszustand befindet, gehen Sie Ihre Protokolle zurück, um festzustellen, was schief gelaufen ist. (Wenn Sie einen zweiten Satz Augen aus der Community haben möchten, versuchen Sie, Ihr Skript als Github Gist hochzuladen. Beachten Sie jedoch, dass es für die Leute möglicherweise schwieriger ist, Fehler zu erkennen, je größer es ist.)

Wenn Sie dies nicht möchten, versuchen Sie, einen Profiler- oder Extended Events-Trace auszuführen, um die Wiederherstellungsereignisse zu verfolgen. Seien Sie jedoch gewarnt - es ist viel schwieriger als es aussieht. (Lesen Sie die Kommentare zu diesem Beitrag, um noch mehr Leserideen zu erhalten, die sie ausprobiert haben und die fehlgeschlagen sind.)

Brent Ozar
quelle
Danke Brent, das sind einige gute Richtlinien! Ich werde mit einem Update zurück sein, wenn ich weitere Informationen habe. Für den Moment, in dem die Datenbank in Ordnung ist, werde ich sehen, was passiert, wenn der Prozess morgen früh erneut ausgeführt wird.
Radu Gheorghiu