Ich weiß, dass es Fragen gibt, die das Problem lösen, dass eine Datenbank im RESTORING
Status 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 RESTORING
Status 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, CHECKDB
auf 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 .
quelle
EXEC sys.xp_readerrorlog 0,1;
- suchen Sie nach Nachrichten zum Zeitpunkt des Wiederherstellungsvorgangs.Antworten:
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.)
quelle