Übersicht über das Erstellen und Bereitstellen einer Datenbank

Zum Erstellen einer Datenbank oder zum Veröffentlichen von Aktualisierungen an einer vorhandenen Datenbank aus dem Datenbankprojekt auf einem Datenbankserver müssen Sie das Datenbankprojekt erstellen und anschließend auf dem betreffenden Datenbankserver bereitstellen.

In dem Buildschritt wird das Datenbankprojekt in die Dateien kompiliert, die zur Bereitstellung verwendet werden. Diese Dateien enthalten die DBSCHEMA-Datei, die DEPLOYMENTMANIFEST-Datei sowie die Skripts vor und nach der Bereitstellung. Wenn Sie das Datenbankprojekt erstellen, wird kein Vergleich mit einer Zieldatenbank ausgeführt. Wenn Sie das Datenbankprojekt bereitstellen, wird die Ausgabe der Buildaktion mit der Zieldatenbank verglichen, sofern diese vorhanden ist, und die Dateien werden bezeichnet, die zum Anpassen des Ziels an das Datenbankprojekt erforderlich sind. Je nach Einstellungen werden diese Aktualisierungen in der Zieldatenbank bereitgestellt.

Sie können auch das Bereitstellungsskript (eine SQL-Datei) generieren und dieses dann ändern, bevor Sie es auf einem Staging- oder Produktionsserver mit dem Transact-SQL-Editor oder einem anderen Tool bereitstellen, z. B. SQL Server Management Studio. Beim Clean-Buildvorgang werden alle vorhandenen Buildartefakte gelöscht, z. B. Skripts, Bereitstellungsmanifeste und die DBSCHEMA-Dateien.

Bereitstellungsskripts

Sie können Skripts erstellen, die vor oder nach den Skripts ausgeführt werden, mit denen das Ziel erstellt oder aktualisiert wird. Es ist nur ein Skript vor der Bereitstellung und eines nach der Bereitstellung zulässig, Sie können aber andere Skripts in diese Skripts einfügen. Weitere Informationen finden Sie unter Erstellen und Bearbeiten von Datenbankskripts.

Bereitstellungsmanifest

Wenn Sie das Datenbankprojekt erstellen, wird ein Bereitstellungsmanifest generiert. Dieses Manifest enthält alle Konfigurationsinformationen auf Projektebene, die Sie benötigen, um die Bereitstellung ohne die Datenbankprojektdatei (.dbproj) ausführen zu können.

Bei einer Bereitstellungsmanifestdatei (.deploymanifest) handelt es sich um eine XML-Datei, deren Struktur einer MSBuild-Projektdatei stark ähnelt. Die DEPLOYMANIFEST-Datei wird im Ordner sql\Konfiguration des Datenbankprojektordners erstellt, wobei Konfiguration die Buildkonfiguration bezeichnet, z. B. Debug oder Release.

Im folgenden Beispiel wird die DEPLOYMANIFEST-Datei für das leere SQL Server 2008-Datenbankprojekt Empty2008DbProj veranschaulicht:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetConnectionString>Data Source=stevenpoauth\sql2k8;Integrated Security=True;Pooling=False</TargetConnectionString>
    <TargetDatabase>Empty2008DbProj</TargetDatabase>
    <DeployToDatabase>True</DeployToDatabase>
    <DeployToScript>True</DeployToScript>
    <SourceModel>Empty2008DbProj.dbschema</SourceModel>
    <DeployScriptFileName>Empty2008DbProj.sql</DeployScriptFileName>
    <DeploymentConfigurationFile>Empty2008DbProj_Database.sqldeployment</DeploymentConfigurationFile>
  </PropertyGroup>
  <PropertyGroup>
    <SqlCommandVariablesFile>Empty2008DbProj_Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
  <ItemGroup>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PostDeployment.sql">
      <__PostdeploymentMetadata>
      </__PostdeploymentMetadata>
    </DeploymentExtensionConfiguration>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PreDeployment.sql">
      <__PredeploymentMetadata>
      </__PredeploymentMetadata>
    </DeploymentExtensionConfiguration>
  </ItemGroup>
  <ItemGroup>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPlanOrderModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPrePostDeploymentModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Refactoring.SqlRefactoringDeploymentContributor">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
  </ItemGroup>
