Automatische Bereitstellung und Versionierung Ihrer SQL Server-Datenbank mit SSDT

Von Keith Schreiner

Ich habe oft gelesen und erfahren, dass es eine „Best Practice“ ist, meine Datenbank zu versionieren. Zu diesem Zweck habe ich frühere Tools von Microsoft, RedGate und anderen ausprobiert, aber keines hat sich wirklich für mich durchgesetzt. Ich mochte auch nicht den „chaotischen“ Prozess, beim Aktualisieren einer Produktionsdatenbank mehrere SQL-Skripte verwalten zu müssen. Das neueste (kostenlose) Tool von Microsoft, SQL Server Data Tools (SSDT), hat jedoch meinen Glauben wiederhergestellt, dass die Versionierung meiner Datenbank keine gefürchtete Aufgabe sein sollte.

Definieren

SSDT erweitert Visual Studio um zahlreiche Funktionen für die Arbeit mit SQL Server-Datenbanken. Die wichtigsten Dinge, die hinzugefügt werden, sind ein „SQL Server-Datenbankprojekt“ und ein sogenanntes DACPAC (Data-Tier Application Package). Ein DACPAC ist eine einzelne Bereitstellungsdatei, die Ihr gesamtes Datenbankschema und einige zugehörige SQL-Dateien (wie Suchdaten) enthält. Grundsätzlich alles, um eine neue Version Ihrer Datenbank in einer Datei bereitzustellen. Es ähnelt einem BACPAK, bei dem es sich um einen DACPAC mit allen Daten in jeder Tabelle handelt (wie bei einer Standard-Datenbanksicherung). Bevor wir jedoch mehr über DACPACs sprechen, wollen wir diskutieren, was SSDT mit seinem SQL Server-Datenbankprojekt hinzufügt.

Sich entwickeln

In Visual Studio haben Sie nach dem Erstellen eines neuen SQL Server-Datenbankprojekts die Möglichkeit, eine Datenbank zu importieren, mit der SQL-Skripts aller Ihrer Datenbankobjekte (Tabellen, Ansichten, gespeicherte Prozeduren usw.) erstellt werden. Der nächste Schritt besteht darin, einen "Daten" -Ordner zu erstellen und ein SQL-Skript nach der Bereitstellung hinzuzufügen, um die Suchdaten zu füllen und optional einige Testdaten zu erstellen.

In einem Datenbankprojekt können Sie nur eine Datei nach der Bereitstellung und eine Datei vor der Bereitstellung haben. Daher wird empfohlen, die SQLCMD-Syntax zu verwenden, um andere Dateien in Ihre Hauptdatei aufzunehmen, um die Organisation und Wartung zu erleichtern. Wenn Sie diese SQL-Skripte erstellen oder die SQL für die Tabellen oder gespeicherten Prozeduren bearbeiten, werden Sie alle anderen Dinge bemerken, die SSDT zu Visual Studio hinzufügt: SQL IntelliSense, SQL-Code-Navigation, ein SQL Server-Objekt-Explorer, Debuggen von SPs, Komponententests für SPs, ein visueller Tabellen-Designer, ein Schema-Vergleichstool, ein Datenvergleichstool und vieles mehr. All diese Funktionen sorgen dafür, dass sich die Datenbankentwicklung und -wartung in Visual Studio natürlich anfühlt.

Bereitstellen

Nachdem Sie Ihre Datenbankänderungen vorgenommen haben, müssen Sie sie im nächsten Schritt bereitstellen. SSDT bietet verschiedene Möglichkeiten. Der erste Weg ist "Veröffentlichen". Dies funktioniert hervorragend, wenn Sie von Ihrem Visual Studio-Computer aus eine direkte Verbindung zur Datenbank haben (wie zu Ihrer lokalen oder "Dev" -Datenbank). Klicken Sie mit der rechten Maustaste auf das Datenbankprojekt und wählen Sie "Veröffentlichen ...". Daraufhin wird ein Dialogfeld zum Speichern eines Profils geöffnet. Sobald ein Profil als Teil Ihres Projekts gespeichert wurde, können Sie einfach darauf doppelklicken, um Ihr Datenbankprojekt direkt in der Datenbank zu veröffentlichen oder einfach ein Skript für die Änderungen zu generieren, die es ausführen würde.

Die zweite Möglichkeit besteht darin, einen DACPAC zu verwenden, über den wir oben gesprochen haben, wenn Entwickler keinen Zugriff auf die Zieldatenbank haben (wie für die Produktion). Um einen DACPAC zu erstellen, klicken Sie einfach mit der rechten Maustaste auf das Datenbankprojekt und wählen Sie "Snapshot-Projekt". Anschließend wird ein DACPAC im Ordner "Snapshots" Ihres Projekts erstellt. Um diesen DACPAC bereitzustellen, haben Sie mehrere Möglichkeiten. Wenn Sie über einen DBA verfügen, der immer Datenbankaktualisierungen anwendet, können Sie ihm den DACPAC zur Anwendung mit SSMS (SQL Server Management Studio) geben, das über eine integrierte Aufgabe zum Aktualisieren der Datenebenenanwendung verfügt. Es verwendet einen Assistenten, um die Änderungen zu übernehmen (und ermöglicht es, alle Änderungen bei jedem Schritt auf Probleme wie möglichen Datenverlust zu überprüfen).

Eine weitere DACPAC-Bereitstellungsoption besteht darin, "SqlPackage.exe" (mit Befehlszeilenparametern) aufzurufen oder C # -Code (aus dem Microsoft.SqlServer.Dac-Namespace) zu schreiben, der den DACPAC selbst bereitstellt. Dies macht die Bereitstellung automatisch, fast bis zu einem Punkt, an dem Sie sich keine Sorgen mehr machen müssen.

Beispiel aus der Praxis

Beim ersten Projekt, bei dem ich SSDT (eine neue MVC-Website) verwendet habe, sind drei Probleme mit SSDT aufgetreten. Hier ist, wie ich sie gelöst und die Datenbankentwicklung stark vereinfacht habe. Zunächst wollte ich den DACPAC nur dann automatisch auf Application_Start der Website bereitstellen, wenn sich die Datenbank tatsächlich geändert hatte. Deshalb habe ich eine Logik hinzugefügt, um im neuesten DACPAC nach einer neuen Versionsnummer zu suchen, bevor ich sie anwende. Die Versionsnummer des DACPAC wird im Dialogfeld Datenbankprojekteigenschaften -> Projekteinstellungen -> Eigenschaften festgelegt, und die aktuelle Datenbankversion wird in der Systemtabelle msdb.dbo.sysdac_instances_internal gespeichert . Da diese Versionsnummer nicht nur den Start beschleunigte, sondern auch andere auf eine „Datenbankversion“ aufmerksam machte.

Das zweite Problem bestand darin, das Datenbankprojekt so einzurichten, dass es „Testdaten“ für die Dev-Datenbank enthält, diese jedoch für die Produktion ausschließt. Dies wurde erreicht, indem ein zweites Datenbankprojekt (DatabaseAndTestData) erstellt wurde, das einen „Datenbankverweis“ auf das erste Projekt hatte. In diesem zweiten Projekt enthält das Skript nach der Bereitstellung das Skript nach der Bereitstellung des ersten Projekts und anschließend alle Testdaten. Ich habe das erste Projekt (ohne Testdaten) verwendet, um den DACPAC für die Produktion zu erstellen, und dann gerade das zweite Projekt (mit Testdaten) direkt in Dev veröffentlicht.

Schließlich beschwerten sich einige Entwickler, dass sie nach dem Aktualisieren des Schemas oder der Nachschlagedaten noch einige langweilige und sich wiederholende Aufgaben ausführen müssen, um den DACPAC für die Bereitstellung vorzubereiten. Um dies zu lösen, habe ich eine einfache Anwendung (UpdateDatabaseVersion.exe) geschrieben, die im „Projektmappen-Explorer“ des Datenbankprojekts mit der Visual Studio-Erweiterung „VSCommands“ aufgerufen werden kann. Es erhöht die Versionsnummer der Datenbank, erstellt den DACPAC und legt ihn dann für die Bereitstellung im richtigen Ordner ab. Durch die Implementierung dieser SSDT-Prozesse wurden die datenbankbezogenen Aufgaben meines Teams optimiert, sodass wir mehr Zeit für andere Aufgaben aufwenden können.

Fazit

In der Vergangenheit war das Vornehmen einer Änderung an einer Datenbank ein langer, komplizierter Prozess, bei dem eine Schemaänderung vorgenommen wurde (hoffentlich die richtige Datenbankversion), manuell ein Änderungsskript erstellt, die Bereitstellungsperson an die Datenbankänderung erinnert und mir die Daumen gedrückt wurde dass alles richtig lief. Mit SSDT ist all diese Unsicherheit verschwunden. SSDT ist ein großartiges Tool, mit dem Sie Ihre SQL Server-Datenbankaktualisierungen einfach erstellen, bereitstellen und versionieren können. Laden Sie den Beispielcode herunter, der zeigt, wie eine SQL Server-Datenbank automatisch bereitgestellt und versioniert wird, um weitere Informationen zu erhalten.

Anmerkungen:

  • SSDT-Website: http://msdn.microsoft.com/en-us/data/tools
  • SSDT installiert in: C: \ Programme (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin \
  • Verwendete SSDT-Version: Juli 2013 mit Visual Studio 2012
  • VSCommands-Erweiterung: http://vscommands.squaredinfinity.com/

Keith Schreiner ist Software-Architekt bei Geneca, einem in Chicago ansässigen Unternehmen für kundenspezifische Softwareentwicklung. Er verfügt über mehr als 15 Jahre Erfahrung in der Softwareentwicklungsbranche.

© Copyright 2020 | mobilegn.com