Bereitstellen von Datenbankprojekten

von Jason Lee

Hinweis

In vielen Unternehmensbereitstellungsszenarien benötigen Sie die Möglichkeit, inkrementelle Updates für eine bereitgestellte Datenbank zu veröffentlichen. Die Alternative besteht darin, die Datenbank bei jeder Bereitstellung neu zu erstellen, was bedeutet, dass Sie daten in der vorhandenen Datenbank verlieren. Wenn Sie mit Visual Studio 2010 arbeiten, ist die Verwendung von VSDBCMD der empfohlene Ansatz für die inkrementelle Datenbankveröffentlichung. Die nächste Version von Visual Studio und die Web Publishing Pipeline (WPP) enthält jedoch Tools, die die inkrementelle Veröffentlichung direkt unterstützen.

Wenn Sie die Contact Manager-Beispiellösung in Visual Studio 2010 öffnen, sehen Sie, dass das Datenbankprojekt einen Ordner Eigenschaften enthält, der vier Dateien enthält.

Wenn Sie die Contact Manager-Beispiellösung in Visual Studio 2010 öffnen, sehen Sie, dass das Datenbankprojekt einen Ordner Eigenschaften enthält, der vier Dateien enthält.

Zusammen mit der Projektdatei (in diesem Fall ContactManager.Database.dbproj ) steuern diese Dateien verschiedene Aspekte des Build- und Bereitstellungsprozesses:

  • Die Datei Database.sqlcmdvars stellt Werte für alle SQLCMD-Variablen bereit, die Sie beim Bereitstellen des Projekts verwenden. Jede Projektmappenkonfiguration (z. B. Debuggen und Release) kann eine andere SQLCMDVARS-Datei angeben.
  • Die Datei Database.sqldeployment bietet bereitstellungsspezifische Einstellungen, z. B. ob die in Ihrem Projekt definierte Sortierung oder die Sortierung des Zielservers verwendet werden soll, ob die Zieldatenbank jedes Mal neu erstellt oder einfach die vorhandene Datenbank geändert werden soll, um sie auf den neuesten Stand zu bringen usw. Jede Projektmappenkonfiguration kann eine andere SQL-Bereitstellungsdatei angeben.
  • Die Datei Database.sqlpermissions ist ein XML-Dokument, mit dem Sie alle Berechtigungen definieren können, die Sie der Zieldatenbank hinzufügen möchten. Alle Projektmappenkonfigurationen verwenden dieselbe SQLPermissions-Datei.
  • Die Datei Database.sqlsettings gibt die Eigenschaften auf Datenbankebene an, die beim Erstellen der Datenbank verwendet werden sollen, z. B. die zu verwendende Sortierung, das Verhalten von Vergleichsoperatoren usw. Alle Projektmappenkonfigurationen verwenden dieselbe SQLSETTINGS-Datei.

Es lohnt sich, sich einen Moment Zeit zu nehmen, um diese Dateien in Visual Studio zu öffnen und sich mit den Inhalten vertraut zu machen.

Wenn Sie ein Datenbankprojekt erstellen, erstellt der Buildprozess zwei Dateien:

  • Ein Datenbankschema (DBSCHEMA-Datei). Dies beschreibt das Schema der Datenbank, die Sie im XML-Format erstellen möchten.
  • Ein Bereitstellungsmanifest (.deploymanifest-Datei). Diese enthält alle Informationen, die zum Erstellen und Bereitstellen Ihrer Datenbank erforderlich sind. Es verweist auf die DBSCHEMA-Datei zusammen mit anderen Ressourcen, wie den Bereitstellungsanweisungen (die SQLDeployment-Datei) und allen SQL-Skripts vor oder nach der Bereitstellung.

Dies zeigt die Beziehung zwischen diesen Ressourcen:

Die Beziehung zwischen den oben genannten Ressourcen

Wie Sie sehen können, sind die SQLSETTINGS-Datei und die SQLpermissions-Datei Eingaben für den Buildprozess. Zusammen mit der Datenbankprojektdatei werden diese Dateien verwendet, um die Datenbankschemadatei zu erstellen. Die SQLDeployment-Datei und die SQLCMDVARS-Datei durchlaufen den Buildprozess unverändert. Das Bereitstellungsmanifest gibt den Speicherort des Datenbankschemas, der SQLDeployment-Datei, der SQLCMDVARS-Datei und aller SQL-Skripts vor oder nach der Bereitstellung an.

Gründe für die Verwendung von VSDBCMD zum Bereitstellen eines Datenbankprojekts