</Project>

Die Bereitstellungsmanifestdatei enthält einen oder mehrere PropertyGroup-Knoten, die die bei der Bereitstellung verwendete Standardkonfiguration definieren. Die Bereitstellungsmanifestdatei enthält auch ItemGroup-Knoten, die DeploymentExtensionConfiguration-Knoten und Reference-Knoten enthalten.

DeploymentExtensionConfiguration-Knoten definieren Konfigurationsdateien, die bei der Bereitstellung an Bereitstellungserweiterungen übergeben werden. Diese Konfigurationsdateien enthalten die Skripts vor und nach der Bereitstellung sowie das Umgestaltungsprotokoll, das bei der Bereitstellung verwendet wird, um die Absicht beizubehalten.

Verweisknoten definieren alle Artefakte, auf die vom Projekt verwiesen wird und die in den Ausgabeordner kopiert werden, wenn Sie das Projekt erstellen. Die Dateien, auf die verwiesen wird, werden bei der Bereitstellung verarbeitet, um sicherzustellen, dass das Modell der Datenbank ordnungsgemäß erneut erstellt wird.

Transaktionen im Bereitstellungsskript

Die meisten Datenbankänderungen im Bereitstellungsskript treten in Transaktionen auf, sodass die Änderungen zurückgesetzt werden können, wenn bei der Bereitstellung ein Fehler auftritt. Die folgenden Objekte werden jedoch außerhalb der Bereitstellungstransaktion erstellt, aktualisiert oder gelöscht.

SQL Server-Version

Objekte außerhalb der Bereitstellungstransaktion

SQL Server 2008 

Serverrollenmitgliedschaft

Endpunkte

Volltextindizes

Volltextkataloge

Verbindungsserver

Verbindungsserveranmeldungen

Ereignissitzungen

Serverüberwachungsspezifikationen

Volltextstopplisten

SQL Server 2005

Serverrollenmitgliedschaft

Endpunkte

Volltextindizes

Volltextkataloge

Verbindungsserver

Verbindungsserveranmeldungen

In der Regel müssen sich diese Objekte außerhalb der Bereitstellungstransaktion befinden, da sie mit gespeicherten Prozeduren des Systems beibehalten werden.

Überlegungen zur Bereitstellungsänderungen an einer vorhandenen Datenbank

Wenn Sie Änderungen an einer vorhandenen Datenbank bereitstellen, können manche Änderungen zu Datenverlusten führen. Wenn eine Änderung zu Datenverlusten in einer Tabelle führen kann, wird die Bereitstellung abgebrochen, wenn das Kontrollkästchen Inkrementelle Bereitstellung blockieren, wenn Datenverlust auftreten könnte aktiviert ist. Standardmäßig ist dieses Kontrollkästchen aktiviert, Sie finden jedoch es im Eigenschaftenfenster für das Projekt. Weitere Informationen finden Sie unter Übersicht über Datenbankprojekteinstellungen.

Die folgenden Arten von Änderungen verursachen Datenverluste: Löschen und erneutes Erstellen einer Tabelle, Größenänderungen für eine Spalte (char(100) in char(50) oder nchar(100) in char(100)), oder Änderungen der Sortierreihenfolge einer Spalte mit Typ Zeichen.

Tipp

Wenn Sie über eine Umgestaltung ein Datenbankobjekt umbenennen oder ein Datenbankobjekt in ein anderes Schema verschieben, zeichnet die Umgestaltungsprotokolldatei diese Aktion auf. Zur Bereitstellungszeit erleichtern die Informationen in der Protokolldatei das Beibehalten der Absicht der Änderungen. Beispielsweise können Sie Daten verlieren, wenn Sie eine Tabelle umbenennen, da die Tabelle gelöscht und eine Tabelle mit dem neuen Namen erstellt würde. Mit der Umgestaltungsprotokolldatei kann das Bereitstellungsskript stattdessen die Tabelle umbenennen und die Absicht und die Daten beibehalten.

