341 Stimmen

Wie führt man Versionskontrolle für eine SQL Server-Datenbank durch?

Ich möchte meine Datenbanken unter Versionskontrolle halten.

Ich möchte immer zumindest einige Daten darin haben (wie alumb erwähnt: Benutzertypen und Administratoren). Oft möchte ich auch eine große Sammlung generierter Testdaten für Leistungsmessungen haben.

Wie kann ich Versionskontrolle auf meine Datenbank anwenden?

22voto

jeffjakub Punkte 253

Sie möchten sich vielleicht Liquibase ansehen (http://www.liquibase.org/). Auch wenn Sie das Tool selbst nicht verwenden, behandelt es die Konzepte des Datenbank-Änderungsmanagements oder Refactorings ziemlich gut.

21voto

alexis.kennedy Punkte 917

+1 für alle, die die RedGate-Tools empfohlen haben, mit einer zusätzlichen Empfehlung und einem Vorbehalt.

SqlCompare hat auch eine ordentlich dokumentierte API: So können Sie beispielsweise eine Konsolenanwendung schreiben, die Ihren Quellcode-Ordner mit einem CI-Integrationstestdatenbank synchronisiert, damit beim Einchecken Änderungen am Schema automatisch zusammen mit der entsprechenden Anwendungscodänderung bereitgestellt werden. Dies hilft dabei, die Lücke zu Entwicklern zu schließen, die vergessen Änderungen an ihrer lokalen Datenbank auf eine gemeinsame Entwicklungsdatenbank hochzuladen (ungefähr die Hälfte von uns, denke ich :) ).

Ein Vorbehalt ist, dass die RedGate-Tools so reibungslos sind, dass es leicht ist, die SQL-Realitäten, die der Abstraktion zugrunde liegen, zu vergessen. Wenn Sie beispielsweise alle Spalten in einer Tabelle umbenennen, hat SqlCompare keine Möglichkeit, die alten Spalten den neuen Spalten zuzuordnen, und es werden alle Daten in der Tabelle gelöscht. Es wird Warnungen generieren, aber ich habe Leute darüber hinwegklicken sehen. Es gibt hier einen allgemeinen Punkt, den ich für erwähnenswert halte, dass Sie die Versionsverwaltung und Aktualisierung von Datenbanken nur bis zu einem gewissen Grad automatisieren können - die Abstraktionen sind sehr undicht.

0 Stimmen

Es sollte also ein System geben, das verfolgt, welche Spalten Sie ändern, und sich an die Zuordnungen von alten Spaltennamen zu neuen Spaltennamen erinnert.

0 Stimmen

Es lohnt sich zu bedenken, dass für Datenbankänderungen, die Mehrdeutigkeiten aufweisen (und daher ein Element des "Entwickler-Intents" benötigen), eine migrationsbasierte Lösung die geeignete Lösung ist. Redgate hat jetzt ReadyRoll, das diesen Versionsansatz erfüllt.

18voto

roman m Punkte 25088

Mit VS 2010 verwenden Sie das Datenbankprojekt.

  1. Ihr Datenbankskript ausführen
  2. Änderungen an Skripten vornehmen oder direkt auf Ihrem Datenbankserver
  3. Abgleichen mit Hilfe von Daten > Schemavergleich

Bietet eine perfekte DB-Versionierungslösung und erleichtert das Synchronisieren von Datenbanken.

2 Stimmen

Ja, aber leider musst du jedes Mal daran denken, das "Skript generieren" zu machen. Wenn du die Datenbank direkt aktualisierst, verlierst du die Möglichkeit, das Aktualisierungsskript für diesen Unterschied zu generieren. Wenn nur Datenbankprojekte eine eingebaute Funktion für Versionskontrolle hätten.

16voto

Ray Punkte 44499

Wir verwenden DBGhost, um unsere SQL-Datenbank zu verwalten. Dann legen Sie Ihre Skripte in Ihr Versionskontrollsystem, um eine neue Datenbank zu erstellen, und es wird entweder eine neue Datenbank erstellen oder jede vorhandene Datenbank auf das im Versionskontrollsystem definierte Schema aktualisieren. Auf diese Weise müssen Sie sich keine Gedanken über das Erstellen von Änderungsskripten machen (obwohl Sie das immer noch tun können, wenn Sie beispielsweise den Datentyp einer Spalte ändern und Daten konvertieren müssen).

13voto

Silvercode Punkte 967

Es ist ein guter Ansatz, Datenbankskripte mit Änderungsskripten in der Versionskontrolle zu speichern, damit Sie jede Datenbank aktualisieren können, die Sie haben. Möglicherweise möchten Sie auch Schemas für verschiedene Versionen speichern, damit Sie eine vollständige Datenbank erstellen können, ohne alle Änderungsskripte anwenden zu müssen. Die Handhabung der Skripte sollte automatisiert sein, damit Sie keine manuelle Arbeit leisten müssen.

Ich finde es wichtig, für jeden Entwickler eine separate Datenbank zu haben und keine gemeinsame Datenbank zu verwenden. Auf diese Weise können die Entwickler Testfälle und Entwicklungsphasen unabhängig von anderen Entwicklern erstellen.

Das Automatisierungstool sollte Mittel zur Behandlung von Datenbankmetadaten haben, die anzeigen, in welchem Entwicklungsstand sich welche Datenbanken befinden und welche Tabellen versionierbare Daten enthalten usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X