Gewusst wie: Vergleichen von Datenbankschemas

Dieses Thema gilt für folgende Anwendungsbereiche:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

Thema ist vorhanden Thema ist vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

In Visual Studio Premium oder Visual Studio Ultimate können Sie zwei Datenbankschemas vergleichen. Diese Schemas können durch eine Datenbank, ein Anwendungsprojekt auf Datenebene, ein Datenbankprojekt oder die Buildausgabe eines Datenbankprojekts (eine DBSCHEMA-Datei) dargestellt werden. Die verglichenen Entitäten werden als Quelle und Ziel bezeichnet. Nach Beenden des Schemavergleichs werden die Ergebnisse im Fenster Schemavergleich angezeigt. Visual Studio generiert außerdem ein DDL-Skript (Data Definition Language, Datendefinitionssprache), mit dem die verschiedenen Schemas synchronisiert werden können.

Wenn Sie ein Datenbankprojekt wiederholt mit einer Zieldatenbank vergleichen möchten, können Sie den Schemavergleich dem Datenbankprojekt hinzufügen. Dann können Sie die Schemas erneut vergleichen, indem Sie den betreffenden Vergleich erneut öffnen. Mit einem Schemavergleich speichern Sie Verbindungsinformationen, sitzungsspezifische Optionen sowie Werte für SQLCMD-Variablen. Die Ergebnisse werden nicht gespeichert, und sie werden erneut generiert, wenn Sie die SCMP-Datei für den gespeicherten Schemavergleich öffnen.

Nachdem der Vergleich beendet ist, können Sie weitere Schritte ausführen:

  • Sie können die strukturellen Unterschiede zwischen den beiden Datenbanken anzeigen. Weitere Informationen finden Sie unter Anzeigen von Schemaunterschieden.

  • Sie können auf Aktualisierungsskript aktualisieren klicken, um das vollständige Skript anzuzeigen, das ggf. zum Synchronisieren der Schemas verwendet wird.

  • Sie können einen Teil des Ziels oder das gesamte Ziel so aktualisieren, dass es der Quelle entspricht. Weitere Informationen finden Sie unter Synchronisieren von Datenbank- oder Serverobjekten.

  • Sie können die Daten am Ziel und an der Quelle vergleichen. Weitere Informationen finden Sie unter Gewusst wie: Vergleichen und Synchronisieren der Daten von zwei Datenbanken.

Weitere Informationen zu Schemavergleichsszenarien finden Sie unter Vergleichen und Synchronisieren von Datenbankschemas.

Sie können DBSCHEMA-Dateien auch an einer Eingabeaufforderung mit VSDBCMD.EXE vergleichen. Dies empfiehlt sich beispielsweise, wenn Sie ein Updateskript zum Aktualisieren einer Zieldatenbank generieren möchten, weil Sie über keinen Direktzugriff auf den Zielserver verfügen.

In diesem Thema

So vergleichen Sie zwei Schemas in einem Schemavergleich

  1. Wenn Sie zwei Schemas vergleichen, die Einstellungen jedoch nicht als Teil des Datenbankprojekts speichern möchten, führen Sie die folgenden Schritte aus:

    1. Öffnen Sie das Menü Daten, zeigen Sie auf Schemavergleich, und klicken Sie auf Neuer Schemavergleich.

    2. Fahren Sie mit Schritt 3 fort.

  2. Wenn Sie zwei Schemas vergleichen und dann die Einstellungen als Teil des Datenbankprojekts speichern möchten, führen Sie die folgenden Schritte aus:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Schemavergleich, klicken Sie auf Hinzufügen, und klicken Sie dann auf Schemavergleich.

      Das Dialogfeld Neues Element hinzufügen wird angezeigt.

    2. Geben Sie unter Name den Namen ein, den Sie dem Schemavergleich geben möchten, und klicken Sie dann auf Hinzufügen.

  3. Geben Sie die Quelle und das Ziel an, die Sie vergleichen möchten, indem Sie für jedes Schema auf Projekt, Datenbank oder Datenbankschemadateien klicken.

    Tipp

    Sie können eine Datenbankschemadatei für das Zielschema angeben, jedoch nicht aktualisieren. Eine vollständige Liste der unterstützten Vergleichsszenarien finden Sie unter Vergleichen und Synchronisieren von Datenbankschemas.

  4. Wenn Sie für die Quelle oder das Ziel auf Datenbank geklickt haben, klicken Sie zum Herstellen einer Verbindung mit der Datenquelle auf die entsprechende Datenquelle in der Liste.

    Wenn Ihre Datenbank nicht aufgeführt wird, klicken Sie auf Neue Verbindung. Geben Sie im Dialogfeld Verbindungseigenschaften den Server mit der Quelle oder dem Ziel sowie den Authentifizierungstyp an, der beim Herstellen einer Verbindung mit dem Server verwendet werden soll. Klicken Sie optional auf eine Datenbank auf dem Server. Klicken Sie abschließend auf OK.

    Tipp

    Nachdem Sie eine Verbindung hergestellt haben, wird diese in Server-Explorer unter Datenverbindungen angezeigt.

  5. Wenn Sie für die Quelle oder das Ziel auf Datenbankschemadateien geklickt haben, geben den Pfad und den Dateinamen ein, oder klicken auf Durchsuchen, um eine Datei anzugeben.

  6. (optional) Klicken Sie auf Optionen, um die zu vergleichenden Objekte, die zu ignorierenden Typen von Unterschieden und den beabsichtigten Inhalt des generierten Updateskripts anzugeben.

    Wichtig

    Standardmäßig werden in Schemavergleichssitzungen die im Menü Extras unter Optionen konfigurierten Optionen verwendet. Wenn Sie erweiterten Eigenschaften nicht ignoriert werden sollen, klicken Sie auf Optionen, um die entsprechende Einstellung zu ändern. Weitere Informationen zum Festlegen von Optionen für den Schemavergleich finden Sie unter Gewusst wie: Festlegen von Optionen für das Vergleichen von Datenbankschemas.

  7. (optional) Klicken Sie auf SQLCMD-Variablen, um eine SQLCMDVARS-Datei mit einer Liste der Variablen und deren Werten anzugeben.

    Tipp

    Beim Vergleichen zweier Projekte (Datenbankprojekte, Serverprojekte oder Anwendungsprojekte auf Datenebene) können Sie nur SQLCMD-Variablen angeben.

    Die Werte werden beim Schemavergleich im entsprechenden Datenbankprojekt ersetzt.

  8. Klicken Sie auf OK.

    Der Schemavergleich wird gestartet.

    Tipp

    Einen derzeit ausgeführten Schemavergleich können Sie beenden, indem Sie auf der Symbolleiste auf Beenden klicken.

So vergleichen Sie Schemas mit dem Visual Studio-Automatisierungsmodell

  1. Zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie auf Befehlsfenster.

  2. Geben Sie im Befehlsfenster folgenden Befehl ein:

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    Ersetzen Sie sourceIdentifier durch eine der folgenden Zeichenfolgen:

    • /ProviderType ConnectionBased /ConnectionString "MeineVerbindungszeichenfolge"

    • /ProviderType ConnectionBased /ConnectionName MeinVerbindungsname

    • /ProviderType ProjectBased /ProjectName MeinDateiname.dbproj

    • /ProviderType FileBased /ProjectName MeinDateiname.dbschema

    • /ProviderType FileBased /ProjectName MeinDateiname.dacpac

    Ersetzen Sie targetIdentifier durch eine der folgenden Zeichenfolgen:

    • /ProviderType ConnectionBased /ConnectionString "MeineVerbindungszeichenfolge"

    • /ProviderType ConnectionBased /ConnectionName MeinVerbindungsname

    • /ProviderType ProjectBased /ProjectName MeinDateiname.dbproj

    • /ProviderType FileBased /ProjectName MeinDateiname.dbschema

    • /ProviderType FileBased /ProjectName MeinDateiname.dacpac

    Wenn Sie keine Quelle und kein Ziel angeben, wird das Dialogfeld Neuer Schemavergleich angezeigt. Weitere Informationen zu den Parametern für den Befehl Data.NewSchemaComparison finden Sie unter Referenz der Automatisierungsbefehle für Datenbankfunktionen von Visual Studio.

    Die Objekte und Einstellungen in der angegebenen Quelle und im angegebenen Ziel werden verglichen. Die Ergebnisse werden in einer Schemavergleichssitzung angezeigt, die Sie speichern können. Weitere Informationen zum Anzeigen von Ergebnissen oder Synchronisieren der Schemas finden Sie unter Anzeigen von Schemaunterschieden und Synchronisieren von Datenbank oder Serverobjekten.

So speichern Sie einen Schemavergleich zum ersten Mal

  1. Klicken Sie im Menü Datei auf SchemaComparisonName.scmp speichern.

    Das Dialogfeld Datei speichern unter wird geöffnet.

  2. Geben Sie den Pfad und den Dateinamen für den Schemavergleich an.

    Wenn der Vergleich Teil des Datenbankprojekts ist, wird der Vergleich im Ordner SchemaComparisons dieses Projekts gespeichert.

  3. Klicken Sie auf Speichern.

    Der Schemavergleich wird am angegebenen Speicherort gespeichert.

Anzeigen von Schemaunterschieden

Sie können die Unterschiede zwischen einem Quellschema und einem Zielschema bestimmen, indem Sie diese vergleichen und die Ergebnisse im Fenster Schemavergleich als Struktur anzeigen. Sie können z. B. nur solche Objekte anzeigen, die in der Quelle, aber nicht im Ziel vorhanden sind. Sie können auch Details zu den Unterschieden zwischen bestimmten Objekten anzeigen, zudem können Sie die Ergebnisse aktualisieren, um aktuelle Änderungen zu reflektieren.

Sie können die Ergebnisse auch als Transact-SQL-Befehle in einem Skript zum Synchronisieren des Ziels mit der Quelle anzeigen. Sie können dieses Skript im Fenster Schema-Updateskript oder im Transact-SQL-Editor anzeigen, und Sie können das Skript auch in eine Datei exportieren. Wenn Sie das Ziel so aktualisieren, dass es der Quelle entspricht, können Sie das Skript sofort ausführen, um die Schemas zu synchronisieren. Sie können das Skript aber auch ändern und dann ausführen. Weitere Informationen finden Sie unter Synchronisieren von Datenbank- oder Serverobjekten.

So filtern Sie die Ergebnisse nach Typ

  1. Klicken Sie auf der Symbolleiste Schemavergleich auf Filter.

  2. Klicken Sie auf einen oder mehrere Filter, um die Sätze von Ergebnissen anzugeben, die Sie anzeigen möchten.

    Tipp

    Filtereinstellungen werden mit der SCMP-Datei gespeichert und bleiben bei Änderungen der Quell- und Zielschemas bestehen.

So zeigen Sie Änderungen für eine Objektdefinition an

  • Klicken Sie auf eine beliebige Zeile im Raster, für die der Status Neu, Fehlt oder Unterschiedlich nach Form ist.

So aktualisieren Sie Vergleichsergebnisse

  • Klicken Sie auf der Symbolleiste Schemavergleich auf Aktualisieren.

    Die Quelle und das Ziel werden erneut verglichen, und die Ergebnisse des Vergleichs werden aktualisiert.

So zeigen Sie das Synchronisierungsskript an

  • Zeigen Sie im Menü Daten auf Schemavergleich, und klicken Sie auf Schema-Updateskript anzeigen.

    Tipp

    Wenn Schema-Updateskript anzeigen nicht verfügbar ist, können beide Skripts nicht für das angegebene Ziel generiert werden, oder der Vergleich muss aktualisiert werden. Wenn es sich bei dem Zielschema z. B. um eine DBSCHEMA-Datei handelt, können Sie kein Updateskript erstellen.

    Das Fenster Schema-Updateskript wird mit dem Skript angezeigt, mit dem Sie das Ziel so aktualisieren können, dass dieses der Quelle entspricht.

    Tipp

    Wenn das Fenster Schema-Updateskript geöffnet ist, können Sie auch auf Aktualisierungsskript aktualisieren klicken.

So öffnen Sie das Synchronisierungsskript im Transact-SQL-Editor

  • Zeigen Sie im Menü Daten auf Schemavergleich, zeigen Sie auf Exportieren nach, und klicken Sie auf Editor.

    Der Transact-SQL-Editor wird mit dem Skript angezeigt, mit dem Sie das Ziel so aktualisieren können, dass dieses der Quelle entspricht.

So speichern Sie das Synchronisierungsskript in einer Datei

  1. Zeigen Sie im Menü Daten auf Schemavergleich, zeigen Sie auf Exportieren nach, und klicken Sie auf Datei.

    Das Dialogfeld Updateschemaskript speichern wird angezeigt.

  2. Geben Sie unter Objektname den Namen für das Synchronisierungsskript ein, und klicken Sie auf Speichern.

    Das Skript wird unter dem angegebenen Dateinamen gespeichert.

Synchronisieren von Datenbank- oder Serverobjekten

Wenn Sie die Schemas der Quelle und des Ziels verglichen haben, können Sie ein vollständiges Schema oder auch nur die in diesem Schema angegebenen Datenbankobjekte synchronisieren. Weitere Informationen finden Sie unter Vergleichen und Synchronisieren von Datenbankschemas.

Wenn sich Quelle und Ziel auf dem gleichen Server befinden, kann beim Versuch, die Schemas zu synchronisieren, ein Fehler auftreten. Der Fehler tritt auf, weil die Zieldateien, z. B. Dateigruppendateien, nicht mit dem gleichen Namen wie die Quelle erstellt werden können, da sie auf dem Server bereits vorhanden sind. Zum Beheben dieses Problems ändern Sie die Aktion aktualisieren für die in Konflikt stehenden Dateien in Überspringen.

Tipp

Die verglichenen Datenbanken werden als Quelle und Ziel bezeichnet. Bei der Synchronisierung von Datenbankschemas wird das Ziel aktualisiert, während die die Quelle unverändert bleibt. Sie können eine Projektdatei (.dbschema) zwar als Ziel angeben, diese jedoch nicht aktualisieren.

So aktualisieren Sie das Zielschema

  1. Vergleichen Sie zwei Schemas.

    Nach Abschluss des Vergleichs werden die verglichenen Datenbankobjekte im Fenster Schemavergleich aufgelistet. Jede Zeile stellt ein Datenbankobjekt dar.

  2. (Optional) In der Spalte Aktion aktualisieren, geben Sie an, ob das Update in der Ergebnisliste für jedes Objekt übernommen oder übersprungen werden soll.

    Einzelne Synchronisierungsaktionen werden nicht sofort ausgeführt, sondern zur Batchausführung im folgenden Schritt gespeichert.

    Tipp

    Um die Spalte Aktion aktualisieren für alle Objekte eines bestimmten Typs zurückzusetzen, klicken Sie mit der rechten Maustaste auf den Knoten für diesen Typ (z. B. auf den Knoten Tabellen), und klicken Sie auf Standard wiederherstellen. Um die Spalte Aktion aktualisieren für alle Objekte eines bestimmten Typs auf einen bestimmten Zustand festzulegen, klicken Sie mit der rechten Maustaste auf den Knoten für diesen Typ, und klicken Sie auf Alle erstellen, Alle aktualisieren oder Alle überspringen.

  3. Gehen Sie wie folgt vor, um verschiedene, neue oder fehlende Datenbankobjekte zu synchronisieren:

    • Klicken Sie auf Updates schreiben, um das Ziel direkt zu aktualisieren.

      Mit Ausnahme der als Überspringen gekennzeichneten Objekte wird dadurch das Schema der ausgewählten Datenbankobjekte in der Quelle auf die entsprechenden Objekte im Ziel angewendet. Durch diese Synchronisierung wird das Zielobjekt aktualisiert, erstellt oder entfernt.

      Wichtig

      Sie können den Vorgang der Schemaaktualisierung abbrechen, indem Sie auf Schreiben auf Ziel beenden klicken. Wenn Sie die Aktualisierung beenden, werden für die meisten Objekttypen keine Änderungen weitergegeben. Teilweise Änderungen an Benutzer- und Rollenobjekten können jedoch möglicherweise nicht rückgängig gemacht werden, da diese Objekte nicht mit Transaktionen umschlossen werden können.

    • Überprüfen Sie die Änderungen vor der Aktualisierung des Ziels im Fenster Schema-Updateskript oder durch Klicken auf In Editor exportieren.

      Bei dieser Auswahl wird ein Transact-SQL-Skript generiert und in einem Transact-SQL-Editor-Fenster geöffnet. Sie können das Skript überprüfen und bei Bedarf ändern, bevor Sie es für das Ziel ausführen. Das generierte Transact-SQL-Skript stimmt mit dem Skript überein, das ausgeführt wird, wenn Sie auf Updates schreiben klicken.

      Tipp

      Die Ergebnisse im Fenster Schemavergleich werden von Visual Studio nach Abschluss der Aktion Updates schreiben nicht automatisch aktualisiert. Stattdessen wird die Statusleiste aktualisiert, um Sie darauf hinzuweisen, dass Sie erst auf Aktualisieren klicken müssen. Auf diese Weise können Sie die Schemas noch einmal vergleichen. Dies kann bei umfangreichen Schemas viel Zeit in Anspruch nehmen.

    • Um Änderungen an einer Datei zu speichern, ohne sie im Transact-SQL-Editor anzuzeigen, klicken Sie auf In Datei exportieren.

      Bei dieser Auswahl wird ein Transact-SQL-Skript generiert und unter dem angegebenen Dateinamen gespeichert. Das generierte Skript stimmt mit dem Skript überein, das ausgeführt wird, wenn Sie auf Updates schreiben klicken. Dieses Verfahren empfiehlt sich möglicherweise, wenn eine andere Person das Ziel später mit dem von Ihnen bereitgestellten Skript aktualisiert, oder wenn von einer anderen Person zusätzliche Änderungen am Skript vorgenommen werden müssen.

Vergleichen von Schemas mit VSDBCMD.EXE

Sie möchten ein Bereitstellungsskript für eine Datenbank generieren, für die Sie über keine Zugriffsrechte verfügen. Diese Aufgabe können Sie mit VSDBCMD.EXE ausführen, wenn Sie über die DBSCHEMA-Datei für das Projekt, das Sie bereitstellen möchten, und die DBSCHEMA-Datei verfügen, die den aktuellen Zustand der Zieldatenbank darstellt. Wenn Sie nicht über das Zielschema verfügen, können Sie den Datenbankadministrator darum bitten, dieses mit der zweiten Prozedur in diesem Abschnitt für Sie zu importieren.

Beide Prozeduren können Sie auf jedem Computer ausführen, auf dem das Tool VSDBCMD.EXE und die zugehörigen Hilfsdateien installiert sind. Alle erforderlichen Dateien finden Sie im folgenden Ordner und dessen Unterordnern: %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy. Weitere Informationen finden Sie unter Befehlszeilenverweis für VSDBCMD.EXE (Bereitstellung und Schemaimport).

So vergleichen Sie Schemas an einer Eingabeaufforderung

  1. Öffnen Sie eine Eingabeaufforderung.

  2. Wechseln Sie zum Ordner mit VSDBCMD.EXE.

  3. Geben Sie an der Eingabeaufforderung Folgendes ein: vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:Projektname.dbschema /targetmodelfile:Zieldatenbank.dbschema /DeploymentScriptFile:Ausgabedateiname.sql /p:TargetDatabase="Zieldatenbankname"

    Ersetzen Sie Projektname durch den Namen der DBSCHEMA-Datei, die Sie beim Erstellen des Datenbankprojekts erstellt haben. Ersetzen Sie Zieldatenbank durch den Namen der DBSCHEMA-Datei, die das Schema für die Zieldatenbank enthält. Ersetzen Sie Ausgabedateiname durch den Namen, den Sie dem Bereitstellungsskript geben möchten. Ersetzen Sie Zieldatenbankname durch den Namen der Datenbank, die Sie aktualisieren möchten.

    Tipp

    Wenn Sie das Skript vor der Bereitstellung und das Skript nach der Bereitstellung aus dem Datenbankprojekt einschließen möchten, können Sie der Befehlszeile einen Parameter hinzufügen: /ManifestFile:Projektname.deploymanifest. Die DEPLOYMANIFEST-Datei finden Sie in einem Unterordner des Ordners sql unter dem Projektordner.

  4. Nun können Sie mithilfe der Datei Ausgabedateiname.sql Updates auf dem Zielserver bereitstellen oder den Datenbankadministrator darum bitten.

So importieren Sie das Zielschema

  1. Öffnen Sie eine Eingabeaufforderung.

  2. Wechseln Sie zu dem Ordner, der VSDBCMD.EXE enthält.

  3. Geben Sie an der Eingabeaufforderung folgenden Befehl ein: vsdbcmd.exe /a:Import /dsp:sql /model:Zieldatenbank.dbschema /cs:Verbindungszeichenfolge

    Ersetzen Sie Zieldatenbank durch den Namen der DBSCHEMA-Datei, die Sie aus der Zieldatenbank importieren. Ersetzen Sie Verbindungszeichenfolge durch eine Verbindungszeichenfolge für die Zieldatenbank. Beispielsweise können Sie /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase" angeben.

    Beim Ausführen des Befehls wird die DBSCHEMA-Datei erstellt. Diese enthält die Schemadefinition für die Datenbank, aus der Sie sie importiert haben. Weitere Informationen finden Sie unter Gewusst wie: Importieren eines Schemas aus einer Eingabeaufforderung und Befehlszeilenverweis für VSDBCMD.EXE (Bereitstellung und Schemaimport).

Siehe auch

Aufgaben

Gewusst wie: Vergleichen und Synchronisieren der Daten von zwei Datenbanken

Konzepte

Vergleichen und Synchronisieren von Datenbankschemas

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Informationen zur Verwendung von VSDBCMD.EXE zum Vergleichen von Schemas an einer Eingabeaufforderung hinzugefügt.

Kundenfeedback.