Share via


Anpassen von Datenbankbereitstellungen für mehrere Umgebungen

von Jason Lee

In diesem Thema wird beschrieben, wie Sie die Eigenschaften einer Datenbank im Rahmen des Bereitstellungsprozesses an bestimmte Zielumgebungen anpassen.

Hinweis

In diesem Thema wird davon ausgegangen, dass Sie ein Visual Studio 2010-Datenbankprojekt mit MSBuild.exe und VSDBCMD.exe bereitstellen. Weitere Informationen dazu, warum Sie diesen Ansatz wählen können, finden Sie unter Webbereitstellung im Unternehmen und Bereitstellen von Datenbankprojekten.

Wenn Sie ein Datenbankprojekt für mehrere Ziele bereitstellen, sollten Sie häufig die Datenbankbereitstellungseigenschaften für jede Zielumgebung anpassen. Beispielsweise würden Sie in Testumgebungen die Datenbank in der Regel bei jeder Bereitstellung neu erstellen, während Sie in Staging- oder Produktionsumgebungen mit viel höherer Wahrscheinlichkeit inkrementelle Updates vornehmen würden, um Ihre Daten zu erhalten.

In einem Visual Studio 2010-Datenbankprojekt sind Bereitstellungseinstellungen in einer Bereitstellungskonfigurationsdatei (.sqldeployment) enthalten. In diesem Thema erfahren Sie, wie Sie umgebungsspezifische Bereitstellungskonfigurationsdateien erstellen und die Als VSDBCMD-Parameter verwenden möchten.

Dieses Thema ist Teil einer Reihe von Tutorials, die sich auf die Unternehmensbereitstellungsanforderungen eines fiktiven Unternehmens namens Fabrikam, Inc. beziehen. In dieser Tutorialreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einem realistischen Komplexitätsgrad darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, eines WCF-Diensts (Windows Communication Foundation) und eines Datenbankprojekts.

Die Bereitstellungsmethode im Mittelpunkt dieser Tutorials basiert auf dem unter Grundlegendes zur Projektdatei beschriebenen Ansatz für geteilte Projektdateien, bei dem der Buildprozess von zwei Projektdateien gesteuert wird– eine mit Buildanweisungen, die für jede Zielumgebung gelten, und eine mit umgebungsspezifischen Build- und Bereitstellungseinstellungen. Zur Buildzeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Buildanweisungen zu bilden.

Aufgabenübersicht

In diesem Thema wird Folgendes vorausgesetzt:

Um ein Bereitstellungssystem zu erstellen, das das Variieren der Datenbankbereitstellungseigenschaften zwischen Zielumgebungen unterstützt, müssen Sie:

  • Erstellen Sie eine Bereitstellungskonfigurationsdatei (.sqldeployment) für jede Zielumgebung.
  • Erstellen Sie einen VSDBCMD-Befehl, der die Bereitstellungskonfigurationsdatei als Befehlszeilenschalter angibt.
  • Parametrisieren Sie den VSDBCMD-Befehl in einer Microsoft-Build-Engine (MSBuild)-Projektdatei, sodass die VSDBCMD-Optionen für die Zielumgebung geeignet sind.

In diesem Thema erfahren Sie, wie Sie die einzelnen Verfahren ausführen.

Erstellen von Environment-Specific Bereitstellungskonfigurationsdateien

