Wie kann eine Gruppe Datenbankschemaänderungen verfolgen?


67

Welche Methoden zur Versionskontrolle helfen Teams, Änderungen am Datenbankschema zu verfolgen?


Was versuchst du hier zu erreichen? Versuchen Sie, Personen auf Änderungen aufmerksam zu machen oder einen Audit-Trail darüber zu erstellen, wer was wann geändert hat? Noch etwas ganz anderes?
ScottCher

@Scott - Im Wesentlichen, um in der Lage zu sein, ein Audit-Trail für andere Entwickler zu erstellen. Wir wissen also, dass wir das aktuellste Entwicklerschema haben und dass Test- und Live-Sites einfach überprüft werden können, um festzustellen, welches Schema sie ausführen.
Toby

1
Dies ähnelt der Frage, die ich gerade gestellt habe, aber ich denke, sie sind unterschiedlich genug, um beide zu beantworten. Dba.stackexchange.com/questions/64/…
Beth Whitezel

1
@BitOff - Ich stimme zu und ich denke, dass meine Antwort auf die Frage, auf die Sie verwiesen haben, auch hier steht. Mithilfe eines Tools wie PowerDesigner oder ERWin können Sie die Versionskontrolle eines Datenbankentwurfs unterstützen. Wenn die Datenbank extern modelliert wird und alle Änderungen über das Modell geplant werden, können Sie diese Änderungen besser kontrollieren und zur Überprüfung weitergeben.
ScottCher

1
Check out Liquibase oder Flyway
a_horse_with_no_name

Antworten:


44

Vor ein paar Minuten habe ich Folgendes überprüft: Eine Tabelle, die in allen Projekten mit einer Datenbank vorhanden sein sollte , scheint einfach genug zu sein, um sie in die Praxis umzusetzen.

Es heißt schema_version (oder Migrationen oder was auch immer zu Ihnen passt) und hat den Zweck, strukturelle oder Datenänderungen an der Datenbank zu verfolgen. Eine mögliche Struktur (Beispiel in MySQL) ist:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

In schema_version ( key, extra) Werte einfügen ('001', 'schema version');

Ob Sie diese Tabelle von Beginn des Projekts an oder unmittelbar nach der Bereitstellung der ersten Version auf einem Staging- oder Produktionsserver hinzufügen, bleibt Ihnen überlassen.

Wann immer Sie ein SQL-Skript ausführen müssen, um die Datenbankstruktur zu ändern oder eine Datenmigration durchzuführen, sollten Sie auch eine Zeile in diese Tabelle einfügen. Und das über eine insert-Anweisung am Anfang oder Ende des Skripts (das in das Code-Repository des Projekts geschrieben wird).


1
@David - Dies ist fast eine Frage für sich, aber können Sie sehr schnell erklären, wie die Tabelle Ihrem VCS Feedback geben kann? Nur mit einem manuellen Dump?
Toby

@Toby - Bei einem Deployment wurden die Skripte in SVN abgelegt und der Entwickler hat die SVN-Version oder den JIRA-Fehler # bereitgestellt - wir (dbas) haben ihre Kurznotizen und die Versionsnummer in diese Tabelle eingefügt. Um dies zusammenzufügen, haben wir eine Webseite erstellt, die auf diese Tabelle mit einem Hyperlink zu JIRA verweist.
David Hall

Ja. Grundsätzlich hat das OP es rückwärts - Sie verwenden Deployment-Skripte, die Sie versionieren, Sie arbeiten nicht aus Datenbank-Deltas heraus. Diese funktionieren ohnehin nur in degenerierten (vereinfachten) Fällen. Möglicherweise müssen Sie mehrstufige Transformationen ausführen, um ein Schema zu aktualisieren, das ein Tool nicht rückwärts generieren kann. Bereitstellungsskripte können dies jedoch bewältigen.
TomTom

23

Ich denke, die beste Methode ist, die Datenbank als Teil Ihres Erstellungsprozesses generieren zu lassen . Behalten Sie alle Skripte mit dem Rest des Codes in der Quellcodeverwaltung, und jeder ist für seine eigene Umgebung verantwortlich.

