Ich stoße oft auf folgendes Problem.
Ich arbeite an einigen Änderungen an einem Projekt, die neue Tabellen oder Spalten in der Datenbank erfordern. Ich nehme die Datenbankänderungen vor und setze meine Arbeit fort. Normalerweise erinnere ich mich daran, die Änderungen aufzuschreiben, damit sie auf dem Live-System repliziert werden können. Ich erinnere mich jedoch nicht immer daran, was ich geändert habe, und ich erinnere mich nicht immer daran, es aufzuschreiben.
Also mache ich einen Push zum Live-System und bekomme einen großen, offensichtlichen Fehler, dass es keinen gibt NewColumnX
, ugh.
Gibt es ein Versionskontrollsystem für Datenbanken, unabhängig davon, dass dies in dieser Situation möglicherweise nicht die beste Vorgehensweise ist? Die spezifische Datenbanktechnologie ist mir egal. Ich möchte nur wissen, ob es eine gibt. Wenn es mit MS SQL Server funktioniert, dann großartig.
quelle
Antworten:
In Ruby on Rails gibt es ein Konzept für eine Migration - ein schnelles Skript zum Ändern der Datenbank.
Sie generieren eine Migrationsdatei, die Regeln zum Erhöhen der Datenbankversion (z. B. Hinzufügen einer Spalte) und Regeln zum Herabstufen der Version (z. B. Entfernen einer Spalte) enthält. Jede Migration ist nummeriert und eine Tabelle verfolgt Ihre aktuelle Datenbankversion.
Um nach oben zu migrieren , führen Sie einen Befehl namens "db: migrate" aus, der Ihre Version überprüft und die erforderlichen Skripte anwendet. Sie können auf ähnliche Weise nach unten migrieren.
Die Migrationsskripte selbst werden in einem Versionskontrollsystem gespeichert. Wenn Sie die Datenbank ändern, checken Sie ein neues Skript ein, und jeder Entwickler kann es anwenden, um seine lokale Datenbank auf die neueste Version zu bringen.
quelle
Ich bin ein bisschen altmodisch, da ich Quelldateien zum Erstellen der Datenbank verwende. Es gibt tatsächlich zwei Dateien - project-database.sql und project-updates.sql - die erste für das Schema und die persistenten Daten und die zweite für Änderungen. Natürlich stehen beide unter Quellcodeverwaltung.
Wenn sich die Datenbank ändert, aktualisiere ich zuerst das Hauptschema in project-database.sql und kopiere dann die relevanten Informationen in die project-updates.sql, z. B. ALTER TABLE-Anweisungen. Ich kann dann die Aktualisierungen auf die Entwicklungsdatenbank anwenden, testen und iterieren, bis alles gut gemacht ist. Checken Sie dann die Dateien ein, testen Sie sie erneut und wenden Sie sie auf die Produktion an.
Außerdem habe ich normalerweise eine Tabelle in der Datenbank - Config - wie zum Beispiel:
SQL
Dann füge ich dem Update-Bereich Folgendes hinzu:
Das wird
db_version
nur geändert, wenn die Datenbank neu erstellt wird, und diedb_revision
gibt mir einen Hinweis darauf, wie weit von der Basislinie entfernt ist.Ich könnte die Updates in ihren eigenen separaten Dateien aufbewahren, aber ich habe mich dafür entschieden, sie alle zusammen zu mischen und relevante Abschnitte mit Ausschneiden und Einfügen zu extrahieren. Ein bisschen mehr Housekeeping ist angebracht, dh entfernen Sie ':' aus $ Revision 1.1 $, um sie einzufrieren.
quelle
MyBatis (ehemals iBatis) verfügt über ein Schema-Migrations- Tool zur Verwendung in der Befehlszeile. Es ist in Java geschrieben, kann aber mit jedem Projekt verwendet werden.
quelle
Redgate hat ein Produkt namens SQL Source Control . Es lässt sich in TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce und Git integrieren.
quelle
Ich kann SQL Delta nur empfehlen . Ich verwende es nur, um die Diff-Skripte zu generieren, wenn ich mit dem Codieren meiner Funktion fertig bin, und überprüfe diese Skripte in meinem Versionsverwaltungs-Tool (Mercurial :))
Sie haben sowohl eine SQL Server- als auch eine Oracle-Version.
quelle
Ich frage mich, dass niemand das Open-Source-Tool liquibase erwähnt hat, das auf Java basiert und für fast jede Datenbank funktionieren sollte, die jdbc unterstützt. Im Vergleich zu Rails wird XML anstelle von Ruby verwendet, um die Schemaänderungen durchzuführen. Obwohl ich XML für domänenspezifische Sprachen nicht mag, ist der sehr coole Vorteil von XML, dass Liquibase weiß, wie man bestimmte Operationen wie zurücksetzt
Sie müssen sich also nicht selbst darum kümmern
Es werden auch reine SQL-Anweisungen oder Datenimporte unterstützt.
quelle
Die meisten Datenbankmodule sollten das Speichern Ihrer Datenbank in einer Datei unterstützen. Ich weiß, dass MySQL es sowieso tut. Dies ist nur eine Textdatei, sodass Sie diese an Subversion oder was auch immer Sie verwenden senden können. Es wäre auch einfach, ein Diff für die Dateien auszuführen.
quelle
Wenn Sie SQL Server verwenden, ist Data Dude (auch bekannt als Database Edition von Visual Studio) kaum zu übertreffen. Sobald Sie den Dreh raus haben, ist es ein Kinderspiel, einen Schema-Vergleich zwischen Ihrer quellgesteuerten Version der Datenbank und der Version in der Produktion durchzuführen. Und mit einem Klick können Sie Ihre diff DDL generieren.
Es gibt ein Lehr - Video auf MSDN , die sehr hilfreich ist.
Ich kenne DBMS_METADATA und Toad, aber wenn jemand einen Data Dude für Oracle entwickeln könnte, wäre das Leben wirklich süß.
quelle
Lassen Sie Ihre ersten Tabellenanweisungen im Versionscontroller erstellen und fügen Sie dann Tabellenanweisungen hinzu, aber bearbeiten Sie niemals Dateien, sondern ändern Sie nur Dateien, die idealerweise nacheinander benannt sind, oder sogar als "Änderungssatz", damit Sie alle Änderungen für eine bestimmte Bereitstellung finden können.
Der schwierigste Teil, den ich sehen kann, ist das Verfolgen von Abhängigkeiten, z. B. für eine bestimmte Bereitstellungstabelle B muss möglicherweise vor Tabelle A aktualisiert werden.
quelle
Für Oracle verwende ich Toad , mit dem ein Schema auf mehrere diskrete Dateien (z. B. eine Datei pro Tabelle) ausgegeben werden kann. Ich habe einige Skripte, die diese Sammlung in Perforce verwalten, aber ich denke, dass sie in nahezu jedem Revisionskontrollsystem leicht machbar sein sollte.
quelle
Schauen Sie sich das Oracle-Paket DBMS_METADATA an.
Insbesondere sind folgende Methoden besonders nützlich:
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
Sobald Sie mit ihrer Funktionsweise vertraut sind (ziemlich selbsterklärend), können Sie ein einfaches Skript schreiben, um die Ergebnisse dieser Methoden in Textdateien abzulegen, die unter Quellcodeverwaltung gestellt werden können. Viel Glück!
Ich bin mir nicht sicher, ob es für MSSQL etwas so Einfaches gibt.
quelle
Ich schreibe meine DB-Release-Skripte parallel zur Codierung und behalte die Release-Skripte in einem projektspezifischen Abschnitt in SS. Wenn ich den Code ändere, für den eine Datenbankänderung erforderlich ist, aktualisiere ich gleichzeitig das Release-Skript. Vor der Veröffentlichung führe ich das Freigabeskript auf einer sauberen Entwicklungsdatenbank aus (kopierte Struktur aus der Produktion) und führe meine letzten Tests darauf durch.
quelle
Ich habe dies jahrelang hin und her gemacht - Schemaversionen verwalten (oder versuchen, sie zu verwalten). Die besten Ansätze hängen von den Tools ab, über die Sie verfügen. Wenn Sie das Quest Software-Tool "Schema Manager" erhalten, sind Sie in guter Verfassung. Oracle hat ein eigenes, minderwertiges Tool, das auch "Schema Manager" genannt wird (viel verwirrend?), Das ich nicht empfehle.
Ohne ein automatisiertes Tool (siehe andere Kommentare hier zu Data Dude) verwenden Sie Skripte und DDL-Dateien direkt. Wählen Sie einen Ansatz, dokumentieren Sie ihn und befolgen Sie ihn genau. Ich mag die Möglichkeit, die Datenbank jederzeit neu zu erstellen, daher bevorzuge ich einen vollständigen DDL-Export der gesamten Datenbank (wenn ich der DBA bin) oder des Entwicklerschemas (wenn ich im Produkt bin) Entwicklungsmodus).
quelle
PLSQL Developer, ein Tool von All Arround Automations, verfügt über ein Plugin für Repositorys, das mit Visual Source Safe einwandfrei (aber nicht besonders gut) funktioniert.
http://www.allroundautomations.com/plsvcs.html
quelle
Mit ER Studio können Sie Ihr Datenbankschema in das Tool umkehren und es dann mit Live-Datenbanken vergleichen.
Beispiel: Kehren Sie Ihr Entwicklungsschema in ER Studio um - vergleichen Sie es mit der Produktion, und es werden alle Unterschiede aufgelistet. Es kann die Änderungen skripten oder einfach automatisch durchsetzen.
Sobald Sie ein Schema in ER Studio haben, können Sie das Erstellungsskript entweder speichern oder als proprietäre Binärdatei speichern und in der Versionskontrolle speichern. Wenn Sie jemals zu einer früheren Version des Schemas zurückkehren möchten, überprüfen Sie es einfach und übertragen Sie es auf Ihre Datenbankplattform.
quelle
Es gibt ein PHP5 "Datenbankmigrationsframework" namens Ruckusing. Ich habe es nicht verwendet, aber die Beispiele zeigen die Idee, dass Sie nur Quelldateien verfolgen müssen, wenn Sie die Datenbank zum Erstellen der Datenbank nach Bedarf verwenden.
quelle
Sie können Microsoft SQL Server-Datentools in Visual Studio verwenden, um Skripts für Datenbankobjekte als Teil eines SQL Server-Projekts zu generieren. Anschließend können Sie die Skripte mithilfe der in Visual Studio integrierten Quellcodeverwaltungsintegration zur Quellcodeverwaltung hinzufügen. Mit SQL Server-Projekten können Sie außerdem die Datenbankobjekte mithilfe eines Compilers überprüfen und Bereitstellungsskripts generieren, um eine vorhandene Datenbank zu aktualisieren oder eine neue zu erstellen.
quelle
Wir haben MS Team System Database Edition verwendet mit ziemlich gutem Erfolg verwendet. Es lässt sich mehr oder weniger nahtlos in die TFS-Versionskontrolle und Visual Studio integrieren und ermöglicht es uns, gespeicherte Prozesse, Ansichten usw. einfach zu verwalten. Konfliktlösung kann schmerzhaft sein, aber der Versionsverlauf ist abgeschlossen, sobald er abgeschlossen ist. Danach sind Migrationen zur Qualitätssicherung und Produktion äußerst einfach.
Es ist jedoch fair zu sagen, dass es sich um ein Produkt der Version 1.0 handelt und nicht ohne Probleme.
quelle
Schema Compare für Oracle ist ein Tool, das speziell zum Migrieren von Änderungen aus unserer Oracle-Datenbank in eine andere entwickelt wurde. Bitte besuchen Sie die unten stehende URL für den Download-Link, über den Sie die Software für eine voll funktionsfähige Testversion verwenden können.
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
quelle
In Ermangelung eines VCS für Tabellenänderungen habe ich sie in einem Wiki protokolliert. Zumindest kann ich dann sehen, wann und warum es geändert wurde. Es ist alles andere als perfekt, da es nicht jeder tut und wir mehrere Produktversionen verwenden, aber besser als nichts.
quelle
Ich würde einen von zwei Ansätzen empfehlen. Investieren Sie zunächst in PowerDesigner von Sybase. Enterprise Edition. Sie können damit physische Datenmodelle entwerfen und vieles mehr. Es wird jedoch mit einem Repository geliefert, mit dem Sie Ihre Modelle einchecken können. Jedes neue Einchecken kann eine neue Version sein. Es kann jede Version mit jeder anderen Version vergleichen und sogar mit dem, was sich zu diesem Zeitpunkt in Ihrer Datenbank befindet. Anschließend wird eine Liste aller Unterschiede angezeigt und gefragt, welche migriert werden sollen. Anschließend wird das entsprechende Skript erstellt. Es ist nicht billig, aber es ist ein Schnäppchen zum doppelten Preis und der ROI beträgt ungefähr 6 Monate.
Die andere Idee ist, die DDL-Überwachung zu aktivieren (funktioniert in Oracle). Dadurch wird bei jeder Änderung eine Tabelle erstellt. Wenn Sie die Änderungen aus dem Zeitstempel abfragen, in den Sie Ihre Datenbankänderungen zuletzt verschoben haben, um sie jetzt zu erstellen, erhalten Sie eine geordnete Liste aller Aktionen. Einige where-Klauseln zum Eliminieren von Nullsummenänderungen wie create table foo; gefolgt von Drop Table Foo; und Sie können EINFACH ein Mod-Skript erstellen. Warum die Änderungen in einem Wiki behalten, das ist doppelt so viel Arbeit. Lassen Sie sich von der Datenbank verfolgen.
quelle
Zwei Buchempfehlungen: "Refactoring Databases" von Ambler und Sadalage und "Agile Database Techniques" von Ambler.
Jemand erwähnte Rails Migrations. Ich denke, sie funktionieren auch außerhalb von Rails-Anwendungen hervorragend. Ich habe sie in einer ASP-Anwendung mit SQL Server verwendet, die wir gerade auf Rails umstellten. Sie checken die Migrationsskripte selbst in das VCS ein. Hier ist ein Beitrag von Pragmatic Dave Thomas zu diesem Thema.
quelle