Freigeben über


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 auf bestimmte Zielumgebungen anpassen.

Hinweis

In diesem Thema wird davon ausgegangen, dass Sie ein Visual Studio 2010-Datenbankprojekt mit MSBuild.exe und VSDBCMD.exebereitstellen. Weitere Informationen dazu, warum Sie diesen Ansatz auswählen können, finden Sie unter Web Deployment in enterprise and Deploying Database Projects.

Wenn Sie ein Datenbankprojekt für mehrere Ziele bereitstellen, sollten Sie die Datenbankbereitstellungseigenschaften für jede Zielumgebung häufig anpassen. In Testumgebungen erstellen Sie die Datenbank in der Regel in jeder Bereitstellung neu, während Sie in Staging- oder Produktionsumgebungen viel wahrscheinlicher inkrementelle Aktualisierungen vornehmen müssen, um Ihre Daten zu erhalten.

In einem Visual Studio 2010-Datenbankprojekt sind Bereitstellungseinstellungen in einer Bereitstellungskonfigurationsdatei (SQLDeployment) enthalten. In diesem Thema wird erläutert, wie Sie umgebungsspezifische Bereitstellungskonfigurationsdateien erstellen und diejenige festlegen, die Sie als VSDBCMD-Parameter verwenden möchten.

Dieses Thema ist Teil einer Reihe von Lernprogrammen basierend auf den Anforderungen an die Unternehmensbereitstellung eines fiktiven Unternehmens namens Fabrikam, Inc. In dieser Lernprogrammreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einer realistischen Komplexitätsstufe darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, einem WCF-Dienst (Windows Communication Foundation) und einem Datenbankprojekt.

Die Bereitstellungsmethode im Mittelpunkt dieser Lernprogramme basiert auf dem geteilten Projektdateiansatz, der unter "Grundlegendes zur Projektdatei" beschrieben wird, in 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 Build-Zeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Build-Anweisungen zu bilden.

Aufgabenübersicht

In diesem Thema wird davon ausgegangen, dass:

Um ein Bereitstellungssystem zu erstellen, das unterschiedliche 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 Befehlszeilenoption 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 umgebungsspezifischen 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:

  • Zusammenstellung des Bereitstellungsvergleichs. Auf diese Weise können Sie auswählen, ob die Datenbanksortierung des Projekts (die Quellsortierung ) oder die Datenbanksortierung des Zielservers (die Zielsortierung ) verwendet werden soll. In den meisten Fällen sollten Sie beim Bereitstellen in einer Entwicklungs- oder Testumgebung die Quellsortierung verwenden. Wenn Sie in einer Staging- oder Produktionsumgebung bereitstellen, sollten Sie die Zielkollation 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 gemäß definition in der Datei "Database.sqlsettings " angewendet werden sollen. 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.
  • Erstellen Sie die Datenbank immer erneut. 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 dem 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 auf false für Bereitstellungen in Staging- oder Produktionsumgebungen festlegen.
  • Inkrementelle Bereitstellung blockieren, wenn Datenverlust auftreten kann. Auf diese Weise können Sie auswählen, ob die Bereitstellung beendet werden soll, wenn eine Änderung des Datenbankschemas den Datenverlust verursacht. Sie legen dies in der Regel auf "true " für eine Bereitstellung in einer Produktionsumgebung fest, um Ihnen die Möglichkeit zu geben, einzugreifen und wichtige Daten zu schützen. Wenn Sie " Datenbank immer erneut erstellen " auf "false" festgelegt haben, hat diese Einstellung keine Auswirkung.
  • Führen Sie die Bereitstellung im Einzelbenutzermodus aus. Dies ist in der Regel kein Problem in Entwicklungs- oder Testumgebungen. Sie sollten dies jedoch in der Regel 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 sie in einer Produktionsumgebung bereitstellen, als Vorsichtsmaßnahme gegen Datenverlust. Sie können es auch auf true festlegen, wenn Sie es in einer Staging-Umgebung bereitstellen und Ihre Staging-Datenbank viele Daten enthält.
  • Generieren Sie DROP-Anweisungen für Objekte, die sich in der Zieldatenbank befinden, aber nicht im Datenbankprojekt. In den meisten Fällen ist dies ein integraler und wesentlicher Bestandteil der inkrementellen Änderungen an einer Datenbank. Wenn Sie " Datenbank immer erneut erstellen " auf "false" festgelegt haben, hat diese Einstellung keine Auswirkung.
  • Verwenden Sie nicht ALTER ASSEMBLY-Anweisungen, um CLR-Typen zu aktualisieren. Diese Einstellung bestimmt, wie SQL Server Common Language Runtime (CLR)-Typen auf neuere Assemblyversionen aktualisieren soll. Dies sollte in den meisten Szenarien auf "false" festgelegt werden.

Diese Tabelle enthält typische Bereitstellungseinstellungen für verschiedene Zielumgebungen. Ihre Einstellungen können jedoch je nach Ihren genauen Anforderungen unterschiedlich sein.

