[MS SQL] Datenbanksnapshots für Entwickler und Supporter

Bei der Entwicklung und dem Support von Datenbankanwendungen kommt es des Öfteren vor, dass Daten- oder Strukturänderungen in Datenbanken wiederholt nachvollzogen werden müssen. Sei es um eine neue Funktionalität ausgiebig zu testen oder einen vorhandenen Fehler mit Kundendaten nachzustellen. Was also tun, wenn die vorhandenen Daten nach einem Testlauf in den Ausgangszustand zurückgesetzt werden müssen? Eine sehr beliebte und wohl häufig anzutreffende Möglichkeit ist das Zurückspielen eines kompletten Backups. Das kann je nach Umfang der Daten jedoch sehr zeitaufwendig sein. Und genau hier kommen Datenbanksnapshots ins Spiel.

Mit dem SQL Server 2005 hat Microsoft die Datenbanksnapshots eingeführt. Ein Snapshot ist eine nur lesbare Kopie der Datenbank zum Zeitpunkt seiner Erstellung. Dieser Snapshot kann nun nach Änderungen an den Daten oder der Struktur der Datenbank genutzt werden, um den Ursprünglichen Zustand von Zeilen, Objekten oder der ganzen Datenbank wieder herzustellen. Oder einfach nur um zu gucken, was geändert wurde. Dabei könen pro Datenbank mehrere Snapshots angelegt werden.

Bevor wir nun Änderungen an unserer Datenbank vornehmen, muss ein Snapshot zum späteren Zurücknehmen der Änderungen erstellt werden. Einen Wizard dazu sucht man im SQL Server Management Studio vergebens. Hier ist etwas Handarbeit gefragt.

Als erstes benötigen wir den logischen Namen der Datenbankdatei. Dazu wird im Objektexplorer des Management Studios zu der gewünschten Datenbank gewechselt und von dieser die Eigenschaften per Kontextmenü aufgerufen. In dem Eigenschaftendialog wechseln wir auf die Seite Dateien und kopieren uns den logischen Namen der Datenbankdatei. Ebenfalls von Interesse ist der Speicherort im Dateisystem.

Mit beiden Informationen bewaffnet können wir uns nun in ein Abfragefenster begeben und mit folgendem T-SQL Befehl einen Datenbanksnapshot anlegen.

Danach steht uns der eben erstellte Snapshot als Abbild der Datenbank zur Verfügung. Der Snapshot verhält sich ähnlich einer normalen Datenbank im Objektexplorer und in T-SQL Skripten. So können wir die Daten direkt aus dem Snapshot per SELECT Statement abfragen und diese zum Vergleich der geänderten Daten oder zum Wiederherstellen einzelner Zeilen unserer eigentlichen Datenbank nutzen.

Ausgehend von unserem oben beschriebenen Szenario möchten wir aber nach umfangreichen Änderungen am Datenbestand und/oder der Datenstruktur die Datenbank auf den Zustand des Snapshots zurücksetzen. Das erledigt das folgende Skript:

Datenbanksnapshots stellen eine sehr schnelle und einfache Möglichkeit dar sich Zustände von Datenbanken zu sichern. Darüberhinaus stehen diese Zustände für Abfragezwecke zur Verfügung. Als Krönung kann eine komplette Datenbank auf den Zustand eines Snapshots zurückgesetzt werden. Dabei ist zu beachten, dass das Zurücksetzen nur funktioniert, wenn nur ein einziger Snapshot vorhanden ist. Das liegt in der Datenspeicherung der Snapshots begründet.

Ein sehr schönes Feature wie ich finde, welches hervorragend für Entwickler und Supporter geeignet ist, die oft Datenbankänderungen schnell rückgängig machen müssen. Leider setzen Datenbanksnapshots einen SQL Server der Enterprise Klasse voraus. Was zumindest bei Entwicklern, dank der Developer Edition gegeben sein dürfte.

[MS SQL] Datenbanksnapshots für Entwickler und Supporter
Markiert in:    

Kommentar verfassen