Visual Studio Database Edtion: Deployment

7. Februar 2011

Eines der „Komfort Features“ der Database Edition ist das einfache Deployment einer Datenbank. Es adressiert das in der Praxis häufige anzutreffende Problem wie Änderungen an der Datenbank verteilt werden können.

Meist geschieht dies in Form von manuell erstellten Update Skripten, die ebenso manuell auf dem Zielsystem eingespielt werden. Bei so viel Handarbeit passieren auch dementsprechend oft Fehler. Alternativ erlebe ich oft auch, das ein Backup der Entwicklungsdatenbank eingespielt wird. Mit allen Altlasten und Problemen die das Test- oder Entwicklungssystem mit sich bringen kann.

Eine viel sicherere und auch bequemere Methode ist es, das Deployment der Database Edition zu nutzen. Dieses Analysiert die Unterschiede zwischen Datenbankprojekt und Zieldatenbank und erzeugt daraus ein maßgeschneidertes inkrementelles Update Script.

Die Database Edition geht hierbei intelligent vor, sie kennt Schlüsselbeziehungen und Abhängigkeiten zwischen Objekten (z.B. Tabellen und Stored Procedures). Sollte dabei eine zu ändernde Tabelle Daten enthalten sein wird eine temporäre Tabelle erzeugt in welche die Daten zuerst übertragen werden.

Das Deployment erfolgt in fünf Schritten:

  1. Zuerst wird der Inhalt des Datenbank-Projektes in eine Art Deployment-Paket (Build) aggregiert.
  2. Die Unterschiede zwischen dem Build und der Zieldatenbank werden ermittelt.
  3. Aus diesen Informationen wird dann ein Deployment Plan in Form eines T-SQL Skriptes erstellt.
  4. Aus den Skripten wird ein für die Zieldatenbank passendes Deployment Paket erstellt.
  5. Dieses kann dann gegen die Zieldatenbank ausgeführt werden.

image

Zu beachten ist, dass das erzeugte Skript spezifisch für die angegebene Zieldatenbank ist! Für ein Deployment auf einer anderen Datenbank muss auch ein eigenes Deployment-Paket erstellt werden.

Beide Vorgänge (Build & Deploy) sind als MSBuild Tasks verfügbar und können somit auch über einen Team Build Server verwendet werden. Denkbar ist hierbei ein Szenario, in denen Nachts die aktuelle Version der Datenbank auf das Testsystem deployed wird, um darauf automatisiert Tests auszuführen. Ebenso ist es möglich das Build-File über das Komandozeilentool vsdbcmd.exe zu deployen:

vsdbcmd.exe /a:Deploy /cs:"Data Source=(local);Integrated 

Security=True;Pooling=False" /dsp:Sql /dd /model:"..Database.dbschema" 

/p:TargetDatabase=TargetDB /manifest:“..Database.deploymanifest”