Wiederherstellen von fehlgeschlagenen Bereitstellungen

Wenn die Bereitstellung außerhalb der transaktiven Abschnitte des Bereitstellungsskripts fehlschlägt, können Daten verloren gehen. Daher wird dringend empfohlen, für eine freigegebene Datenbank den Einzelbenutzermodus festzulegen und diese zu sichern, bevor sie bereitgestellt wird.

Ausgeschlossene Dateien

Wenn Sie Dateien vom Datenbankprojekt ausschließen, werden die Datenbankobjekte, die in diesen Dateien definiert sind, nicht in die beim Erstellen des Datenbankprojekts erstellte DBSCHEMA-Datei eingeschlossen. Diese Objekte werden nicht bereitgestellt, da sie nicht in der DBSCHEMA-Datei enthalten sind. Wenn Sie noch an einem oder mehreren Objekten arbeiten, jedoch bereits abgeschlossene Arbeiten bereitstellen möchten, können Sie Dateien aus dem Build ausschließen, sodass nur bereits fertiggestellte Objekte in die DBSCHEMA-Datei eingeschlossen und in der Zieldatenbank bereitgestellt werden. Sie können dann später die Dateien hinzufügen, wenn diese für die Bereitstellung vorbereitet sind. Die Datenbank wird bei der Bereitstellung mit den neuen Objekten aktualisiert, ohne dass die vorhandenen Objekte geändert werden (sofern diese nicht im Projekt geändert wurden). Weitere Informationen finden Sie unter Gewusst wie: Ausschließen von Dateien aus einem Datenbankprojekt.

Wichtig

Sie können Daten verlieren, wenn Sie in der Zieldatenbank vorhandene Objekte aus dem Datenbankprojekt ausschließen und dann das Projekt bereitstellen. Diese Objekte werden in der Zieldatenbank gelöscht, wenn das Kontrollkästchen DROP-Anweisungen für Objekte generieren, die sich in der Zieldatenbank, nicht aber im Datenbankprojekt befinden in der Bereitstellungskonfiguration aktiviert ist.

Serverprojekte

Serverprojekte enthalten Definitionen für Objekte in der "Master"-Datenbank. Der Name der Zieldatenbank für ein Serverprojekt ist immer "master". Sie können für jede Servereinstellung angeben, ob Sie deren Wert beim Bereitstellen des Serverprojekts überprüfen möchten. Einstellungen, die Sie nicht überprüfen, werden ignoriert. Wenn der Wert einer Servereinstellung mit dem Wert einer Einstellung, die Sie überprüfen möchten, nicht übereinstimmt, tritt bei der Bereitstellung ein Fehler auf, und eine Fehlermeldung wird ausgegeben.

Befehlszeilenbuilds

Zusätzlich zum Ausführen der Build-, Bereitstellungs- oder Bereinigungsaktionen in der Visual Studio-Benutzeroberfläche können Sie diese Aktionen auch an einer Eingabeaufforderung mit MSBuild.exe ausführen. Sie können Build-, Deploy-, Rebuild- und Clean-Ziele angeben. Standardmäßig werden beim Erstellen und Bereitstellen die Projekteigenschaften verwendet, die im Datenbankprojekt definiert sind (in der DBPROJ-Datei oder der DBPROJ.USER-Datei). Sie können diese Eigenschaften jedoch an einer Eingabeaufforderung oder in einer Antwortdatei überschreiben.

Wichtig

Bevor Sie einen Befehlszeilenbuild ausführen, sollten Sie Visual Studio schließen. Wenn Sie einen Befehlszeilenbuild ausführen, wenn Visual Studio gerade ausgeführt wird, können einige Fehler möglicherweise nicht abgefangen werden.

