Oder: Vertrauen ist gut, Kontrolle ist besser!
Welcher Windows-Administrator kennt diese Situation nicht? Man ist zwar eigentlich kein Datenbankadministrator (DBA), aber zur der Anwendung gehört halt ein SQL Server, und einen echten DBA gibt es nun mal nicht. Also muss man sehen, dass die Datenbank läuft. Genauso wichtig wie ein laufender Server ist gerade bei Datenbanken, dass man die Daten im Notfall auch wiederherstellen kann. Dabei muss man immer wieder feststellen, dass das Backup noch recht gut überwacht und kontrolliert wird, aber die Wiederherstellung so gut wie nie getestet ist.
Es gilt der Spruch:
Was interessiert mich das erfolgreiche Backup, der erfolgreiche Restore ist mir viel wichtiger!
Und letztendlich trifft dies genau den Kern des Problems. Viele (Teilzeit-) Datenbankadministratoren verlassen sich zu sehr auf die Meldung „Backup erfolgreich“, testen aber zu selten bis niemals ob auch die Wiederherstellung aus dem Backup funktioniert. Eine regelmäßige händische Kontrolle ist aufwendig, zeitintensiv und von Spaß wollen wir erst gar nicht reden. Aber es gibt einen einfachen und schnellen Weg den Restore über die Powershell zu testen.
DBATOOLS
Gerade für Nicht-DBAs gibt es ein Powershell-Modul mit dem Namen DBAtools, welches einem viel Arbeit abnehmen kann. Weitere Informationen zu dem Modul sowie Download-Möglichkeiten gibt es auf der Projekt Seite unter www.dbatools.io
Das Module kann auf einem PC mit Internetzugang ganz leicht über den Powershell Befehl
Install-module dbatools
installiert werden. Um das Modul zu nutzen, ist keine Installation oder Änderung am Server notwendig. In der Regel muss nur der Port des SQL Servers (Standmäßig 1433) von dem Administrations-PC aus erreichbar sein.
Für den Recovery Test steht das folgende Cmdlet zur Verfügung:
Test-DbaLastBackup -SqlInstance SERVER -Database DBNAME
Das Cmdlet stellt nun eine Verbindung zu dem SQL Server „SERVER“ her und führt eine Wiederherstellung der Datenbank durch. Die Datenbank wird mit einem anderen Namen und anderen Dateinamen aus den Backupdaten wiederhergestellt und ein DBCC CHECKDB durchgeführt. Somit besteht keine Gefahr für die produktiven Datenbanken während des Tests. Nachdem die Wiederherstellung und der Datenbankcheck abgeschlossen sind, wird die Datenbank automatisch wieder gelöscht. Zudem ist es möglich, mehrere Datenbanken (oder auch alle) mit einem Befehl zu testen und den Testlauf auf einem separaten Server durchzuführen.
Test-DbaLastBackup -SqlInstance QUELLSERVER -Destination ZIELSERVER | ogv
Durch diesen Befehl werden alle Datenbanken vom Quellserver auf dem Zielserver testweise wiederhergestellt und geprüft. Das Ergebnis wird in einem separaten Fenster als Liste ausgegeben.
Im Beispiel wurden die Datenbanken einer anderen Instanz wiederhergestellt und geprüft. Man kann gut erkennen, dass der Restore von allen Datenbanken funktioniert hat. Lediglich der Check der Master-DB kann auf Grund von technischen Einschränkungen nicht durchgeführt werden.
Neben der Information, ob der Restore überhaupt funktioniert, erhält man auch Informationen zum Zustand der Datenbank und wie lange die Wiederherstellung gedauert hat. Diese Information kann wichtig werden, wenn es um vertragliche Wiederherstellungszeiten aus SLA (Service-Level-Agreement) geht. Kann ich die vereinbarten Zeiten überhaupt einhalten oder dauert der reine Restore schon länger als vereinbart?
Speicheranforderung
Da alle Datenbanken nach der Prüfung wieder gelöscht werden, braucht man nur so viel Festplattenspeicher wie die größte Datenbank belegt.
Weitere Informationen zum Cmdlet Test-DbaLastBackup findet man unter https://dbatools.io/functions/test-dbalastbackup/
http://faq-o-matic.net/?p=8122