Gewusst wie: Vergleichen von verschiedenen Datenbankdefinitionen mithilfe des Schemavergleichs

SQL Server Data Tools (SSDT) enthält ein Hilfsprogramm für den Schemavergleich, mit dem Sie zwei Datenbankdefinitionen vergleichen können. Bei der Quelle und dem Ziel des Vergleichs kann es sich um eine beliebige Kombination von verbundener Datenbank, SQL Server-Datenbankprojekt bzw. -Momentaufnahme oder DACPAC-Datei handeln. Die Ergebnisse des Vergleichs werden als Satz von Aktionen angezeigt, die für das Ziel ausgeführt werden müssen, damit es mit der Quelle identisch ist. Nach Abschluss des Vergleichs können Sie das Ziel direkt aktualisieren (wenn das Ziel ein Projekt oder eine Datenbank ist) oder ein Updateskript generieren, das den gleichen Zweck erfüllt.

Die Unterschiede zwischen Quelle und Ziel werden zur einfachen Überprüfung in einem Raster angezeigt. Sie können einen Drilldown auf die einzelnen Unterschiede im Ergebnisraster oder im Skriptformular ausführen und sie überprüfen. Anschließend können Sie bestimmte Unterschiede selektiv ausschließen.

Sie können Vergleiche als Teil eines SQL Server-Datenbankprojekts oder als eigenständige Datei speichern. Sie können außerdem Optionen festlegen, mit denen der Bereich des Vergleichs und Aspekte des Updates gesteuert werden. Anschließend können Sie den Vergleich speichern, sodass Sie denselben Vergleich später einfach wiederholen oder als Ausgangspunkt für einen neuen Vergleich verwenden können.

Warnung

Beim Angeben eines Projekts als Ziel für den Vergleich beträgt die unterstützte Pfadlänge für das Projekt (ohne Laufwerkbuchstabe, Doppelpunkt und führenden umgekehrten Schrägstrich) maximal 256 Zeichen. Wenn der Projektpfad 256 Zeichen überschreitet, sind Sie immer noch in der Lage, das zugehörige Schema mit einer Datenbank oder einem anderen Projekt zu vergleichen. Sie können jedoch das Schema nicht aktualisieren.

In der folgenden Prozedur wird das Schema eines Datenbankprojekts mit einer verbundenen Datenbank verglichen. Es werden Entitäten verwendet, die in vorherigen Vorgehensweisen in den Abschnitten Tabellen und Beziehungen verwalten und Fehler beheben sowie Entwicklung projektorientierter Offlinedatenbanken erstellt wurden.

Vergleichen von Datenbankdefinitionen

  1. Wählen Sie im Menü Extras erst SQL Server und dann Neuer Schemavergleich aus.

    Sie können auch im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt TradeDev klicken und Schemavergleich auswählen.

    Das Fenster Schemavergleich wird geöffnet, und Visual Studio weist diesem automatisch einen Namen zu, z.B. SqlSchemaCompare1.

    Direkt unter der Symbolleiste des Fensters Schemavergleich werden zwei Dropdownmenüs angezeigt, zwischen denen sich ein grüner Pfeil befindet. In diesen Menüs können Sie Datenbankdefinitionen für die Quelle und das Ziel des Vergleichs auswählen.

  2. Wählen Sie im Dropdownmenü Quelle auswählen die Option Quelle auswählen aus. Das Dialogfeld Quellschema auswählen wird geöffnet.

    Wenn Sie das Fenster Schemavergleich durch Klicken mit der rechten Maustaste auf den Projektnamen geöffnet haben, ist das Quellschema bereits aufgefüllt, und Sie können mit Schritt 4 fortfahren.

  3. Aktivieren Sie das Optionsfeld Projekt, und wählen Sie dann das Datenbankprojekt TradeDev aus, das Sie im vorherigen Verfahren erstellt haben.

  4. Wählen Sie im Dropdownmenü Ziel auswählen des Fensters Schemavergleich die Option Ziel auswählen aus. Daraufhin wird das Dialogfeld Zielschema auswählen geöffnet. Wählen Sie im Abschnitt Schema das Optionsfeld Datenbank aus. Wählen Sie anschließend die Schaltfläche Neue Verbindung aus.

  5. Geben Sie im Dialogfeld Verbindungseigenschaften den Namen des Servers ein, auf dem sich die Datenbank TradeDev befindet. Stellen Sie sicher, dass richtige Anmeldeinformationen zur Authentifizierung angegeben sind. Wählen Sie dann im Feld Mit Datenbank verbinden die Datenbank TradeDev und dann OK aus.

    Sie können auch auf der Symbolleiste des Fensters Schemavergleich die Schaltfläche Optionen auswählen, um die miteinander zu vergleichenden Objekte, die zu ignorierenden Unterschiede und weitere Einstellungen anzugeben.

  6. Wählen Sie auf der Symbolleiste des Fensters Schemavergleich die Schaltfläche Vergleichen aus, um den Vergleichsvorgang zu starten.

    Bei Abschluss des Vergleichs werden im oberen Teil des Fensters im Ergebnisbereich die strukturellen Unterschiede zwischen dem Projekt und der Datenbank angezeigt. In den Vergleichsergebnissen sind standardmäßig alle Unterschiede nach Aktion (z. B. "Löschen", "Ändern" oder "Hinzufügen") gruppiert. Im Ergebnisbereich wird eine Zeile für jedes Datenbankobjekt angezeigt, das sich in den Datenbankdefinitionen unterscheidet. In jeder Zeile werden das Objekt im Quell- oder Zielschema (oder in beiden Schemas) und die für das Zielschema auszuführende Aktion angegeben, durch die das Zielobjekt mit dem Quellobjekt identisch wird. Wenn ein Objekt umgestaltet und entweder umbenannt oder in ein neues Schema verschoben wurde, sind der Quell- und Zielname unterschiedlich, und der Quellname wird fett formatiert angezeigt, um den Unterschied hervorzuheben.

    Standardmäßig werden in der Ergebnisliste Objekte ausgeblendet, die in beiden Schemas gleich sind oder deren Update nicht unterstützt wird (z. B. integrierte Objekte). Sie können auf der Symbolleiste die entsprechenden Filterschaltflächen auswählen, um diese Objekte anzuzeigen.

    Um die Gruppierungseinstellung zu ändern, wählen Sie auf der Symbolleiste die Dropdownliste Ergebnisse gruppieren aus. Wählen Sie Typ aus, um die Ergebnisse nach Objekttyp (z.B. nach Tabellen, Sichten oder gespeicherten Prozeduren) zu gruppieren.

  7. Suchen Sie in der Gruppe Products die Tabelle Tables. Wählen Sie die Zeile aus, und im Bereich Objektdefinitionen werden die Quell- und Zieldefinition der Tabelle angezeigt und die Unterschiede hervorgehoben. Sie können auch im Bereich Ergebnisse die Tabellenzeile Products erweitern, um die Elemente in der Tabelle zu untersuchen, die unterschiedlich sind.

  8. Standardmäßig sind im Anwendungsbereich der Aktion "Ziel aktualisieren" alle Unterschiede enthalten. Sie können Unterschiede ausschließen, die nicht synchronisiert werden sollen. Hierzu deaktivieren Sie in der Mitte jeder Zeile die Spalte Aktion. Sie können auch im Bereich „Schema“ mit der rechten Maustaste auf eine Zeile klicken und Ausschließen auswählen. Die Zeile wird sofort ausgegraut. Beim Aktualisieren der Zieldatenbank wird diese Zeile bei ausstehenden Änderungen nicht berücksichtigt.

    Sie können auch mit der rechten Maustaste auf eine Gruppenzeile klicken und Alle ausschließen oder Alle einschließen auswählen. Dies entspricht dem Markieren bzw. Aufheben der Markierung aller Unterschiede in der Gruppe. Wenn Sie Ergebnisse nach Schema gruppieren, empfiehlt sich dieses Verfahren, um alle Änderungen an einem bestimmten Schema einzuschließen oder auszuschließen.

    • Wenn die ausgeschlossene Zeile über abhängige Objekte verfügt (z.B. eine Tabellen-Zeile, auf die von einer Sicht-Zeile verwiesen wird), wird die ausgeschlossene Zeile deaktiviert, jedoch nicht das zugehörige Kontrollkästchen. Wenn alle davon abhängigen Zeilen deaktiviert wurden, wird auch das Kontrollkästchen der deaktivierten Zeile deaktiviert. Wenn eine Zeile außerdem umgestaltet (umbenannt oder in ein anderes Schema verschoben) wird, werden das Kontrollkästchen für die Zeile und alle abhängigen untergeordneten Zeilen deaktiviert.

      Wenn Sie den Vergleich aktualisieren, werden diese zu überspringenden Unterschiede ignoriert.

    • Wenn Sie SQLCMD-Variablen verwenden, verwendet das Schemavergleichstool lokale Werte in Ihren Projekteigenschaften, und Standardwerte werden ignoriert. Weitere Informationen finden Sie unter Datenbankprojekteinstellungen.

Sie haben zwei Optionen zum Aktualisieren des Schemas der Zieldatenbank. Sie können das Ziel direkt über das Fenster Schemavergleich aktualisieren, wenn das Ziel eine Datenbank oder ein Projekt ist, oder Sie können ein Updateskript generieren, wenn das Ziel eine Datenbank oder Datenbankdatei ist. Ein generiertes Skript wird im Transact-SQL-Editor angezeigt. Dort können Sie das Skript untersuchen und für eine Datenbank ausführen. Diese Optionen werden in den folgenden Prozeduren ausführlicher beschrieben.

Warnung

Das Update schlägt fehl, weil durch die Änderung eine Spalte von NOT NULL in NULL geändert wird und dies zu Datenverlust führt. Wenn Sie mit dem Update fortfahren möchten, wählen Sie auf der Symbolleiste für „Schemavergleich“ die Schaltfläche Optionen aus (die fünfte Schaltfläche von links), und deaktivieren Sie die Option Inkrementelle Bereitstellung bei Datenverlust blockieren.

Vergleichen von 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:

    Tools.SSDTNewSchemaComparison
    

Ausführen eines direkten Updates im Fenster „Schemavergleich“

  1. Wählen Sie auf der Symbolleiste für das Fenster „Schemavergleich“ die Schaltfläche Aktualisieren aus.

  2. Untersuchen Sie das generierte Änderungsskript. Sie können das Skript speichern, indem Sie im Menü "Datei" die Option "Neu" auswählen. Dies kann nützlich sein, wenn Sie nicht berechtigt sind, eine Produktionsdatenbank zu aktualisieren. In einem solchen Fall können Sie das Skript zur späteren Bereitstellung an einen Datenbankadministrator übermitteln.

  3. Wenn Sie über die erforderliche Berechtigung zum Aktualisieren der Datenbank verfügen, wählen Sie auf der Symbolleiste des Bearbeitungsbereichs die Schaltfläche Abfrage ausführen aus, um das Skript auszuführen.

Aktualisieren mithilfe eines Skripts

  1. Wählen Sie auf der Symbolleiste für das Fenster Schemavergleich die Schaltfläche Skript generieren aus (die vierte Schaltfläche von links).

    Das generierte Skript wird in einem neuen Transact-SQL-Editor-Fenster geöffnet.

    Warnung

    Dieses Verhalten wird nur von .dacpac-Dateien unterstützt, die durch SSDT-Momentaufnahmen erzeugt werden. Sie können zu diesem Zeitpunkt keine .dacpac-Datei als Ziel auswählen, die von den SQL Server-Datenebenenanwendungs-Tools (DAC) oder dem SQL Server-Datenebenenanwendungs-Framework erzeugt wurden.

  2. Untersuchen Sie das generierte Änderungsskript. Sie können das Skript mit dem Menübefehl Datei/Speichern oder Datei/Speichern unter speichern.

    Ein gespeichertes Skript kann nützlich sein, wenn Sie nicht berechtigt sind, eine Produktionsdatenbank zu aktualisieren. In einem solchen Fall können Sie das Skript zur späteren Bereitstellung an einen Datenbankadministrator übermitteln.

    Alternativ können Sie eine Verbindung zwischen dem Transact-SQL-Editor und einem entsprechenden Server herstellen und das Skript direkt ausführen. Bevor Sie diese Prozedur ausführen, müssen Sie über die Berechtigung zum Erstellen oder Aktualisieren der Datenbank verfügen. Wenn Sie über die erforderliche Berechtigung zum Aktualisieren der Datenbank verfügen, wählen Sie auf der Symbolleiste des Bearbeitungsbereichs die Schaltfläche Abfrage ausführen aus, um das Skript auszuführen.

  3. Wählen Sie die Schaltfläche Verbinden aus. Hierdurch wird entweder eine Verbindung mit dem aktuellen Server hergestellt, oder Sie werden im Dialogfeld „Verbindung mit Server herstellen“ aufgefordert, einen Server einzugeben oder auszuwählen. Der Datenbankname ist im Skript als Befehlsvariable definiert.

  4. Überprüfen Sie das Skript, und nehmen Sie ggf. Änderungen an den Befehlsvariablen vor, die den Namen der Zieldatenbank sowie das zugehörige Präfix und die Dateipfade definieren.

  5. Wählen Sie auf der Symbolleiste des Bearbeitungsbereichs die Schaltfläche Ausführen aus, um das Skript auszuführen.

Siehe auch