Kann ich eine SQL-Datenbank ohne Standby-Datei aus Standby / Read-Only wiederherstellen?

8

Gibt es eine Möglichkeit, eine SQL-Datenbank aus dem Standby- / Nur-Lese-Modus wiederherzustellen, wenn die "Standby-Datei" fehlt?

(Ich sehe einige Referenzen, die dies als TUF-Datei in einem Protokollversand-Szenario bezeichnen, aber in meinem Fall war es nur eine manuelle Wiederherstellung und die Standby-Datei hatte eine BAK-Erweiterung.)

Das Ausführen einer "RESTORE DATABASE foo WITH RECOVERY" führt zu einem schwerwiegenden Fehler:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

Die Wiederherstellung wurde vor einiger Zeit durchgeführt, und leider befand sich die Standby-Datei im Sicherungsordner und wurde von unserer Routine zur Ordnerbereinigung entfernt. Auf keinem anderen Medium ist eine Kopie der Datei vorhanden. Die ursprünglichen Sicherungen, die zur Wiederherstellung bis zu diesem Punkt verwendet wurden, sind ebenfalls längst nicht mehr vorhanden.

Glücklicherweise ist dies keine große Sache für uns (es war eine temporäre Wiederherstellung), aber ich konnte keine anderen nützlichen Referenzen zu dieser Frage finden, außer "Diese Datei nicht entfernen".

Wenn es darauf ankommt, könnte ich wahrscheinlich die gesamte Datenbank skripten oder SSIS verwenden, um alle Objekte in einen neuen Datenbankcontainer zu kopieren, da ich eine schreibgeschützte Kopie der Datenbank vor mir habe.

Gibt es eine Möglichkeit, dieses Problem zu beheben? Ich erwarte sicherlich nicht, dass ich es wieder auf "Wiederherstellen" stellen und nachfolgende Wiederherstellungen oder ähnliches fortsetzen kann. Ich möchte es nur in den normalen Online-Modus in seinem aktuellen Zustand zwingen, damit ich es tun kann Dinge wie Berechtigungen ändern oder den Wiederherstellungsmodus ändern oder eine neue vollständige Sicherung oder etwas anderes erstellen.

BradC
quelle

Antworten:

7

Es stellt sich heraus, dass dies möglich ist, wenn Sie CONTINUE_AFTER_ERROR verwenden

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

Ich habe immer noch eine Warnung erhalten, als ich es ausprobiert habe, aber dann eine CHECKDB durchgeführt und keine Fehler erhalten.

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

Angesichts der Warnung bin ich mir nicht 100% sicher, ob ich es in einer Produktionsdatenbank versuchen würde, in der ich kein gutes Backup hatte. Angesichts der Tatsache, dass es sich um eine temporäre Wiederherstellung handelt, könnte es sich lohnen, es einmal auszuprobieren.

Kenneth Fisher
quelle