Sie können auch an einer Eingabeaufforderung mithilfe von VSDBCMD.EXE eine DBSCHEMA-Datei bereitstellen. VSDBCMD können Sie auf einem Computer verwenden, auf dem Visual Studio nicht installiert ist. Weitere Informationen finden Sie unter Gewusst wie: Vorbereiten einer Datenbank für die Bereitstellung über eine Eingabeaufforderung mithilfe von VSDBCMD.EXE. Wenn Sie die Bereitstellung in einer Produktionsumgebung vornehmen, können Sie VSDBCMD verwenden oder aber ein Bereitstellungsskript generieren und dieses dann mit dem Transact-SQL-Editor oder einem anderen Tool manuell bereitstellen, z. B. SQL Server Management Studio.

Befehlszeilensyntax

Sie können das Datenbankprojekt an einer Eingabeaufforderung mit den folgenden Syntaxbeispielen erstellen:

  • MSBuild /target:Build MeinProjektmappenname.sln
    In diesem Beispiel wird der Buildvorgang für die Projektmappe MeinProjektmappenname.sln ausgeführt, wobei die in den Projektdateien der Projektmappe angegebenen Projekteigenschaften verwendet werden. Wenn die Projektmappe mehrere Datenbankprojekte enthält, wird diese zusammen mit dem übrigen Teil der Projektmappe erstellt. Sie können auch ein bestimmtes Datenbankprojekt erstellen. Das Ziel von Build enthält im generierten Buildskript Skripts vor der Bereitstellung und Skripts nach der Bereitstellung.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MeinProjektname.dbproj
    In diesem Beispiel wird das Bereitstellen des Datenbankprojekts veranschaulicht, während der Zieldatenbankname und die Verbindungszeichenfolge überschrieben werden.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:DeploymentConfiguration=Bereitstellungspfad\AlternativeBereitstellungskonfiguration.deploymentconfig /p:SqlCommandVarsFile=Variablenpfad\AlternativeVariablen.sqlcmdvars /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MeinProjektname.dbproj
    In diesem Beispiel wird veranschaulicht, wie das Datenbankprojekt bereitgestellt wird, während eine andere Zieldatenbank und eine andere Verbindungszeichenfolge angegeben wird und die Bereitstellungskonfiguration und die Bereitstellungsvariablen überschrieben werden.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:BuildScriptName=MeinSkriptname.sql /p:outdir=Buildskriptpfad /p:TargetDatabase=AktualisierteZieldatenbank;TargetConnectionString="Data Source=Instanzname\Datenbankname;Integrated Security=True;Pooling=False" Projektpfad\MeinProjektname.dbproj
    In diesem Beispiel wird gezeigt, wie eine Datenbank auf einem anderen Computer bereitgestellt wird als dem mit dem Build. Sie können diese Syntax beispielsweise verwenden, wenn Sie über einen zentralen Buildcomputer verfügen, auf dem jede Nacht ein Buildskript erstellt wird. Sie müssen den Namen des Buildskripts, den Pfad, unter dem sich das Buildskript befindet (outdir), die Zieldatenbank und den Pfad und Dateinamen des Datenbankprojekts angeben.

  • MSBuild @dbbuild.arf MeinProjektname.dbproj
    In diesem Beispiel wird die Verwendung einer Antwortdatei für die Angabe von Befehlszeilenargumenten veranschaulicht. Die Datei, dbbuild.arf, kann beliebige gültige Argumente für MSBuild enthalten, unter anderem solche, die Projekteigenschaften überschreiben.

  • MSBuild /target:Rebuild MeinProjektname.dbproj
    In diesem Beispiel wird das angegebene Projekt oder die angegebene Projektmappe erneut erstellt, auch wenn seit dem letzten Buildvorgang keine Änderungen vorgenommen wurden.

  • MSBuild /target:Clean MeinProjektname.dbproj
    In diesem Beispiel wird das Löschen aller vorhandenen Buildskripts veranschaulicht. In den meisten Fällen würde auf diese Aktion ein weiterer Build- oder Bereitstellungsvorgang folgen.

Tipp

Sie können /target: mit /t: und /property: mit /p: abkürzen.

Weitere Informationen finden Sie unter MSBuild-Befehlszeilenreferenz.

Weitere Informationen zu Antwortdateien finden Sie im folgenden Thema auf der Microsoft-Website: MSBuild-Antwortdateien.

Tipp