Standardmäßig enthält ein Datenbankprojekt eine einzelne Bereitstellungskonfigurationsdatei mit dem Namen Database.sqldeployment. Wenn Sie diese Datei in Visual Studio 2010 öffnen, werden die verschiedenen Bereitstellungsoptionen angezeigt, die Ihnen zur Verfügung stehen:

  • Sortierung des Bereitstellungsvergleichs. Auf diese Weise können Sie auswählen, ob die Datenbanksortierung Ihres Projekts (die Quellsortierung ) oder die Datenbanksortierung Ihres Zielservers (die Zielsortierung ) verwendet werden soll. In den meisten Fällen sollten Sie die Quellsortierung verwenden, wenn Sie die Bereitstellung in einer Entwicklungs- oder Testumgebung durchführen. Wenn Sie in einer Staging- oder Produktionsumgebung bereitstellen, sollten Sie die Zielsortierung in der Regel unverändert lassen, um Interoperabilitätsprobleme zu vermeiden.
  • Bereitstellen von Datenbankeigenschaften Auf diese Weise können Sie auswählen, ob die Datenbankeigenschaften angewendet werden sollen, wie in der Datei Database.sqlsettings definiert. Wenn Sie eine Datenbank zum ersten Mal bereitstellen, sollten Sie die Datenbankeigenschaften bereitstellen. Wenn Sie eine vorhandene Datenbank aktualisieren, sollten die Eigenschaften bereits vorhanden sein, und Sie sollten sie nicht erneut bereitstellen müssen.
  • Erstellen Sie die Datenbank immer neu. Auf diese Weise können Sie auswählen, ob die Zieldatenbank bei jeder Bereitstellung neu erstellt oder inkrementelle Änderungen vorgenommen werden sollen, um die Zieldatenbank mit Ihrem Schema auf den neuesten Stand zu bringen. Wenn Sie die Datenbank neu erstellen, gehen alle Daten in der vorhandenen Datenbank verloren. Daher sollten Sie dies in der Regel für Bereitstellungen in Staging- oder Produktionsumgebungen auf false festlegen.
  • Blockieren Sie die inkrementelle Bereitstellung, wenn Datenverluste auftreten können. Auf diese Weise können Sie auswählen, ob die Bereitstellung beendet werden soll, wenn eine Änderung des Datenbankschemas den Datenverlust verursacht. In der Regel legen Sie dies für eine Bereitstellung in einer Produktionsumgebung auf true fest, um Ihnen die Möglichkeit zu geben, einzugreifen und alle wichtigen Daten zu schützen. Wenn Sie Always re-create database (Datenbank erneut erstellen ) auf false festgelegt haben, hat diese Einstellung keine Auswirkungen.
  • Führen Sie die Bereitstellung im Einzelbenutzermodus aus. In Entwicklungs- oder Testumgebungen ist dies in der Regel kein Problem. In der Regel sollten Sie dies jedoch für Bereitstellungen in Staging- oder Produktionsumgebungen auf true festlegen. Dadurch wird verhindert, dass Benutzer Änderungen an der Datenbank vornehmen, während die Bereitstellung ausgeführt wird.
  • Sichern Sie die Datenbank vor der Bereitstellung. Sie legen dies in der Regel auf true fest, wenn Sie die Bereitstellung in einer Produktionsumgebung als Vorsichtsmaßnahme gegen Datenverluste durchführen. Sie können es auch auf true festlegen, wenn Sie in einer Stagingumgebung bereitstellen, wenn Ihre Stagingdatenbank viele Daten enthält.
  • Generieren Sie DROP-Anweisungen für Objekte, die sich in der Zieldatenbank, aber nicht im Datenbankprojekt befinden. In den meisten Fällen ist dies ein integraler und wesentlicher Bestandteil inkrementeller Änderungen an einer Datenbank. Wenn Sie Always re-create database (Datenbank erneut erstellen ) auf false festgelegt haben, hat diese Einstellung keine Auswirkungen.
  • Verwenden Sie keine ALTER ASSEMBLY-Anweisungen, um CLR-Typen zu aktualisieren. Diese Einstellung bestimmt, wie SQL Server CLR-Typen (Common Language Runtime) auf neuere Assemblyversionen aktualisieren sollen. Dies sollte in den meisten Szenarien auf false festgelegt werden.

In dieser Tabelle sind die typischen Bereitstellungseinstellungen für verschiedene Zielumgebungen aufgeführt. Ihre Einstellungen können jedoch je nach Ihren genauen Anforderungen unterschiedlich sein.

Entwickler/Test Staging/Integration Bereitstellung
Sortierung des Bereitstellungsvergleichs `Source` Ziel Ziel
Datenbankeigenschaften bereitstellen True Nur zum ersten Mal Nur zum ersten Mal
Datenbank immer neu erstellen True False False
Inkrementelle Bereitstellung blockieren, wenn Datenverlust auftreten könnte False Vielleicht True
Ausführen des Bereitstellungsskripts im Einzelbenutzermodus False True True
Sichern der Datenbank vor der Bereitstellung False Vielleicht True
Generieren von DROP-Anweisungen für Objekte, die sich in der Zieldatenbank, aber nicht im Datenbankprojekt befinden False True True
CLR-Typen nicht mit ALTER ASSEMBLY-Anweisungen aktualisieren False False False

Um die Bereitstellung eines Datenbankprojekts für mehrere Ziele zu unterstützen, sollten Sie eine Bereitstellungskonfigurationsdatei für jede Zielumgebung erstellen.

So erstellen Sie eine umgebungsspezifische Konfigurationsdatei

  1. Klicken Sie in Visual Studio 2010 im Fenster Projektmappen-Explorer mit der rechten Maustaste auf Ihr Datenbankprojekt, und klicken Sie dann auf Eigenschaften.

  2. Klicken Sie auf der Seite Eigenschaften des Datenbankprojekts auf der Registerkarte Bereitstellen in der Zeile Bereitstellungskonfigurationsdatei auf Neu.

    Klicken Sie auf der Seite Eigenschaften des Datenbankprojekts auf der Registerkarte Bereitstellen in der Zeile Bereitstellungskonfigurationsdatei auf Neu.

  3. Geben Sie im Dialogfeld Neue Bereitstellungskonfigurationsdatei der Datei einen aussagekräftigen Namen (z. B. TestEnvironment.sqldeployment), und klicken Sie dann auf Speichern.

  4. Legen Sie auf der Seite [Dateiname].sqldeployment die Bereitstellungseigenschaften so fest, dass sie den Anforderungen Ihrer Zielumgebung entsprechen, und speichern Sie dann die Datei.

    Legen Sie auf der Seite Dateiname .sqldeployment die Bereitstellungseigenschaften so fest, dass sie den Anforderungen Ihrer Zielumgebung entsprechen, und speichern Sie dann die Datei.

  5. Beachten Sie, dass die neue Datei dem Ordner Eigenschaften in Ihrem Datenbankprojekt hinzugefügt wird.

    Beachten Sie, dass die neue Datei dem Ordner Eigenschaften in Ihrem Datenbankprojekt hinzugefügt wird.

Angeben der Bereitstellungskonfigurationsdatei in VSDBCMD

Wenn Sie Projektmappenkonfigurationen (z. B. Debuggen und Release) in Visual Studio 2010 verwenden, können Sie jeder Konfiguration eine Bereitstellungskonfigurationsdatei zuordnen. Wenn Sie eine bestimmte Konfiguration erstellen, generiert der Buildprozess eine konfigurationsspezifische Bereitstellungsmanifestdatei, die auf die konfigurationsspezifische Bereitstellungskonfigurationsdatei verweist. Eines der Standard Ziele des in diesen Tutorials beschriebenen Bereitstellungsansatzes besteht jedoch darin, Benutzern die Möglichkeit zu geben, den Bereitstellungsprozess zu steuern, ohne Visual Studio 2010 und Lösungskonfigurationen zu verwenden. Bei diesem Ansatz ist die Lösungskonfiguration unabhängig von der Zielbereitstellungsumgebung identisch. Um Ihre Datenbankbereitstellung an eine bestimmte Zielumgebung anzupassen, können Sie die VSDBCMD-Befehlszeilenoptionen verwenden, um Ihre Bereitstellungskonfigurationsdatei anzugeben.

Um eine Bereitstellungskonfigurationsdatei in Ihrer VSDBCMD anzugeben, verwenden Sie den Schalter p:/DeploymentConfigurationFile , und geben Sie den vollständigen Pfad zu Ihrer Datei an. Dadurch wird die Vom Bereitstellungsmanifest identifizierte Bereitstellungskonfigurationsdatei überschrieben. Sie können beispielsweise diesen VSDBCMD-Befehl verwenden, um die ContactManager-Datenbank in einer Testumgebung bereitzustellen:

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

Hinweis