Es gibt verschiedene Ansätze für die Bereitstellung von Datenbankprojekten. Allerdings eignen sich nicht alle für die Bereitstellung eines Datenbankprojekts auf Remoteservern in einer Unternehmensumgebung. Überlegen Sie, was Sie von einer Datenbankprojektbereitstellung wünschen. In Unternehmensbereitstellungsszenarien benötigen Sie wahrscheinlich Folgendes:

  • Die Möglichkeit, das Datenbankprojekt von einem Remotestandort aus bereitzustellen.
  • Die Möglichkeit, inkrementelle Updates an einer vorhandenen Datenbank vorzunehmen.
  • Die Möglichkeit, Skripts vor der Bereitstellung oder Skripts nach der Bereitstellung einzubeziehen.
  • Die Möglichkeit, die Bereitstellung auf mehrere Zielumgebungen anzupassen.
  • Die Möglichkeit, das Datenbankprojekt als Teil einer größeren, in der Regel skriptbasierten, einstufigen Lösungsbereitstellung bereitzustellen.

Es gibt drei Standard Ansätze, die Sie zum Bereitstellen eines Datenbankprojekts verwenden können:

  • Sie können die Bereitstellungsfunktionalität mit dem Datenbankprojekttyp in Visual Studio 2010 verwenden. Wenn Sie ein Datenbankprojekt in Visual Studio 2010 erstellen und bereitstellen, verwendet der Bereitstellungsprozess das Bereitstellungsmanifest, um eine SQL-basierte Bereitstellungsdatei zu generieren, die für die Buildkonfiguration spezifisch ist. Dadurch wird die Datenbank erstellt, wenn sie noch nicht vorhanden ist, oder es werden alle erforderlichen Änderungen an der Datenbank vorgenommen, sofern sie bereits vorhanden ist. Sie können SQLCMD.exe verwenden, um diese Datei auf Ihrem Zielserver auszuführen, oder Sie können Visual Studio so festlegen, dass die Datei erstellt und ausgeführt wird. Der Nachteil dieses Ansatzes ist, dass Sie nur eingeschränkte Kontrolle über die Bereitstellungseinstellungen haben. Möglicherweise müssen Sie auch die SQL-Bereitstellungsdatei ändern, um umgebungsspezifische Variablenwerte bereitzustellen. Sie können diesen Ansatz nur auf einem Computer verwenden, auf dem Visual Studio 2010 installiert ist, und der Entwickler muss Verbindungszeichenfolgen und Anmeldeinformationen für alle Zielumgebungen kennen und bereitstellen.
  • Sie können das IIS-Webbereitstellungstool (Web Deploy) verwenden, um eine Datenbank als Teil eines Webanwendungsprojekts bereitzustellen. Dieser Ansatz ist jedoch viel komplexer, wenn Sie ein Datenbankprojekt bereitstellen möchten, anstatt einfach eine vorhandene lokale Datenbank auf einem Zielserver zu replizieren. Sie können Web Deploy so konfigurieren, dass das SQL-Bereitstellungsskript ausgeführt wird, das das Datenbankprojekt generiert. Hierzu müssen Sie jedoch eine benutzerdefinierte WPP-Zieldatei für Ihr Webanwendungsprojekt erstellen. Dadurch wird der Bereitstellungsprozess erheblich komplexer. Darüber hinaus unterstützt Web Deploy inkrementelle Updates für vorhandene Datenbanken nicht direkt. Weitere Informationen zu diesem Ansatz finden Sie unter Erweitern der Web Publishing-Pipeline auf die bereitgestellte SQL-Datei des Paketdatenbankprojekts.
  • Sie können das VSDBCMD-Hilfsprogramm verwenden, um die Datenbank mithilfe des Datenbankschemas oder des Bereitstellungsmanifests bereitzustellen. Sie können VSDBCMD.exe aus einem MSBuild-Ziel aufrufen, sodass Sie Datenbanken im Rahmen eines größeren, skriptbasierten Bereitstellungsprozesses veröffentlichen können. Sie können die Variablen in Ihrer SQLCMDvars-Datei und viele andere Datenbankeigenschaften über einen VSDBCMD-Befehl außer Kraft setzen, sodass Sie Ihre Bereitstellung für verschiedene Umgebungen anpassen können, ohne mehrere Buildkonfigurationen zu erstellen. VSDBCMD bietet Differenzierungsfunktionen, was bedeutet, dass nur die erforderlichen Änderungen vorgenommen werden, um eine Zieldatenbank an Ihr Datenbankschema auszurichten. VSDBCMD bietet auch eine vielzahl von Befehlszeilenoptionen, mit denen Sie den Bereitstellungsprozess präzise steuern können.

In dieser Übersicht können Sie sehen, dass die Verwendung von VSDBCMD mit MSBuild der am besten für ein typisches Unternehmensbereitstellungsszenario geeignet ist:

Unterstützt Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Unterstützt die Remotebereitstellung? Yes Yes Yes
Unterstützt inkrementelle Updates? Ja Nein Ja
Unterstützt Skripts vor/nach der Bereitstellung? Yes Yes Yes
Unterstützt bereitstellung mit mehreren Umgebungen? Eingeschränkt Eingeschränkt Yes
Unterstützt die Skriptbereitstellung? Eingeschränkt Yes Yes

Im weiteren Verlauf dieses Themas wird die Verwendung von VSDBCMD mit MSBuild zum Bereitstellen von Datenbankprojekten beschrieben.

Grundlegendes zum Bereitstellungsprozess

Mit dem VSDBCMD-Hilfsprogramm können Sie eine Datenbank mithilfe des Datenbankschemas (der DBSCHEMA-Datei) oder des Bereitstellungsmanifests (der DEPLOYMANIFEST-Datei) bereitstellen. In der Praxis verwenden Sie fast immer das Bereitstellungsmanifest, da Sie mit dem Bereitstellungsmanifest Standardwerte für verschiedene Bereitstellungseigenschaften bereitstellen und alle SQL-Skripts vor oder nach der Bereitstellung identifizieren können, die Sie ausführen möchten. Dieser VSDBCMD-Befehl wird beispielsweise verwendet, um die ContactManager-Datenbank auf einem Datenbankserver in einer Testumgebung bereitzustellen:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

In diesem Fall:

  • Der Schalter /a (oder /Action) gibt an, was VSDBCMD tun soll. Sie können dies auf Importieren oder Bereitstellen festlegen. Die Option Import wird verwendet, um eine DBSCHEMA-Datei aus einer vorhandenen Datenbank zu generieren, und die Option Bereitstellen wird verwendet, um eine DBSCHEMA-Datei in einer Zieldatenbank bereitzustellen.
  • Der Schalter /manifest (oder /ManifestFile) identifiziert die .deploymanifest-Datei, die Sie bereitstellen möchten. Wenn Sie stattdessen die DBSCHEMA-Datei verwenden möchten, verwenden Sie den Schalter /model (oder /ModelFile).
  • Der Schalter /cs (oder /ConnectionString) stellt die Verbindungszeichenfolge für den Zieldatenbankserver bereit. Beachten Sie, dass dies den Namen der Datenbank nicht enthält. VSDBCMD muss eine Verbindung mit dem Server herstellen, um die Datenbank zu erstellen. Es muss keine Verbindung mit einer einzelnen Datenbank hergestellt werden. Wenn Ihre .deploymanifest-Datei eine Verbindungszeichenfolge enthält, können Sie diesen Schalter weglassen. Wenn Sie den Switch trotzdem verwenden, überschreibt der Switchwert den Wert .deploymanifest.
  • Die /p:TargetDatabase-Eigenschaft stellt den Namen bereit, den Sie der Zieldatenbank bei der Erstellung zuweisen möchten. Dadurch wird der Wert der TargetDatabase-Eigenschaft in der Deploymanifest-Datei außer Kraft gesetzt. Sie können die Syntax /p:[Eigenschaftsname]verwenden, um eine Vielzahl von Bereitstellungseigenschaften festzulegen und alle SQLCMD-Variablen zu überschreiben, die in Ihrer SQLcmdvars-Datei deklariert wurden.
  • Der Schalter /dd+ (oder /DeployToDatabase+) gibt an, dass Sie eine Bereitstellung erstellen und in der Zielumgebung bereitstellen möchten. Wenn Sie /dd- angeben oder den Switch auslassen, generiert VSDBCMD ein Bereitstellungsskript, stellt es jedoch nicht in der Zielumgebung bereit. Dieser Wechsel sorgt häufig für Verwirrung und wird im nächsten Abschnitt ausführlicher erläutert.
  • Der Schalter /script (oder /DeploymentScriptFile) gibt an, wo Sie das Bereitstellungsskript generieren möchten. Dieser Wert wirkt sich nicht auf den Bereitstellungsprozess aus.

Weitere Informationen zu VSDBCMD finden Sie unter Befehlszeilenreferenz für VSDBCMD.EXE (Bereitstellung und Schemaimport) und Vorgehensweise: Vorbereiten einer Datenbank für die Bereitstellung über eine Eingabeaufforderung mithilfe von VSDBCMD.EXE.

Ein Beispiel für die Verwendung von VSDBCMD aus einer MSBuild-Projektdatei finden Sie unter Grundlegendes zum Buildprozess. Beispiele zum Konfigurieren von Datenbankbereitstellungseinstellungen für mehrere Umgebungen finden Sie unter Anpassen von Datenbankbereitstellungen für mehrere Umgebungen.