Sie müssen MSBuild.exe an der Visual Studio-Eingabeaufforderung oder aber über die Batchdatei vsvars32.bat ausführen. Diese Batchdatei finden Sie im von der Umgebungsvariablen %VS80COMNTOOLS% angegebenen Ordner.

Auf dem Buildcomputer erforderliche Software

Visual Studio Team Foundation Server 2010 bietet systemeigene Unterstützung für das Erstellen, Bereitstellen, Komponententests und das Generieren von Daten für ein Datenbankprojekt. Visual Studio muss auf dem Buildcomputer nicht installiert werden. Wenn Sie nicht Visual Studio Team Foundation Server 2010 auf dem Buildcomputer verwenden, müssen Sie auf dem Buildcomputer Visual Studio 2010 Professional, Visual Studio 2010 Premium oder Visual Studio 2010 Ultimate installieren.

Wenn Sie zudem in Team Foundation Build eine Datenbank bereitstellen möchten, die nicht Teil eines Datenbankkomponententests ist, müssen eine zusätzliche Installation ausführen. Sie müssen den Ordner %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy und dessen Inhalt, einschließlich der Unterordner, aus einer Visual Studio 2010-Installation auf den Buildcomputer kopieren. Weitere Informationen finden Sie unter Gewusst wie: Bereitstellen von Änderungen mit Team Foundation Build und Exemplarische Vorgehensweise: Definieren eines benutzerdefinierten Workflow zum Bereitstellen einer Datenbank von Team Foundation Build.

Projekteigenschaften

Einige Eigenschaften von Datenbank- und Serverprojekten haben Einfluss darauf, wie das Datenbankprojekt erstellt und bereitgestellt wird. Diese Eigenschaften werden in der Projektdatei und der USER-Datei gespeichert. Sie können sie jedoch in der Befehlszeile oder in einer Antwortdatei überschreiben. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren der Buildeinstellungen für Datenbank- und Serverprojekte und unter Gewusst wie: Konfigurieren der Bereitstellungseinstellungen für Datenbank- und Serverprojekte.

Überschreiben von Bereitstellungsmanifesteigenschaften

Bei der Bereitstellung in der Befehlszeile können Sie die Standardbereitstellungseigenschaften (z. B. Bereitstellungskonfiguration, Verbindungszeichenfolge oder SQLCMD-Variablen) überschreiben. Dies empfiehlt sich möglicherweise, wenn Sie eine DBSCHEMA-Datei in mehreren Umgebungen bereitstellen möchten.

Wenn Sie z. B. ein in EnterpriseDB.dbproj definiertes Schema in Entwicklungs-, Test- und Produktionsumgebungen bereitstellen möchten, können Sie die folgenden Befehlszeilen verwenden:

Bereitstellungsumgebung

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Development.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString="Data Source=DEV\sql2008;Integrated Security=true;Pooling=false"

Testumgebung

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment /p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString="Data Source=USERTEST\sql2008;Integrated Security=true;Pooling=false"

Produktionsumgebung

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString="Data Source=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

In jeder Umgebung stellen Sie eine andere Bereitstellungskonfigurationsdatei, eine andere SQLCMD-Variablendatei und eine andere Verbindungszeichenfolge bereit.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Datenbankprojekts zum Generieren einer kompilierten Schemadatei (.dbschema)

Gewusst wie: Bereitstellen von Änderungen in neuen oder vorhandenen Datenbanken

Exemplarische Vorgehensweise: Erstellen und Bereitstellen einer neuen der Versionskontrolle unterliegenden Datenbank

Exemplarische Vorgehensweise: Bereitstellen von Änderungen an einer vorhandenen der Versionskontrolle unterliegenden Datenbank

Konzepte

Erstellen und Bereitstellen von Datenbanken für eine isolierte Entwicklungsumgebung

Erstellen und Bereitstellen von Datenbanken für eine Staging- oder Produktionsumgebung

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Geklärt, welche Software auf dem Buildcomputer erforderlich ist, um die in den MSDN-Foren gemeldete Verwirrung zu aufzulösen.

Kundenfeedback.