Beachten Sie, dass der Buildprozess Ihre SQL-Bereitstellungsdatei möglicherweise umbenennen kann, wenn die Datei in das Ausgabeverzeichnis kopiert wird.

Wenn Sie SQL-Befehlsvariablen in Ihren SQL-Skripts vor oder nach der Bereitstellung verwenden, können Sie einen ähnlichen Ansatz verwenden, um Ihrer Bereitstellung eine umgebungsspezifische SQLcmdvars-Datei zuzuordnen. In diesem Fall verwenden Sie den Schalter p:/SqlCommandVariablesFile , um Ihre SQLCMDVARS-Datei zu identifizieren.

Ausführen des VSDBCMD-Befehls aus einer MSBuild-Projektdatei

Sie können einen VSDBCMD-Befehl aus einer MSBuild-Projektdatei aufrufen, indem Sie einen Exec-Task innerhalb eines MSBuild-Ziels verwenden. In seiner einfachsten Form würde es wie folgt aussehen:

<Target Name="DeployDatabase">     
   <PropertyGroup>      
      <_Cmd>
         Add your VSDBCMD command here
      </_Cmd>
   </PropertyGroup>
   <Exec Command="$(_Cmd)"/> 
 </Target>
  • In der Praxis sollten Sie Eigenschaften zum Speichern der verschiedenen Befehlszeilenparameter erstellen, damit Ihre Projektdateien einfach gelesen und wiederverwendet werden können. Dies erleichtert Benutzern das Bereitstellen von Eigenschaftswerten in einer umgebungsspezifischen Projektdatei oder das Überschreiben von Standardwerten über die MSBuild-Befehlszeile. Wenn Sie den unter Grundlegendes zur Projektdatei beschriebenen Ansatz für geteilte Projektdateien verwenden, sollten Sie Ihre Buildanweisungen und Eigenschaften entsprechend zwischen den beiden Dateien aufteilen:
  • Umgebungsspezifische Einstellungen wie der Dateiname der Bereitstellungskonfiguration, die Datenbankverbindungszeichenfolge und der Name der Zieldatenbank sollten in der umgebungsspezifischen Projektdatei gespeichert werden.
  • Das MSBuild-Ziel, mit dem der VSDBCMD-Befehl ausgeführt wird, sollte zusammen mit allen universellen Eigenschaften wie dem Speicherort der ausführbaren VSDBCMD-Datei in die universelle Projektdatei eingefügt werden.

Sie sollten auch sicherstellen, dass Sie das Datenbankprojekt erstellen, bevor Sie VSDBCMD aufrufen, damit die Deploymanifest-Datei erstellt und zur Verwendung bereit ist. Ein vollständiges Beispiel für diesen Ansatz finden Sie im Thema Grundlegendes zum Buildprozess, der Sie durch die Projektdateien in der Contact Manager-Beispiellösung führt.

Zusammenfassung

In diesem Thema wurde beschrieben, wie Sie Datenbankeigenschaften an verschiedene Zielumgebungen anpassen können, wenn Sie Datenbankprojekte mithilfe von MSBuild und VSDBCMD bereitstellen. Dieser Ansatz ist nützlich, wenn Sie Datenbankprojekte als Teil größerer Lösungen auf Unternehmensniveau bereitstellen müssen. Diese Lösungen werden häufig für mehrere Ziele bereitgestellt, z. B. Sandkastenentwicklungs- oder Testumgebungen, Staging- oder Integrationsplattformen sowie Produktions- oder Liveumgebungen. Jede dieser Zielumgebungen erfordert in der Regel einen eindeutigen Satz von Datenbankbereitstellungseigenschaften.

Weitere Informationen

Weitere Informationen zum Bereitstellen von Datenbankprojekten mit VSDBCMD.exe finden Sie unter Bereitstellen von Datenbankprojekten. Weitere Informationen zur Verwendung benutzerdefinierter MSBuild-Projektdateien zum Steuern des Bereitstellungsprozesses finden Sie unter Grundlegendes zur Projektdatei und Grundlegendes zum Buildprozess.

Diese Artikel auf MSDN enthalten allgemeinere Anleitungen zur Datenbankbereitstellung: