Gibt es eine Möglichkeit, die Unterschiede in zwei SQL Server-Datenbanken zu finden (nur Schema). Einer ist lokal und der zweite ist beim Kunden vor Ort. Es treten Probleme mit Crystal Reports-Berichten auf, in denen einige Berichte ausgeführt werden, und einige Codes werden nicht ausgeführt, und es scheint, dass die Schemas nicht übereinstimmen.
Kann ich denselben Befehl für beide Datenbanken ausführen und die Ergebnisse vergleichen, um festzustellen, wo die Unterschiede liegen?
sql-server
sql-server-2008-r2
schema
user1571430
quelle
quelle
Antworten:
Wenn Sie eines der vielen Tools aufgrund von Verbindungsproblemen nicht verwenden können und einen "Offline" -Vergleich wünschen, können Sie mit SSMS Skripte für alle Datenbankobjekte generieren, indem Sie mit der rechten Maustaste auf die Datenbank klicken und "Aufgaben ... / Generieren" verwenden "Skripte", und stellen Sie sicher, dass Sie eine Datei pro Objekt erstellen.
Wenn Sie dies für beide Datenbanken getan haben, laden Sie die beiden Skriptsätze in zwei separaten Ordnern auf einen lokalen Computer und vergleichen Sie sie mit WinMerge (oder einem ähnlichen Programm).
quelle
Eine andere Option ist die Verwendung von SQL Server Data Tools (SSDT), einer Erweiterung von Visual Studio. Sie können Ihr Datenbankschema als .dacpac-Datei extrahieren und mit einer anderen .dacpac-Datei oder einer vorhandenen Datenbank vergleichen. SSDT ist in den SQL Server 2012-Clienttools enthalten und daher ziemlich leicht zugänglich. Die vollständigen Anweisungen zum Ausführen des Vergleichs finden Sie auf der MSDN-Site .
quelle
Nachdem ich mit einer einfachen Möglichkeit zu kämpfen hatte, dieselbe Aufgabe zu erledigen, habe ich das folgende SQL-Skript geschrieben, das zwei Schemata vergleicht, um neue und gelöschte Spalten zu ermitteln
quelle
Wenn Sie mehr als eine Datenbankdatei vergleichen müssen, können Sie ein Skript erstellen
SQLPackage.exe
.Ich habe keinen Arbeitscode für Sie, aber Sie können sich in der Dokumentation zu SQLPackage.exe inspirieren lassen.
Sie extrahieren Ihre master-Datenbank in eine Dacpac-Datei und vergleichen die Dacpac-Datei dann mit dem Rest Ihrer Datenbanken. Das Ergebnis des Vergleichs kann entweder ein XML-Bericht der Änderungen oder eine .sql-Datei sein, die Sie zum Synchronisieren der Datenbanken ausführen können.
Etwas wie das:
und dann
Sie können auf einen Blick dieser Artikel oder diese ein für Beispielcode.
quelle
Wenn Sie nach "SQL Server Compare" suchen, werden Sie viele Tools finden. Die, die wir in meinem Job verwenden, ist Red Gate SQLCompare . Es hat eine 14-tägige Testversion. Aber da Sie über zwei verschiedene Umgebungen sprechen, denke ich, dass dies für Sie nicht funktionieren würde, es sei denn, der Client sendet Ihnen eine Sicherungskopie seiner Datenbank. Die andere Möglichkeit besteht darin, Abfragen für die Systemtabellen zu schreiben (z. B. sys.indexes, sys.tables usw.).
quelle
Am einfachsten ist es , ein für diesen Zweck erstelltes automatisiertes Tool zu verwenden . Wenn Sie jedoch keinen Zugriff auf eines haben, können Sie alle grundlegenden Informationen, die Sie benötigen, aus den
INFORMATION_SCHEMA
Ansichten abrufen.Die Verwendung der Metadaten in
INFORMATION_SCHEMA
ist wahrscheinlich eine einfachere Option als das Generieren von DDL-Skripten und das Durchführen eines Quellenvergleichs, da Sie viel mehr Kontrolle darüber haben, wie die Daten dargestellt werden. Sie können die Reihenfolge, in der die Objekte in einer Datenbank angezeigt werden, nicht wirklich steuern. Außerdem enthalten die Skripte eine Reihe von Text, der möglicherweise standardmäßig implementierungsabhängig ist und eine Menge "Rauschen" verursacht, wenn Sie sich wahrscheinlich wirklich auf eine fehlende Tabelle, Ansicht oder Spalte oder möglicherweise einen Spaltendatentyp konzentrieren müssen oder Größeninkongruenz.Schreiben Sie eine Abfrage (oder Abfragen), um die für Ihren Code
INFORMATION_SCHEMA
wichtigen Informationen aus den Ansichten abzurufen, und führen Sie sie auf jedem SQL Server von SSMS aus. Sie können dann entweder die Ergebnisse in eine Datei sichern und ein Textdatei-Vergleichstool (sogar MS Word) verwenden oder die Ergebnisse in Tabellen sichern und SQL-Abfragen ausführen, um Unstimmigkeiten zu finden.quelle
Ich füge diese Antwort hinzu, um eine neue Frage zu beantworten, die als Duplikat markiert wurde.
Ich musste einmal zwei Produktionsdatenbanken vergleichen und alle möglichen Schemaunterschiede zwischen ihnen finden. Die einzigen interessanten Elemente waren Tabellen, die hinzugefügt oder gelöscht wurden, und Spalten, die hinzugefügt, entfernt oder geändert wurden. Ich habe nicht mehr die SQL-Skripte, die ich entwickelt habe, aber was folgt, ist die allgemeine Strategie. Und die Datenbank war nicht SQL Server, aber ich denke, die gleiche Strategie gilt.
Zuerst habe ich eine Metadatenbank erstellt, die am besten als Metadatenbank beschrieben werden kann. Die Benutzertabellen dieser Datenbank enthielten Datenbeschreibungen, die aus den Systemtabellen der Produktionsdatenbanken kopiert wurden. Dinge wie Tabellenname, Spaltenname, Datentyp und Genauigkeit. Es gab ein weiteres Element, den Datenbanknamen, das in keiner der Produktionsdatenbanken vorhanden war.
Als Nächstes entwickelte ich Skripte, die Auswahlen aus den Systemtabellen der Produktionsdatenbanken mit Einfügungen in die Benutzertabellen der Metadatenbank koppelten.
Schließlich entwickelte ich Abfragen, um Tabellen zu finden, die in einer Datenbank vorhanden waren, aber nicht in der anderen, sowie Spalten aus Tabellen in beiden Datenbanken, die sich nur in einer Datenbank befanden, und Spalten mit inkonsistenten Definitionen zwischen den beiden Datenbanken.
Aus etwa 100 Tabellen und 600 Spalten habe ich eine Handvoll Inkonsistenzen gefunden, und eine Spalte wurde als Gleitkomma in einer Datenbank und eine Ganzzahl in der anderen definiert. Letzteres erwies sich als Glücksfall, da es ein Problem aufdeckte, das eine der Datenbanken seit Jahren plagte.
Das Modell für die Metadatenbank wurde von den betreffenden Systemtabellen vorgeschlagen. Die Abfragen waren nicht schwer zu konstruieren, drehten sich hauptsächlich um group by und hatten count (Datenbankname) = 1.
In Ihrem Fall möchten Sie mit 700 Produktionsdatenbanken die ersten beiden Schritte möglicherweise mehr automatisieren als mit nur zwei zu vergleichenden Datenbanken. Aber die Idee ist ähnlich.
quelle
Ich hatte genau die gleiche Frage und glaube, dass das Microsoft SQL Server Management Studio (SSMS) eine viel einfachere Lösung hat als alles, was ich hier gesehen habe. Ich habe eine Produktionsstätte mit MS SQL Server Express und in Kürze weitere, in denen ich VisualStudio oder andere Anwendungen außer SSMS nicht installieren möchte.
Klicken Sie also in SSMS mit der rechten Maustaste auf die Datenbank, um das Schema für zu erhalten. Wählen Sie Tasks> Generate Scripts ... , um einen Assistenten zu öffnen, mit dem Sie das Schema und die Konfiguration für die gesamte Datenbank (oder ausgewählte Objekte, wenn Sie möchten) skripten können. Ich habe alle Standardoptionen mit Ausnahme des Pfads / Dateinamens beibehalten, aber das Tool verfügt über eine Vielzahl von Optionen. Der Assistent hat eine SQL erstellt, die ich über OneDrive zurück auf meinen PC kopiert habe. Ich habe dann Notepad ++ verwendet, um das SQL mit einer Datei zu vergleichen, die auf die gleiche Weise mit meiner SIT-Datenbank erstellt wurde. Sie müssen Treffer aus Datum und Uhrzeit in Kommentaren herausfiltern, ansonsten ist dies ein großartiger Vergleich der beiden Datenbanken.
Presto! Das aufzuschreiben war bedeutend schwieriger als der eigentliche Vergleich.
quelle
Ein großartiges Tool, das ich benutze (obwohl es schon eine Weile nicht mehr aktualisiert wurde), ist AdeptSqlDiff
Werden sowohl Schema- als auch Datenvergleiche durchgeführt? Genau wie bei RedGate gibt es eine kostenpflichtige, aber auch eine 30-Tage-Testversion. Und der Preis ist ziemlich vernünftig.
quelle
Vielleicht kann Ihnen dieses kostenlose Skript https://github.com/dlevsha/compalex helfen. Es unterstützt Microsoft SQL Server.
Sie können die Demo hier ausprobieren
http://demo.compalex.net/
quelle
Es gibt viele Tools von Drittanbietern, die Schema- und Datenvergleiche sowie Synchronisierungen durchführen. Zwei Tools, die Sie verwenden können, sind diejenigen, die mein Team und ich entwickelt haben: xSQL Schema Compare für Schemavergleiche und xSQL Data Compare für Datenvergleiche zwischen Objekten mit demselben Schema. Hoffe das hilft!
Haftungsausschluss: Ich bin mit xSQL verbunden
quelle
Es gibt viele Tools auf dem Markt, mit denen Sie Ihre Arbeit erledigen können. Mein Unternehmen verwendet ApexSQL Diff sowohl zum Vergleichen als auch zum Synchronisieren, da es für Azure kostenlos ist, aber Sie können weder mit Devart- noch mit Redgate-Tools etwas falsch machen.
quelle
Ich bin ein Fan von SQL DBDiff , einem Open Source-Tool, mit dem Sie Tabellen, Ansichten, Funktionen, Benutzer usw. von zwei Instanzen von SQL Server-Datenbanken vergleichen und ein Änderungsskript zwischen der Quell- und der Zieldatenbank erstellen können.
quelle
Ich habe ein MssqlMerge- Dienstprogramm erstellt, mit dem Sie sowohl die Struktur als auch die Daten von MSSQL-Datenbanken vergleichen können. Es ist eine kostenlose Version verfügbar, mit der Tabellendefinitionen, Ansichten, gespeicherte Prozeduren und Funktionen verglichen werden können. Außerdem gibt es eine Pro-Version, die mehr Objekttypen unterstützt und über die Funktion "Abfrageergebnisvergleich" verfügt, mit der Sie Abfrageergebnisse, einschließlich Abfragen, mit Systemansichten ausführen und vergleichen können, um einige andere, nicht sofort verfügbare Details zu vergleichen.
quelle
Überprüfen Sie dies heraus:
quelle
Ich benutze dieses kostenlose (und Open Source) Tool: OpenDBDiff
quelle
DBDiff ist dafür das beste Tool, das Sie hier finden .
quelle