Bereitstellen von Datenbankprojekten
von Jason Lee
Hinweis
In vielen Unternehmensbereitstellungsszenarien benötigen Sie die Möglichkeit, inkrementelle Updates in einer bereitgestellten Datenbank zu veröffentlichen. Die Alternative besteht darin, die Datenbank für jede Bereitstellung neu zu erstellen, was bedeutet, dass Alle Daten in der vorhandenen Datenbank verloren gehen. 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 der 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 Eigenschaftenordner enthält, der vier Dateien enthält.
Zusammen mit der Projektdatei (ContactManager.Database.dbproj in diesem Fall) 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 Lösungskonfiguration (z. B. Debug und Release) kann eine andere SQLCMDvars-Datei angeben.
- Die Datei "Database.sqldeployment " stellt bereitstellungsspezifische Einstellungen bereit, z. B. ob die in Ihrem Projekt oder die Sortierung des Zielservers definierte Sortierung verwendet werden soll, unabhängig davon, ob die Zieldatenbank jedes Mal neu erstellt oder einfach die vorhandene Datenbank geändert werden soll, um sie auf dem neuesten Stand zu halten usw. Jede Lösungskonfiguration 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 Lösungskonfigurationen 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 Lösungskonfigurationen 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.
Beim Erstellen eines Datenbankprojekts 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). Dies enthält alle informationen, die zum Erstellen und Bereitstellen der Datenbank erforderlich sind. Sie verweist auf die DBSCHEMA-Datei zusammen mit anderen Ressourcen, z. B. die Bereitstellungsanweisungen (die SQLDeployment-Datei) und alle SQL-Skripts vor der Bereitstellung oder nach der Bereitstellung.
Dies zeigt die Beziehung zwischen diesen 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 alle SQL-Skripts vor der Bereitstellung oder nach der Bereitstellung an.
Warum verwenden Sie VSDBCMD zum Bereitstellen eines Datenbankprojekts?
Es gibt verschiedene Ansätze für die Bereitstellung von Datenbankprojekten. Nicht alle davon eignen sich jedoch für die Bereitstellung eines Datenbankprojekts auf Remoteservern in einer Unternehmensumgebung. Überlegen Sie sich, was Sie aus einer Datenbankprojektbereitstellung wünschen. In Unternehmensbereitstellungsszenarien möchten Sie wahrscheinlich Folgendes:
- Die Möglichkeit, das Datenbankprojekt von einem Remotestandort aus bereitzustellen.
- Die Möglichkeit, inkrementelle Aktualisierungen an einer vorhandenen Datenbank vorzunehmen.
- Die Möglichkeit, Skripts vor der Bereitstellung oder Skripts nach der Bereitstellung einzuschließen.
- Die Möglichkeit, die Bereitstellung auf mehrere Zielumgebungen anzupassen.
- Die Möglichkeit, das Datenbankprojekt als Teil einer größeren, in der Regel skriptgesteuerte Lösungsbereitstellung bereitzustellen.
Es gibt drei Hauptansätze, mit denen Sie ein Datenbankprojekt bereitstellen 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 erforderliche Änderungen an der Datenbank vornehmen, 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 besteht darin, 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 von einem Computer verwenden, auf dem Visual Studio 2010 installiert ist, und der Entwickler muss Verbindungszeichenfolge und Anmeldeinformationen für alle Zielumgebungen kennen und bereitstellen.
- Sie können das Internetinformationsdienste (IIS) Web Deployment Tool (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 vom Datenbankprojekt generiert wird, aber dazu müssen Sie eine benutzerdefinierte WPP-Zieldatei für Ihr Webanwendungsprojekt erstellen. Dadurch wird dem Bereitstellungsprozess eine erhebliche Komplexität hinzugefügt. Darüber hinaus unterstützt Web Deploy keine inkrementellen Updates für vorhandene Datenbanken. Weitere Informationen zu diesem Ansatz finden Sie unter Erweitern der Web Publishing-Pipeline auf die bereitgestellte SQL-Datei des Datenbankprojekts.
- Sie können das Hilfsprogramm VSDBCMD verwenden, um die Datenbank mithilfe des Datenbankschemas oder des Bereitstellungsmanifests bereitzustellen. Sie können VSDBCMD.exe von einem MSBuild-Ziel aufrufen, mit dem Sie Datenbanken als Teil 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 überschreiben, mit dem 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 mit Ihrem Datenbankschema auszurichten. VSDBCMD bietet auch eine breite Palette von Befehlszeilenoptionen, die Ihnen eine differenzierte Kontrolle über den Bereitstellungsprozess bieten.
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? | Ja | Ja | Ja |
Unterstützt inkrementelle Updates? | Ja | Keine | Ja |
Unterstützt Skripts vor/nach der Bereitstellung? | Ja | Ja | Ja |
Unterstützt die Bereitstellung mit mehreren Umgebungen? | Eingeschränkt | Eingeschränkt | Ja |
Unterstützt die Skriptbereitstellung? | Begrenzt | Ja | Ja |
Im restlichen Teil dieses Themas wird die Verwendung von VSDBCMD mit MSBuild zum Bereitstellen von Datenbankprojekten beschrieben.
Grundlegendes zum Bereitstellungsprozess
Mit dem Hilfsprogramm VSDBCMD können Sie eine Datenbank entweder mithilfe des Datenbankschemas (der DBSCHEMA-Datei) oder des Bereitstellungsmanifests (der .deploymanifest-Datei) bereitstellen. In der Praxis verwenden Sie fast immer das Bereitstellungsmanifest, da Sie im Bereitstellungsmanifest Standardwerte für verschiedene Bereitstellungseigenschaften bereitstellen und alle SQL-Skripts vor der Bereitstellung oder nach der Bereitstellung identifizieren können, die Sie ausführen möchten. Beispielsweise wird dieser VSDBCMD-Befehl 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 Importoption 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 Switch /manifest (oder /ManifestFile) identifiziert die deploymanifest-Datei, die Sie bereitstellen möchten. Wenn Sie stattdessen die DBSCHEMA-Datei verwenden möchten, verwenden Sie den Switch /model (oder /ModelFile).
- Der Switch /cs (oder /ConnectionString) stellt die Verbindungszeichenfolge für den Zieldatenbankserver bereit. Beachten Sie, dass dies nicht den Namen der Datenbank 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 diese Option weglassen. Wenn Sie den Switch trotzdem verwenden, überschreibt der Switchwert den Wert ".deploymanifest".
- Die Eigenschaft "/p:TargetDatabase " stellt den Namen bereit, den Sie der Zieldatenbank beim Erstellen zuweisen möchten. Dadurch wird der Wert der TargetDatabase-Eigenschaft in der DEPLOYMANIFEST-Datei überschrieben. Sie können die Syntax "/p: [Eigenschaftsname]" verwenden, um eine Vielzahl von Bereitstellungseigenschaften festzulegen und alle SQLCMD-Variablen außer Kraft zu setzen, die in der SQLCMDvars-Datei deklariert sind.
- Der Switch /dd+ (oder /DeployToDatabase+) gibt an, dass Sie eine Bereitstellung erstellen und in der Zielumgebung bereitstellen möchten. Wenn Sie /dd-angeben oder den Switch weglassen, generiert VSDBCMD ein Bereitstellungsskript, stellt ihn jedoch nicht in der Zielumgebung bereit. Dieser Schalter ist häufig die Ursache für Verwirrung und wird im nächsten Abschnitt ausführlicher erläutert.
- Der Switch /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 in der Befehlszeilenreferenz für VSDBCMD.EXE (Deployment and Schema Import) und How to: Prepare a Database for Deployment From a Command Prompt by Using 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 des Switchs "/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 ziemlich einfach:
- Wenn Sie /dd+ oder /dd angeben, generiert VSDBCMD ein Bereitstellungsskript und stellt die Datenbank bereit.
- Wenn Sie /dd- angeben oder den Switch weglassen, 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 Bereitstellen-Aktion auf " Bereitstellungsskript erstellen" (.sql) festlegen, lautet der Wert "False". Wenn Sie die Aktion "Bereitstellen" auf " Erstellen eines Bereitstellungsskripts " (.sql) festlegen und in der Datenbank bereitstellen, 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 mit der Release-Konfiguration veröffentlichen, werden Ihre Einstellungen nicht verwendet.
Hinweis
In diesem Szenario sollte die Bereitstellen-Aktion immer auf das Erstellen eines Bereitstellungsskripts (.sql) festgelegt werden, da Visual Studio 2010 Ihre Datenbank nicht bereitstellen soll. Mit anderen Worten, die DeployToDatabase-Eigenschaft sollte immer False sein.
Wenn eine DeployToDatabase-Eigenschaft angegeben wird, überschreibt der Switch /dd die Eigenschaft nur, wenn der Eigenschaftswert false ist:
- Wenn die DeployToDatabase-Eigenschaft false ist und Sie /dd+ oder /dd angeben, überschreibt VSDBCMD die DeployToDatabase-Eigenschaft und stellt die Datenbank bereit.
- Wenn die DeployToDatabase-Eigenschaft false ist und Sie /dd- oder weglassen, stellt VSDBCMD die Datenbank nicht bereit.
- Wenn die DeployToDatabase-Eigenschaft "True" lautet, ignoriert VSDBCMD den Switch und stellt die Datenbank bereit.
- In jedem Fall wird ein Bereitstellungsskript generiert, unabhängig davon, ob Sie die Datenbank ebenfalls bereitstellen.
Zusammenfassung
Dieses Thema enthält 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 Bereitstellung von Datenbanken im Unternehmen zu unterstützen.
Weitere Informationen dazu, wie dies in der Praxis funktioniert, finden Sie unter Anpassen von Datenbankbereitstellungen für mehrere Umgebungen.
Weitere nützliche 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. Anleitungen zum Konfigurieren von Datenbankrollenmitgliedschaften durch Ausführen eines Skripts nach der Bereitstellung finden Sie unter Bereitstellen von Datenbankrollenmitgliedschaften in Testumgebungen. Anleitungen zum Verwalten einiger der einzigartigen Herausforderungen, die Mitgliedschaftsdatenbanken auferlegen, finden Sie unter Bereitstellen von Mitgliedschaftsdatenbanken in Unternehmensumgebungen.
Diese Themen auf MSDN bieten umfassendere Anleitungen und Hintergrundinformationen zu Visual Studio-Datenbankprojekten und dem Datenbankbereitstellungsprozess: