Wie bereiten Sie Ihre SQL-Deltas vor? Speichern Sie jedes schemaänderende SQL manuell in einem Delta-Ordner oder haben Sie eine Art automatisierten Differenzierungsprozess?
Ich interessiere mich für Konventionen zur Versionierung des Datenbankschemas zusammen mit dem Quellcode. Vielleicht ein Pre-Commit-Hook, der das Schema unterscheidet?
Welche Optionen für unterschiedliche Deltas gibt es neben DbDeploy ?
BEARBEITEN: Wenn ich die Antworten sehe, möchte ich klarstellen, dass ich mit dem Standardschema für die Ausführung einer Datenbankmigration mit Deltas vertraut bin. Meine Frage ist, die Deltas selbst zu erstellen, vorzugsweise automatisch.
Die Versionierung gilt auch für PHP und MySQL, wenn es einen Unterschied macht. (Keine Ruby-Lösungen bitte).
quelle
Antworten:
Sehen
Gibt es ein Versionskontrollsystem für Änderungen der Datenbankstruktur?
Wie versioniere ich meine MS SQL-Datenbank in SVN?
und Jeffs Artikel
Holen Sie sich Ihre Datenbank unter Versionskontrolle
Ich fühle deinen Schmerz und ich wünschte, es gäbe eine bessere Antwort. Dies könnte näher an dem liegen, wonach Sie gesucht haben.
Mechanismen zum Verfolgen von DB-Schemaänderungen
Im Allgemeinen habe ich das Gefühl, dass es keine adäquate, akzeptierte Lösung dafür gibt, und ich rolle meine eigene in diesem Bereich.
quelle
Sie könnten sich einen anderen, ähnlichen Thread ansehen: Wie versioniere ich meine MS SQL-Datenbank in SVN? .
quelle
Wenn Sie noch nach Optionen suchen: Schauen Sie sich neXtep Designer an. Es ist eine kostenlose GPL-Datenbankentwicklungsumgebung, die auf den Konzepten der Versionskontrolle basiert. In der Umgebung arbeiten Sie immer mit versionierten Entitäten und können sich auf die Entwicklung des Datenmodells konzentrieren. Sobald eine Veröffentlichung abgeschlossen ist, kann die am Versionskontrollsystem angeschlossene SQL-Generierungs-Engine jedes benötigte Delta zwischen zwei Versionen generieren und bietet Ihnen bei Bedarf einen Bereitstellungsmechanismus.
Unter anderem können Sie Ihre Datenbank während der Entwicklung synchronisieren und rückwärts synchronisieren, Datenmodelldiagramme erstellen, Ihre Datenbank mit integrierten SQL-Clients abfragen usw.
Weitere Informationen finden Sie im Wiki: http://www.nextep-softwares.com/wiki
Es unterstützt derzeit Oracle, MySql und PostgreSql und ist in Java, sodass das Produkt unter Windows, Linux und Mac ausgeführt werden kann.
quelle
Ich stelle sicher, dass Schemaänderungen immer additiv sind. Ich lasse also keine Spalten und Tabellen fallen, da dies die Daten zappen würde und später nicht zurückgesetzt werden kann. Auf diese Weise kann der Code, der die Datenbank verwendet, zurückgesetzt werden, ohne dass Daten oder Funktionen verloren gehen.
Ich habe ein Migrationsskript, das Anweisungen enthält, die Tabellen und Spalten erstellen, wenn sie noch nicht vorhanden sind, und sie mit Daten füllen.
Das Migrationsskript wird immer dann ausgeführt, wenn der Produktionscode aktualisiert wird und nach Neuinstallationen.
Wenn ich etwas löschen möchte, entferne ich es aus dem Datenbankinstallationsskript und dem Migrationsskript, damit diese veralteten Schemaelemente bei Neuinstallationen schrittweise auslaufen. Mit dem Nachteil, dass Neuinstallationen vor der Installation nicht auf eine ältere Version heruntergestuft werden können.
Und natürlich führe ich DDLs über diese Skripte aus und niemals direkt in der Datenbank, um die Dinge synchron zu halten.
quelle
Ich schaffe keine Deltas. Ich nehme Änderungen an einer Master-Datenbank vor und habe ein Tool, das ein XML-basiertes Build-Skript basierend auf der Master-Datenbank erstellt.
Wenn es darum geht, eine vorhandene Datenbank zu aktualisieren, habe ich ein Programm, das das XML-basierte Build-Skript verwendet, um eine neue Datenbank und die nackten Tabellen zu erstellen. Ich kopiere dann die Daten aus der alten Datenbank mit INSERT INTO x SELECT FROM y und wende dann alle Indizes, Einschränkungen und Trigger an.
Neue Tabellen, neue Spalten und gelöschte Spalten werden automatisch behandelt. Mit ein paar kleinen Tricks zum Anpassen der Kopierroutine kann ich Spaltenumbenennungen, Änderungen des Spaltentyps und andere grundlegende Umgestaltungen vornehmen.
Ich würde diese Lösung nicht für eine Datenbank mit einer großen Datenmenge empfehlen, aber ich aktualisiere regelmäßig eine Datenbank mit mehr als 1 GB und 400 Tabellen.
quelle
Sie haben nicht erwähnt, welches RDBMS Sie verwenden, aber wenn es sich um MS SQL Server handelt, war der SQL-Vergleich von Red-Gate für uns bei der Erstellung von Deltas zwischen Skripten zur Objekterstellung unverzichtbar.
quelle
Ich bin nicht derjenige, der mein eigenes Horn betätigt, aber ich habe eine interne Web-App entwickelt, um Änderungen an Datenbankschemata zu verfolgen und versionierte Update-Skripte zu erstellen.
Dieses Tool heißt Brazil und ist jetzt Open Source unter einer MIT-Lizenz. Brasilien basiert auf Ruby / Ruby on Rails und unterstützt die Bereitstellung von Änderungen in jeder von Ruby DBI unterstützten Datenbank (MySQL, ODBC, Oracle, Postgres, SQLite).
Die Unterstützung für die Versionskontrolle der Update-Skripte ist geplant.
quelle
http://bitbucket.org/idler/mmp - Schema-Versionierungstool für MySQL, geschrieben in PHP
quelle
Wir exportieren die Daten in ein portables Format (mithilfe unserer Toolchain) und importieren sie dann in ein neues Schema. Delta SQL ist nicht erforderlich. Sehr empfehlenswert.
quelle
Ich verwende die Firebird- Datenbank für die meisten Entwicklungen und das FlameRobin- Verwaltungstool. Es hat eine schöne Option, um alle Änderungen zu protokollieren. Es kann alles in einer großen Datei oder einer Datei pro Datenbankänderung protokollieren. Ich verwende diese zweite Option und speichere dann jedes Skript in einer Versionskontrollsoftware. Früher habe ich Subversion verwendet, jetzt verwende ich Git.
Ich gehe davon aus, dass Sie ein MySQL-Tool finden können, das dieselbe Protokollierungsfunktion wie FlameRobin für Firebird hat.
In einer der Datenbanktabellen speichere ich die Versionsnummer der Datenbankstruktur, damit ich jede Datenbank problemlos aktualisieren kann. Ich habe auch ein einfaches PHP-Skript geschrieben, das diese SQL-Skripte einzeln in jeder Zieldatenbank ausführt (Datenbankpfad und Benutzername / Passwort werden in der Befehlszeile angegeben).
Es gibt auch eine Option zum Protokollieren aller DML-Anweisungen (Einfügen, Aktualisieren, Löschen), die ich aktiviere, während ich einige 'Standard'-Daten ändere, die jede Datenbank enthält.
Ich habe ein schönes Whitepaper darüber geschrieben, wie ich das alles im Detail mache. Sie können das Papier im PDF-Format zusammen mit Demo-PHP-Skripten von hier herunterladen .
quelle
Ich habe auch eine Reihe von PHP-Skripten entwickelt, mit denen Entwickler ihre deltasql-Skripte an ein zentrales Repository senden können.
In einer der Datenbanktabellen (TBSYNCHRONIZE) speichere ich die Versionsnummer des zuletzt ausgeführten Skripts, sodass ich jede Datenbank einfach über die Webschnittstelle oder einen speziell für Eclipse entwickelten Client aktualisieren kann.
Über die Weboberfläche können mehrere Projekte verwaltet werden. Es unterstützt auch Datenbank "Zweige".
Sie können die Anwendung unter http://www.gpu-grid.net/deltasql testen (wenn Sie sich als Administrator mit dem Kennwort testdbsync anmelden). Die Anwendung ist Open Source und kann hier heruntergeladen werden: http://sourceforge.net/projects/deltasql
deltasql wird in der Schweiz und in Indien produktiv eingesetzt und ist in Japan beliebt.
quelle
Vor einigen Monaten suchte ich nach einem Tool zur Versionierung des MySQL-Schemas. Ich fand viele nützliche Tools, wie Doctrine Migration, RoR Migration, einige Tools, die in Java und Python geschrieben wurden.
Aber keiner von ihnen hat meine Anforderungen erfüllt.
Meine Anforderungen:
Ich habe angefangen, mein Migrationstool zu schreiben, und heute habe ich eine Beta-Version.
Bitte versuchen Sie es, wenn Sie Interesse an diesem Thema haben. Bitte senden Sie mir zukünftige Anfragen und Fehlerberichte.
Quellcode: bitbucket.org/idler/mmp/src Übersicht auf Englisch: bitbucket.org/idler/mmp/wiki/Home Übersicht auf Russisch: antonoff.info/development/mysql-migration-with-php-project
quelle
Ich benutze http://code.google.com/p/oracle-ddl2svn/
quelle
Ich interessiere mich auch für dieses Thema.
Es gibt einige Diskussionen zu diesem Thema im Django-Wiki .
Interessanterweise sieht es so aus, als ob in CakePHP die Schemaversionierung mit dem
cake schema generate
Befehl just integriert ist .quelle
Für MySQL
Wenn ich auf einer neuen DB lande:
Zuerst überprüfe ich die Struktur:
In einem zweiten Schritt überprüfe ich Daten Tabelle für Tabelle mit
mysqldiff
. Es ist ein bisschen archaisch, aber eine PHP-Schleife, die aufinformation_schema
Daten basiert, macht den Job sicherFür die Versionierung verwende ich die gleiche Methode, formatiere jedoch ein SQL-Aktualisierungsskript (zum Aktualisieren oder Zurücksetzen) mit unterschiedlichen Ergebnissen und verwende die Versionsnummernkonvention (bei mehreren Änderungen sieht die Versionsnummer wie eine IP-Adresse aus) .
quelle
Ich verwende eine strikte Versionierung des Datenbankschemas (in einer separaten Tabelle nachverfolgt). Skripte werden in der Versionskontrolle gespeichert, aber alle überprüfen die aktuelle Schemaversion, bevor sie Änderungen vornehmen.
Hier ist die vollständige Implementierung für SQL Server (dieselbe Lösung kann bei Bedarf für MySQL entwickelt werden): So pflegen Sie die Version des SQL Server-Datenbankschemas
quelle
Nach langen Nachforschungen stellte ich fest, dass es einige Tools von Drittanbietern oder Visual Studio-Projekttypen gibt, die mich nicht zufrieden stellen, oder nur Blogs über die Theorie, aber keine Implementierung. Also habe ich ein funktionierendes System implementiert, das fast ein Jahr lang verwendet wird, und hier erklärt:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
Je nach Interesse wird weiter mehr geschrieben.
quelle