Grundlegendes zum DeployToDatabase-Switch

Das Verhalten der Option /dd oder /DeployToDatabase hängt davon ab, ob Sie VSDBCMD mit einer DBSCHEMA-Datei oder einer DEPLOYMANIFEST-Datei verwenden. Wenn Sie eine DBSCHEMA-Datei verwenden, ist das Verhalten recht einfach:

  • Wenn Sie /dd+ oder /dd angeben, generiert VSDBCMD ein Bereitstellungsskript und stellt die Datenbank bereit.
  • Wenn Sie /dd- angeben oder den Schalter auslassen, generiert VSDBCMD nur ein Bereitstellungsskript.

Wenn Sie eine DEPLOYMANIFEST-Datei verwenden, ist das Verhalten viel komplizierter. Dies liegt daran, dass die .deploymanifest-Datei einen Eigenschaftsnamen DeployToDatabase enthält, der auch bestimmt, ob die Datenbank bereitgestellt wird.

<DeployToDatabase>False</DeployToDatabase>

Der Wert dieser Eigenschaft wird entsprechend den Eigenschaften des Datenbankprojekts festgelegt. Wenn Sie die Aktion Bereitstellen auf Erstellen eines Bereitstellungsskripts (.sql) festlegen, lautet der Wert False. Wenn Sie die Aktion Bereitstellen auf Erstellen eines Bereitstellungsskripts (SQL) und Bereitstellen in der Datenbank festlegen, lautet der Wert True.

Hinweis

Diese Einstellungen sind einer bestimmten Buildkonfiguration und -plattform zugeordnet. Wenn Sie beispielsweise Einstellungen für die Debugkonfiguration konfigurieren und dann mithilfe der Releasekonfiguration veröffentlichen, werden Ihre Einstellungen nicht verwendet.

Wenn Sie beispielsweise Einstellungen für die Debugkonfiguration konfigurieren und dann mithilfe der Releasekonfiguration veröffentlichen, werden Ihre Einstellungen nicht verwendet.

Hinweis

In diesem Szenario sollte die Aktion Bereitstellen immer auf Erstellen eines Bereitstellungsskripts (SQL) festgelegt werden, da Visual Studio 2010 Ihre Datenbank nicht bereitstellen soll. Anders ausgedrückt: Die DeployToDatabase-Eigenschaft sollte immer False sein.

Wenn eine DeployToDatabase-Eigenschaft angegeben wird, überschreibt der / dd-Schalter die Eigenschaft nur, wenn der Eigenschaftswert false ist:

  • Wenn die DeployToDatabase-EigenschaftFalse ist und Sie /dd+ oder /dd angeben, überschreibt VSDBCMD die DeployToDatabase-Eigenschaft und stellt die Datenbank bereit.
  • Wenn die DeployToDatabase-EigenschaftFalse ist und Sie /dd- angeben oder den Switch weglassen, stellt VSDBCMD die Datenbank nicht bereit.
  • Wenn die DeployToDatabase-EigenschaftTrue ist, ignoriert VSDBCMD den Switch und stellt die Datenbank bereit.
  • In jedem Fall wird ein Bereitstellungsskript generiert, unabhängig davon, ob Sie auch die Datenbank bereitstellen.

Zusammenfassung

Dieses Thema bot eine Übersicht über den Build- und Bereitstellungsprozess für Datenbankprojekte in Visual Studio 2010. Außerdem wurde beschrieben, wie Sie VSDBCMD.exe mit MSBuild verwenden können, um die Datenbankbereitstellung auf Unternehmensniveau zu unterstützen.

Weitere Informationen dazu, wie dies in der Praxis funktioniert, finden Sie unter Anpassen von Datenbankbereitstellungen für mehrere Umgebungen.

Weitere Informationen

Informationen zum Anpassen von Datenbankbereitstellungen durch Erstellen einer separaten Bereitstellungskonfigurationsdatei für jede Umgebung finden Sie unter Anpassen von Datenbankbereitstellungen für mehrere Umgebungen. Eine Anleitung zum Konfigurieren von Datenbankrollenmitgliedschaften durch Ausführen eines Skripts nach der Bereitstellung finden Sie unter Bereitstellen von Datenbankrollenmitgliedschaften in Testumgebungen. Eine Anleitung zum Verwalten einiger der einzigartigen Herausforderungen, die Mitgliedschaftsdatenbanken mit sich bringt, finden Sie unter Bereitstellen von Mitgliedschaftsdatenbanken in Unternehmensumgebungen.

Diese Themen auf MSDN enthalten umfassendere Anleitungen und Hintergrundinformationen zu Visual Studio-Datenbankprojekten und dem Datenbankbereitstellungsprozess: