Ich suche ein Tool oder ein Open-Source-Projekt, das Datenbank-Update-Skripte auf folgende Weise generieren kann:
Ich muss dies derzeit für eine SQL Server-Datenbank tun.
Der Zweck dieses Tools besteht darin, die Datenbankstruktur regelmäßig zwischen mehreren Instanzen zu synchronisieren.
Windows ist vorzuziehen. Je billiger, desto besser (offensichtlich), idealerweise würde ich gerne ein Open-Source-Projekt finden, das etwas Ähnliches tut. Aber ich habe kein festes Preislimit.
Nein, es gibt kein Tool, mit dem Sie alles tun können, was Sie verlangen, nicht mit 100% Erfolg und nicht mit vollständiger Abdeckung.
Fehlende Teile, also Objekte, die später in einer der Instanzen hinzugefügt werden, sind schwierig genug. Änderungen wie geänderte Namen, geänderte Datentypen, gelöschte Spalten oder Tabellen usw. machen jedoch einen regelmäßigen Vergleich mit der Synchronisierung unmöglich.
Das Vergleichen zweier Datenbankstrukturen wird manchmal als „Unterschiedsvergleiche“ oder „Vergleichen“ bezeichnet, wie in den Unterschiedserkennungsfunktionen von Texteditoren und Textverarbeitungsprogrammen, die Dokumente vergleichen.
Diese Tools sind spezifisch für bestimmte Datenbankprodukte, da jede Implementierung eines echten Datenbankprodukts den Umfang des SQL-Standards bei weitem überschreitet. Und soweit ich gesehen habe, ist keines dieser Tools zu 100 % vollständig, aufgrund der Komplexität bei der Implementierung eines Datenbanksystems.
Diese Tools können einen Bericht über den Unterschied erstellen. Und einige Tools generieren möglicherweise SQL, um Objekte zu erstellen, die in einem definiert sind, aber in dem anderen fehlen. Aber ich warne Sie davor, solche Berichte oder SQL als perfekt oder vollständig zu betrachten.
Die Verwaltung der Änderungen, die im Laufe der Zeit an Ihrer Datenbankstruktur vorgenommen wurden, wird als Datenbankmigrationstool bezeichnet . Der Zweck besteht darin, Ihr Datenbankschema einfach und zuverlässig über alle Ihre Instanzen hinweg weiterzuentwickeln.
Zwei gute in der Java-Welt sind:
Der einfachste Weg, ein solches Tool zu verwenden, befindet sich am Anfang der Datenbank. Anschließend zeichnen Sie jede Änderung des Datenbankschemas als SQL-Skripte auf. Zuerst wird eine zusätzliche Tabelle erstellt, um eine Versionsnummer aufzuzeichnen. Die Skripte können auf jeder Datenbankinstanz ausgeführt werden, um ihr Schema auf den neuesten Stand zu bringen.
Und es gibt Möglichkeiten, ein solches Tool auch für bestehende Datenbanken zu verwenden.
Ich würde den SQL-Vergleich von Redgate wärmstens empfehlen:
http://www.red-gate.com/products/sql-development/sql-compare/
Es scheint die Funktionen zu haben, die Sie brauchen. Ein weiteres ihrer Tools, "Multi Script", würde die Bereitstellung auf mehreren Instanzen ermöglichen:
http://www.red-gate.com/products/dba/sql-multi-script/
Wir verwenden diese seit einiger Zeit und sie sind felsenfest und ziemlich einfach zu handhaben.
Ein bisschen spät, aber ich werde meinen Tipp nur fürs Protokoll hinzufügen: https://www.schemacrawler.com/
Es wird jedoch nicht die SQL-Generierung übernehmen, das müssten Sie selbst tun.
Ich habe die Ausgabe (sowie die Reflexionsinformationen von JPA-Entitäten) als Eingabe für JGraphT (Erstellen eines FK-Diagramms) verwendet, um mithilfe der topologischen Sortierung herauszufinden, wo mit dem Löschen von Zeilen begonnen werden soll, ohne die FK-Einschränkungen zu verletzen. In einer perfekten Datenbankwelt würde Cascade Delete das Problem wohl lösen, aber ...
Holden Mc Grohen
ALTER TABLE xxx ADD COLUMN yyy
). Ich möchte in der Lage sein, automatisch ein einzelnes SQL-Skript zu generieren, das jede Datenbank auf die Struktur meiner lokalen DB aktualisieren würde (Pseudocode:IF COLUMN xxx.yyy NOT EXISTS THEN ALTER TABLE xxx ADD COLUMN yyy
). Ich verstehe, dass eine solche Update-Strategie nicht in 100 % der Fälle funktioniert, aber sie wird für meine Bedürfnisse ausreichen.Basil Bourque