Gelingt das nicht , hat RedGate ein Werkzeug Quellcodeverwaltung in SSMS zu integrieren und SQL Vergleichen zum Vergleichen / Synchronisieren von MS SQL Server - Schemas nützlich ist. Visual Studio Database Edition verfügt auch über ein integriertes Tool zum Vergleichen von Schemata .

Eine weitere SO-Frage führte mich zu Migrator Dot Net, das ich in meiner reichlichen Freizeit untersuchen werde. Es sieht nach einer guten Methode aus, ist aber möglicherweise eine zeitaufwändigere Investition, als Sie bereit sind.


Die "Datenbank-Edition" von Visual Studio war früher ein separates Produkt, ist aber jetzt in Editionen enthalten, einschließlich Team Server. Persönlich bevorzuge ich das RedGate-Tool (SQL Compare), um sie synchron zu halten.
Tangurena,

12

eiefai schon erwähnt Eine Tabelle, die in allen Projekten mit einer Datenbank existieren soll . Dies ist ein großartiger Blog-Beitrag, aber IMO ist nur ein Teil der Weg zu einer funktionierenden Lösung für die Datenbank-Revisionskontrolle. Ich denke, jeder Versuch, diese Frage in der realen Welt zu "beantworten", muss einige der anderen Informationen über VCS und Datenbanken berücksichtigen:


8

Ich denke, es gibt ein paar verschiedene Blickwinkel, um sich dieser Frage zu nähern. Ich glaube, der "Tool-First" -Winkel wird je nach Plattform und persönlicher Präferenz variieren. Beispiel: Ich verwende ein Datenbankprojekt in MS Visual Studio, bin mir aber nicht sicher, ob dies eine großartige Lösung für MySQL ist. Ich kenne auch Leute, die ihre Lieblingswerkzeuge von Redgate, Erwin, Embarcadero usw. verkaufen.

Es gibt auch einen "Prozess-zuerst" -Winkel für diese Frage, der (hoffentlich) in den folgenden Fragen auf dieser Site noch einmal aufgegriffen wird. Die Grundpfeiler in diesem Prozess sind die Versionskontrolle Ihres Schemas und die Verwaltung von Änderungen, sodass Sie Schemaänderungen von Version "x" auf Version "y" so gut wie bei Bedarf anwenden können.

Eine endgültige Antwort auf dieses Thema wird wie ein Buch aussehen. Es lohnt sich also, zunächst eines zu erwähnen: Redgate hat kürzlich ein kostenloses eBook mit dem Titel " Das Red Gate Handbuch zur teambasierten SQL Server-Entwicklung " veröffentlicht Es gibt viel zu diskutieren, es ist ein ziemlich guter Ort, um zu debattieren, IMO. Im Gegensatz zum Namen ist ein Großteil des Materials in diesem Buch allgemein genug, um auf jede Datenbank (nicht nur auf SQL Server) und auf jedes Tool-Set (nicht nur auf Redgate) angewendet zu werden. Wenn Sie das noch nicht gesehen haben, ist es auf jeden Fall einen Blick wert.

Schließlich lohnt es sich wahrscheinlich, die "Legacy-Antwort" von stackoverflow einzufügen .


5

SchemaCrawler ist mein Tool zum Erstellen einer Textdatei mit allen Datenbankschemaobjekten. Ich habe diese Textausgabe so gestaltet, dass sie sowohl für Menschen lesbar als auch für ähnliche Ausgaben von einem anderen Server differenzierbar ist.

In der Praxis habe ich festgestellt, dass die Ausgabe einer Textdatei des Datenbankschemas nützlich ist, wenn dies als Teil des Builds erfolgt. Auf diese Weise können Sie die Textdatei in Ihr Quellcodeverwaltungssystem einchecken und einen Versionsverlauf darüber erhalten, wie sich Ihr Schema im Laufe der Zeit entwickelt hat. SchemaCrawler soll dies auch über die Befehlszeile automatisieren.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.