Entwickler/Test Staging/Integration Produktion
Bereitstellungsvergleichsanordnung Quelle Ziel Ziel
Bereitstellen von Datenbankeigenschaften Richtig Nur zum ersten Mal Nur zum ersten Mal
Datenbank immer neu erstellen Richtig Falsch Falsch
Inkrementelle Bereitstellung blockieren, wenn Datenverlust auftreten kann Falsch Vielleicht Richtig
Ausführen des Bereitstellungsskripts im Einzelbenutzermodus Falsch Richtig Richtig
Sichern der Datenbank vor der Bereitstellung Falsch Vielleicht Richtig
Generieren von DROP-Anweisungen für Objekte, die sich in der Zieldatenbank befinden, sich jedoch nicht im Datenbankprojekt befinden Falsch Richtig Richtig
Verwenden Sie nicht ALTER ASSEMBLY-Anweisungen zum Aktualisieren von CLR-Typen Falsch Falsch Falsch

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 Projektmappen-Explorer-Fenster mit der rechten Maustaste auf Das Datenbankprojekt, und klicken Sie dann auf "Eigenschaften".

  2. Klicken Sie auf der Seite "Datenbankprojekteigenschaften" auf der Registerkarte "Bereitstellen" in der Zeile "Bereitstellungskonfigurationsdatei" auf "Neu".

    Klicken Sie auf der Seite

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

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

    Legen Sie auf der Seite

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

    Beachten Sie, dass die neue Datei dem Ordner

Angeben der Bereitstellungskonfigurationsdatei in VSDBCMD

Wenn Sie Lösungskonfigurationen (z. B. Debug 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 Hauptziele des In diesen Lernprogrammen beschriebenen Ansatzes für die Bereitstellung ist jedoch die Möglichkeit, 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 Die Datenbankbereitstellung auf eine bestimmte Zielumgebung anzupassen, können Sie die VSDBCMD-Befehlszeilenoptionen verwenden, um Ihre Bereitstellungskonfigurationsdatei anzugeben.

Um eine Bereitstellungskonfigurationsdatei in Ihrem VSDBCMD anzugeben, verwenden Sie den Switch p:/DeploymentConfigurationFile , und geben Sie den vollständigen Pfad zu Ihrer Datei an. Dadurch wird die Bereitstellungskonfigurationsdatei außer Kraft gesetzt, die vom Bereitstellungsmanifest identifiziert wird. Sie können z. B. 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 SQLDeployment-Datei möglicherweise umbenennen kann, wenn sie die Datei in das Ausgabeverzeichnis kopiert.

Wenn Sie SQL-Befehlsvariablen in Ihren SQL-Skripts vor oder nach der Bereitstellung verwenden, können Sie eine umgebungsspezifische .sqlcmdvars-Datei mit Ihrer Bereitstellung verknüpfen. In diesem Fall verwenden Sie den Switch 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 eine Exec-Aufgabe innerhalb eines MSBuild-Ziels verwenden. In ihrer einfachsten Form würde es wie folgt aussehen:

<Target Name="DeployDatabase">     
   <PropertyGroup>      
      <_Cmd>
         Add your VSDBCMD command here
      </_Cmd>
   </PropertyGroup>
   <Exec Command="$(_Cmd)"/> 
 </Target>
  • Um Ihre Projektdateien einfach zu lesen und wiederzuverwenden, sollten Sie Eigenschaften erstellen, um die verschiedenen Befehlszeilenparameter zu speichern. Dies erleichtert Benutzern das Bereitstellen von Eigenschaftswerten in einer umgebungsspezifischen Projektdatei oder das Überschreiben von Standardwerten aus der MSBuild-Befehlszeile. Wenn Sie den unter "Grundlegendes zur Projektdatei" beschriebenen Ansatz für geteilte Projektdateien verwenden, sollten Sie die Buildanweisungen und Eigenschaften entsprechend zwischen den beiden Dateien unterteilen:
  • Umgebungsspezifische Einstellungen wie der Dateiname der Bereitstellungskonfiguration, die Datenbankverbindungszeichenfolge und der Zieldatenbankname sollten in die umgebungsspezifische Projektdatei verschoben werden.
  • Das MSBuild-Ziel, das den VSDBCMD-Befehl ausführt, zusammen mit allen universellen Eigenschaften wie dem Speicherort der ausführbaren Datei VSDBCMD, sollte in die universelle Projektdatei verschoben werden.

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

Fazit

In diesem Thema wird beschrieben, wie Sie Datenbankeigenschaften auf verschiedene Zielumgebungen anpassen können, wenn Sie Datenbankprojekte mit MSBuild und VSDBCMD bereitstellen. Dieser Ansatz ist nützlich, wenn Sie Datenbankprojekte als Teil größerer Enterprise-Skalierungslösungen 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.

Weiterführende Lektüre

Weitere Informationen zum Bereitstellen von Datenbankprojekten mithilfe von VSDBCMD.exefinden Sie unter Bereitstellen von Datenbankprojekten. Weitere Informationen zur Verwendung von benutzerdefinierten MSBuild-Projektdateien zur Steuerung des Bereitstellungsprozesses finden Sie unter Grundlegendes zur Projektdatei und zum Verständnis des Buildprozesses.

Diese Artikel auf MSDN bieten allgemeinere Anleitungen zur Datenbankbereitstellung: