Frage

Ich möchte meine Datenbanken unter Versionskontrolle stellen.Hat jemand Ratschläge oder empfohlene Artikel, um mir den Einstieg zu erleichtern?

Ich werde immer mindestens haben wollen manche Daten darin (wie alumb erwähnt:Benutzertypen und Administratoren).Außerdem benötige ich oft eine große Sammlung generierter Testdaten für Leistungsmessungen.

War es hilfreich?

Lösung

Martin Fowler hat meinen Lieblingsartikel zu diesem Thema geschrieben: http://martinfowler.com/articles/evodb.html.Ich entscheide mich dafür, Schema-Dumps nicht unter Versionskontrolle zu stellen alumb und andere schlagen es vor, weil ich eine einfache Möglichkeit zum Aktualisieren meiner Produktionsdatenbank möchte.

Für eine Webanwendung, bei der ich über eine einzelne Produktionsdatenbankinstanz verfüge, verwende ich zwei Techniken:

Datenbank-Upgrade-Skripte

Ein Sequenz-Datenbank-Upgrade-Skript, das die DDL enthält, die zum Verschieben des Schemas von Version N auf N+1 erforderlich ist.(Diese gehen in Ihr Versionskontrollsystem.) Eine _version_history_-Tabelle, so etwas wie

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

erhält jedes Mal, wenn ein Upgrade-Skript ausgeführt wird, einen neuen Eintrag, der der neuen Version entspricht.

Dadurch wird sichergestellt, dass leicht erkennbar ist, welche Version des Datenbankschemas vorhanden ist, und dass Datenbankaktualisierungsskripts nur einmal ausgeführt werden.Auch das sind sie nicht Datenbank-Dumps.Vielmehr repräsentiert jedes Skript das Änderungen notwendig, um von einer Version zur nächsten zu wechseln.Dabei handelt es sich um das Skript, das Sie auf Ihre Produktionsdatenbank anwenden, um diese zu „aktualisieren“.

Entwickler-Sandbox-Synchronisierung

  1. Ein Skript zum Sichern, Bereinigen und Verkleinern einer Produktionsdatenbank.Führen Sie dies nach jedem Upgrade auf die Produktionsdatenbank aus.
  2. Ein Skript zum Wiederherstellen (und ggf. Optimieren) der Sicherung auf der Workstation eines Entwicklers.Jeder Entwickler führt dieses Skript nach jedem Upgrade auf die Produktionsdatenbank aus.

Eine Einschränkung:Meine automatisierten Tests werden mit einer schemakorrekten, aber leeren Datenbank ausgeführt, sodass dieser Rat Ihren Anforderungen nicht perfekt entspricht.

Andere Tipps

Mit dem SQL Compare-Produkt von Red Gate können Sie nicht nur Vergleiche auf Objektebene durchführen und daraus Änderungsskripts generieren, sondern auch Ihre Datenbankobjekte in eine Ordnerhierarchie exportieren, die nach Objekttyp organisiert ist, mit einer [Objektname].sql-Erstellung Skript pro Objekt in diesen Verzeichnissen.Die Objekttyphierarchie sieht folgendermaßen aus:

\Funktionen
\Sicherheit
\Sicherheit ollen
\Sicherheit\Schemas
\Sicherheit\Benutzer
\Gespeicherte Prozeduren
abellen

Wenn Sie Ihre Skripte im selben Stammverzeichnis ablegen, nachdem Sie Änderungen vorgenommen haben, können Sie damit Ihr SVN-Repo aktualisieren und einen Laufverlauf für jedes Objekt einzeln führen.

Dies ist eines der „schweren Probleme“ der Entwicklung.Soweit ich weiß, gibt es keine perfekten Lösungen.

Wenn Sie nur die Datenbankstruktur und nicht die Daten speichern müssen, können Sie die Datenbank als SQL-Abfragen exportieren.(im Enterprise Manager:Klicken Sie mit der rechten Maustaste auf Datenbank -> SQL-Skript generieren.Ich empfehle die Einstellung „Eine Datei pro Objekt erstellen“ auf der Registerkarte „Optionen“. Anschließend können Sie diese Textdateien an SVN übergeben und die Diff- und Protokollierungsfunktionen von SVN nutzen.

Ich habe dies mit einem Batch-Skript verknüpft, das ein paar Parameter übernimmt und die Datenbank einrichtet.Ich habe auch einige zusätzliche Abfragen hinzugefügt, die Standarddaten wie Benutzertypen und den Admin-Benutzer eingeben.(Wenn Sie weitere Informationen dazu wünschen, posten Sie etwas und ich kann das Skript an einem zugänglichen Ort ablegen.)

Wenn Sie auch alle Daten behalten müssen, empfehle ich, ein Backup der Datenbank zu erstellen und Redgate zu verwenden (http://www.red-gate.com/) Produkte, um die Vergleiche durchzuführen.Sie sind nicht billig, aber sie sind jeden Cent wert.

Zunächst müssen Sie das für Sie geeignete Versionskontrollsystem auswählen:

  • Zentralisiertes Versionskontrollsystem – ein Standardsystem, bei dem Benutzer vor/nach der Arbeit an Dateien auschecken/einchecken und die Dateien auf einem einzigen zentralen Server gespeichert werden

  • Verteilter Versionskontrollsystem - Ein System, in dem das Repository kloniert wird, und jeder Klon ist tatsächlich die vollständige Sicherung des Repositorys. Wenn ein Server also abstürzt, kann jedes klonierte Repository nach der Auswahl des richtigen Systems für Ihre Anforderungen wiederhergestellt werden Sie müssen das Repository einrichten, das der Kern jedes Versionskontrollsystems ist, all dies wird im folgenden Artikel erläutert: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

Nachdem Sie ein Repository und im Falle eines zentralen Versionskontrollsystems einen Arbeitsordner eingerichtet haben, können Sie lesen Dieser Artikel.Es zeigt, wie Sie die Quellcodeverwaltung in einer Entwicklungsumgebung einrichten, indem Sie Folgendes verwenden:

  • SQL Server Management Studio über den MSSCCI-Anbieter,

  • Visual Studio und SQL Server-Datentools

  • Ein Drittanbieter-Tool ApexSQL Source Control

Hier bei Red Gate bieten wir ein Werkzeug an, SQL-Quellcodeverwaltung, das die SQL Compare-Technologie nutzt, um Ihre Datenbank mit einem TFS- oder SVN-Repository zu verknüpfen.Dieses Tool lässt sich in SSMS integrieren und ermöglicht Ihnen die Arbeit wie gewohnt, mit der Ausnahme, dass Sie jetzt die Objekte festschreiben können.

Für einen migrationsbasierten Ansatz (besser geeignet für automatisierte Bereitstellungen) bieten wir an SQL-Änderungsautomatisierung (früher ReadyRoll genannt), das eine Reihe inkrementeller Skripts als Visual Studio-Projekt erstellt und verwaltet.

In der SQL-Quellcodeverwaltung ist es möglich, statische Datentabellen anzugeben.Diese werden in der Quellcodeverwaltung als INSERT-Anweisungen gespeichert.

Wenn es um Testdaten geht, empfehlen wir Ihnen, Testdaten entweder mit einem Tool oder über ein von Ihnen definiertes Post-Deployment-Skript zu generieren oder einfach ein Produktions-Backup in der Entwicklungsumgebung wiederherzustellen.

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

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

SqlCompare verfügt auch über eine gut dokumentierte API:So können Sie beispielsweise eine Konsolenanwendung schreiben, die beim Einchecken Ihren quellgesteuerten Skriptordner mit einer CI-Integrationstestdatenbank synchronisiert, sodass, wenn jemand eine Änderung am Schema aus seinem Skriptordner eincheckt, diese automatisch zusammen mit der passenden Anwendung bereitgestellt wird Codeänderung.Dies trägt dazu bei, die Lücke zu Entwicklern zu schließen, die es vergessen, Änderungen in ihrer lokalen Datenbank an eine gemeinsam genutzte Entwicklungsdatenbank weiterzugeben (ungefähr die Hälfte von uns, glaube ich :)).

Ein Vorbehalt besteht darin, dass die RedGate-Tools bei einer skriptbasierten Lösung oder auf andere Weise so reibungslos funktionieren, dass man leicht die der Abstraktion zugrunde liegenden SQL-Realitäten vergisst.Wenn Sie alle Spalten in einer Tabelle umbenennen, hat SqlCompare keine Möglichkeit, die alten Spalten den neuen Spalten zuzuordnen, und löscht alle Daten in der Tabelle.Es werden Warnungen generiert, aber ich habe gesehen, dass Leute darüber hinaus geklickt haben.Hier gibt es meiner Meinung nach einen allgemeinen Punkt, der angesprochen werden sollte: Bisher kann man die DB-Versionierung und das Upgrade nur automatisieren – die Abstraktionen sind sehr undicht.

Wir gebrauchen DBGhost um unsere SQL-Datenbank zu verwalten.Anschließend fügen Sie Ihre Skripts zum Erstellen einer neuen Datenbank in Ihre Versionskontrolle ein und es wird entweder eine neue Datenbank erstellt oder eine vorhandene Datenbank auf das Schema in der Versionskontrolle aktualisiert.Auf diese Weise müssen Sie sich nicht um die Erstellung von Änderungsskripten kümmern (obwohl Sie dies trotzdem tun können, wenn Sie beispielsweise den Datentyp einer Spalte ändern möchten und Daten konvertieren müssen).

Verwenden Sie bei VS 2010 das Datenbankprojekt.

  1. Erstellen Sie ein Skript für Ihre Datenbank
  2. Nehmen Sie Änderungen an Skripten oder direkt auf Ihrem DB -Server vor
  3. Synchronisieren Sie mit Daten> Schema -Vergleich

Stellt eine perfekte DB-Versionierungslösung dar und macht die Synchronisierung von DBs zum Kinderspiel.

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

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

Das Automatisierungstool sollte über Mittel zur Verarbeitung von Datenbankmetadaten verfügen, die Aufschluss darüber geben, welche Datenbanken sich in welchem ​​Entwicklungsstadium befinden und welche Tabellen versionierungskontrollierbare Daten enthalten usw.

Sie könnten sich auch eine Migrationslösung ansehen.Damit können Sie Ihr Datenbankschema in C#-Code angeben und Ihre Datenbankversion mithilfe von MSBuild hoch- und runterrollen.

Ich verwende derzeit DbUp, und es hat gut funktioniert.

Sie haben keine Einzelheiten zu Ihrer Zielumgebung oder Einschränkungen erwähnt, daher trifft dies möglicherweise nicht vollständig zu ...Wenn Sie jedoch nach einer Möglichkeit suchen, ein sich entwickelndes DB-Schema effektiv zu verfolgen, und der Verwendung von Ruby nicht abgeneigt sind, sind die Migrationen von ActiveRecord genau das Richtige für Sie.

Migrationen definieren Datenbanktransformationen programmgesteuert mithilfe einer Ruby-DSL;Jede Transformation kann angewendet oder (normalerweise) zurückgesetzt werden, sodass Sie zu jedem Zeitpunkt zu einer anderen Version Ihres DB-Schemas wechseln können.Die Datei, die diese Transformationen definiert, kann wie jeder andere Quellcode in die Versionskontrolle eingecheckt werden.

Denn Migrationen gehören dazu Aktiver Rekord, Sie werden typischerweise in Full-Stack-Rails-Apps verwendet.Sie können ActiveRecord jedoch mit minimalem Aufwand unabhängig von Rails verwenden.Sehen Hier für eine detailliertere Behandlung der Verwendung von AR-Migrationen außerhalb von Rails.

Jede Datenbank sollte unter Quellcodekontrolle stehen.Was fehlt, ist ein Tool zum automatischen Skripten aller Datenbankobjekte – und „Konfigurationsdaten“ – in eine Datei, die dann zu jedem Quellcodeverwaltungssystem hinzugefügt werden kann.Wenn Sie SQL Server verwenden, ist meine Lösung hier: http://dbsourcetools.codeplex.com/ .Viel Spaß.- Nathan.

Es ist einfach.

  1. Wenn das Basisprojekt fertig ist, müssen Sie ein vollständiges Datenbankskript erstellen.Dieses Skript ist für SVN bestimmt.Es ist die erste Version.

  2. Danach erstellen alle Entwickler Änderungsskripte (ALTER..., neue Tabellen, Sprocs usw.).

  3. Wenn Sie eine aktuelle Version benötigen, sollten Sie alle neuen Änderungsskripte ausführen.

  4. Wenn die App für die Produktion freigegeben wird, kehren Sie zu 1 zurück (aber dann wird es natürlich eine Folgeversion sein).

Nant hilft Ihnen bei der Ausführung dieser Änderungsskripte.:) :)

Und merke dir.Alles funktioniert gut, wenn Disziplin herrscht.Jedes Mal, wenn eine Datenbankänderung festgeschrieben wird, werden auch die entsprechenden Funktionen im Code festgeschrieben.

Wenn Sie eine kleine Datenbank haben und das Ganze versionieren möchten, dieses Batch-Skript könnte helfen.Es trennt, komprimiert und checkt eine MSSQL-Datenbank-MDF-Datei in Subversion ein.

Wenn Sie Ihr Schema hauptsächlich versionieren möchten und nur über eine kleine Menge an Referenzdaten verfügen, können Sie möglicherweise Folgendes verwenden SubSonic-Migrationen damit umzugehen.Der Vorteil besteht darin, dass Sie problemlos auf eine bestimmte Version nach oben oder unten migrieren können.

Um den Dump in ein Quellcodeverwaltungssystem etwas schneller zu machen, können Sie anhand der Versionsinformationen in sysobjects sehen, welche Objekte sich seit dem letzten Mal geändert haben.

Aufstellen: Erstellen Sie in jeder Datenbank, die Sie inkrementell überprüfen möchten, eine Tabelle, um die Versionsinformationen von der letzten Überprüfung zu speichern (leer beim ersten Durchlauf).Löschen Sie diese Tabelle, wenn Sie Ihre gesamte Datenstruktur erneut scannen möchten.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

Normaler Laufmodus: Sie können die Ergebnisse aus diesem SQL übernehmen und SQL-Skripte für diejenigen generieren, die Sie interessieren, und diese in eine Quellcodeverwaltung Ihrer Wahl einfügen.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

Notiz: Wenn Sie in einer Ihrer Datenbanken eine nicht standardmäßige Sortierung verwenden, müssen Sie diese ersetzen /* COLLATE */ mit Ihrer Datenbanksortierung.d.h. COLLATE Latin1_General_CI_AI

Da unsere App über mehrere RDBMS hinweg funktionieren muss, speichern wir unsere Schemadefinition in der Versionskontrolle mithilfe der Datenbankneutralität Drehmoment Format (XML).Wir führen außerdem eine Versionskontrolle der Referenzdaten für unsere Datenbank im XML-Format wie folgt durch (wobei „Beziehung“ eine der Referenztabellen ist):

  <Relationship RelationshipID="1" InternalName="Manager"/>
  <Relationship RelationshipID="2" InternalName="Delegate"/>
  etc.

Anschließend verwenden wir selbst entwickelte Tools, um die Schema-Upgrade- und Referenzdaten-Upgrade-Skripts zu generieren, die erforderlich sind, um von Version X der Datenbank auf Version X + 1 zu wechseln.

Wir speichern nicht das Datenbankschema, sondern die Änderungen an der Datenbank.Wir speichern die Schemaänderungen, sodass wir ein Änderungsskript für jede Version der Datenbank erstellen und es auf die Datenbanken unserer Kunden anwenden können.Ich habe eine Datenbank-Dienstprogramm-App geschrieben, die mit unserer Hauptanwendung verteilt wird, die dieses Skript lesen und wissen kann, welche Updates angewendet werden müssen.Es verfügt außerdem über genügend Intelligenz, um Ansichten und gespeicherte Prozeduren nach Bedarf zu aktualisieren.

Nach der Migration auf eine x64-Plattform mussten wir unsere SQL-Datenbank versionieren und unsere alte Version brach bei der Migration zusammen.Wir haben eine C#-Anwendung geschrieben, die SQLDMO verwendet, um alle SQL-Objekte einem Ordner zuzuordnen:

                Root
                    ServerName
                       DatabaseName
                          Schema Objects
                             Database Triggers*
                                .ddltrigger.sql
                             Functions
                                ..function.sql
                             Security
                                Roles
                                   Application Roles
                                      .approle.sql
                                   Database Roles
                                      .role.sql
                                Schemas*
                                   .schema.sql
                                Users
                                   .user.sql
                             Storage
                                Full Text Catalogs*
                                   .fulltext.sql
                             Stored Procedures
                                ..proc.sql
                             Synonyms*
                                .synonym.sql
                             Tables
                                ..table.sql
                                Constraints
                                   ...chkconst.sql
                                   ...defconst.sql
                                Indexes
                                   ...index.sql
                                Keys
                                   ...fkey.sql
                                   ...pkey.sql
                                   ...ukey.sql
                                Triggers
                                   ...trigger.sql
                             Types
                                User-defined Data Types
                                   ..uddt.sql
                                XML Schema Collections*
                                   ..xmlschema.sql
                             Views
                                ..view.sql
                                Indexes
                                   ...index.sql
                                Triggers
                                   ...trigger.sql

Die Anwendung würde dann die neu geschriebene Version mit der in SVN gespeicherten Version vergleichen und bei Abweichungen den SVN aktualisieren.Wir haben festgestellt, dass die Ausführung des Prozesses einmal pro Nacht ausreicht, da wir nicht so viele Änderungen an SQL vornehmen.Es ermöglicht uns, Änderungen an allen für uns wichtigen Objekten zu verfolgen und im Falle eines schwerwiegenden Problems unser vollständiges Schema neu zu erstellen.

Ich habe diese App vor einiger Zeit geschrieben, http://sqlschemasourcectrl.codeplex.com/ Dadurch werden Ihre MSFT-SQL-Datenbanken so oft gescannt, wie Sie möchten, und Ihre Objekte (Tabellen, Ansichten, Prozesse, Funktionen, SQL-Einstellungen) werden automatisch in SVN ausgegeben.Klappt wunderbar.Ich verwende es mit Unfuddle (wodurch ich bei Check-ins Benachrichtigungen erhalten kann)

Die typische Lösung besteht darin, die Datenbank nach Bedarf zu sichern und diese Dateien zu sichern.

Abhängig von Ihrer Entwicklungsplattform sind möglicherweise Open-Source-Plugins verfügbar.Es ist normalerweise ziemlich trivial, dafür eigenen Code zu erstellen.

Notiz:Möglicherweise möchten Sie den Datenbank-Dump sichern, anstatt ihn der Versionskontrolle zu unterziehen.Die Dateien können bei der Versionskontrolle sehr schnell anwachsen und dazu führen, dass Ihr gesamtes Versionskontrollsystem langsam wird (ich erinnere mich gerade an eine CVS-Horrorgeschichte).

Wir haben gerade angefangen, Team Foundation Server zu verwenden.Wenn Ihre Datenbank mittelgroß ist, verfügt Visual Studio über einige nette Projektintegrationen mit integriertem Vergleich, Datenvergleich, Datenbank-Refactoring-Tools, Datenbanktest-Framework und sogar Tools zur Datengenerierung.

Dieses Modell passt jedoch nicht sehr gut zu sehr großen Datenbanken oder Datenbanken von Drittanbietern (die Objekte verschlüsseln).Wir haben also nur unsere benutzerdefinierten Objekte gespeichert.Der Visual Studio-/Team Foundation-Server eignet sich hierfür sehr gut.

Chefarch der TFS-Datenbank.Blog

MS TFS-Site

Ich stimme der Antwort von ESV zu und aus genau diesem Grund habe ich vor einiger Zeit ein kleines Projekt gestartet, um Datenbankaktualisierungen in einer sehr einfachen Datei zu verwalten, die dann als langer Quellcode verwaltet werden könnte.Es ermöglicht einfache Updates für Entwickler sowie UAT und Produktion.Das Tool funktioniert jedoch auf SQL Server und MySql.

Einige Projektfunktionen:

  • Ermöglicht Schemaänderungen
  • Ermöglicht das Auffüllen von Wertbäumen
  • Ermöglicht separate Testdateneinfügungen für z. B.UAT
  • Ermöglicht Option für Rollback (nicht automatisiert)
  • Unterstützt weiterhin SQL Server und MySQL
  • Bietet die Möglichkeit, Ihre vorhandene Datenbank mit einem einfachen Befehl in die Versionskontrolle zu importieren (nur SQL Server ...arbeitet immer noch an MySQL)

Der Code wird auf Google Code gehostet.Weitere Informationen finden Sie im Google-Code

http://code.google.com/p/databaseversioncontrol/

Vor einiger Zeit habe ich ein VB-Basismodul gefunden, das DMO- und VSS-Objekte verwendet, um eine ganze Datenbank per Skript in VSS zu übertragen.Ich habe es in ein VB-Skript umgewandelt und gepostet Hier.Sie könnten die VSS-Aufrufe einfach herausnehmen und das DMO-Material verwenden, um alle Skripte zu generieren, und dann SVN aus derselben Batchdatei aufrufen, die das VBScript aufruft, um sie einzuchecken?

Dave J

Ich verwende auch eine Version in der Datenbank, die über die Prozedurfamilie der erweiterten Datenbankeigenschaften gespeichert wird.Meine Anwendung verfügt über Skripte für jeden Versionsschritt (d. h.von 1.1 auf 1.2 wechseln).Bei der Bereitstellung prüft es die aktuelle Version und führt dann die Skripts nacheinander aus, bis die letzte App-Version erreicht ist.Es gibt kein Skript, das die direkte „endgültige“ Version hat. Selbst bei der Bereitstellung auf einer sauberen Datenbank erfolgt die Bereitstellung über eine Reihe von Upgrade-Schritten.

Nun möchte ich hinzufügen, dass ich vor zwei Tagen auf dem MS-Campus eine Präsentation über die neue und kommende VS DB-Ausgabe gesehen habe.Der Vortrag konzentrierte sich speziell auf dieses Thema und ich war völlig umgehauen.Sie sollten es unbedingt ausprobieren, die neuen Funktionen konzentrieren sich auf die Beibehaltung der Schemadefinition in T-SQL-Skripten (CREATEs), eine Laufzeit-Delta-Engine zum Vergleichen des Bereitstellungsschemas mit dem definierten Schema und die Durchführung der Delta-ALTERs und die Integration mit der Quellcode-Integration und einschließlich der kontinuierlichen MSBUILD-Integration für automatisierte Build-Drops.Der Drop enthält einen neuen Dateityp, die .dbschema-Dateien, die auf die Bereitstellungsseite übertragen werden können, und ein Befehlszeilentool kann die eigentlichen „Deltas“ ausführen und die Bereitstellung ausführen.Ich habe einen Blogeintrag zu diesem Thema mit Links zu den VSDE-Downloads, Sie sollten sie sich ansehen: http://rusanu.com/2009/05/15/version-control-and-your-database/

Es ist eine sehr alte Frage, doch viele versuchen sie auch jetzt noch zu lösen.Sie müssen lediglich über Visual Studio-Datenbankprojekte recherchieren.Ohne dies sieht jede Datenbankentwicklung sehr schwach aus.Von der Codeorganisation über die Bereitstellung bis hin zur Versionierung vereinfacht es alles.

Meiner Erfahrung nach besteht die Lösung aus zwei Gründen:

  1. Sie müssen Änderungen an der Entwicklungsdatenbank verarbeiten, die während der Entwicklung von mehreren Entwicklern vorgenommen werden.

  2. Sie müssen Datenbankaktualisierungen an Kundenstandorten durchführen.

Um Nr. 1 bewältigen zu können, benötigen Sie ein leistungsstarkes Datenbank-Diff/Merge-Tool.Das beste Tool sollte in der Lage sein, so weit wie möglich eine automatische Zusammenführung durchzuführen und gleichzeitig die Möglichkeit zu geben, nicht behandelte Konflikte manuell zu lösen.

Das perfekte Tool sollte Zusammenführungsvorgänge mithilfe eines 3-Wege-Zusammenführungsalgorithmus verarbeiten, der die Änderungen berücksichtigt, die in der THEIRS-Datenbank und der MINE-Datenbank relativ zur BASE-Datenbank vorgenommen wurden.

Ich habe ein kommerzielles Tool geschrieben, das manuelle Zusammenführungsunterstützung für SQLite-Datenbanken bietet, und füge derzeit Unterstützung für den 3-Wege-Zusammenführungsalgorithmus für SQLite hinzu.Schauen Sie es sich an http://www.sqlitecompare.com

Um #2 bewältigen zu können, benötigen Sie ein Upgrade-Framework.

Die Grundidee besteht darin, ein automatisches Upgrade-Framework zu entwickeln, das weiß, wie ein Upgrade von einem vorhandenen SQL-Schema auf das neuere SQL-Schema durchgeführt wird, und einen Upgrade-Pfad für jede vorhandene DB-Installation erstellen kann.

Schauen Sie sich meinen Artikel zu diesem Thema an http://www.codeproject.com/KB/database/sqlite_upgrade.aspx um eine allgemeine Vorstellung davon zu bekommen, wovon ich spreche.

Viel Glück

Liron Levi

Schauen Sie sich DBGhost an http://www.innovartis.co.uk/.Ich verwende es jetzt seit 2 Jahren automatisiert und es funktioniert großartig.Dadurch können unsere DB-Builds ähnlich wie Java- oder C-Builds ablaufen, mit Ausnahme der Datenbank.Sie wissen, was ich meine.

Ich würde vorschlagen, Vergleichstools zu verwenden, um ein Versionskontrollsystem für Ihre Datenbank zu improvisieren.Eine gute Alternative sind xSQL-Schemavergleich Und xSQL-Datenvergleich.

Wenn Sie nun nur das Schema der Datenbank unter Versionskontrolle haben möchten, können Sie einfach xSQL Schema Compare verwenden, um xSQL-Snapshots des Schemas zu generieren und diese Dateien Ihrer Versionskontrolle hinzuzufügen.Um dann eine bestimmte Version wiederherzustellen oder zu aktualisieren, vergleichen Sie einfach die aktuelle Version der Datenbank mit dem Snapshot für die Zielversion.

Wenn Sie jedoch auch die Daten unter Versionskontrolle haben möchten, können Sie xSQL Data Compare verwenden, um Änderungsskripte für Ihre Datenbank zu generieren und die .sql-Dateien zu Ihrer Versionskontrolle hinzuzufügen.Sie können diese Skripte dann ausführen, um eine beliebige Version wiederherzustellen bzw. zu aktualisieren.Beachten Sie, dass Sie für die Funktion „Zurücksetzen“ Änderungsskripts generieren müssen, die bei ihrer Ausführung Version 3 mit Version 2 identisch machen, und dass Sie für die Funktionalität „Aktualisieren“ Änderungsskripts generieren müssen, die das Gegenteil bewirken.

Schließlich können Sie mit einigen grundlegenden Batch-Programmierkenntnissen den gesamten Prozess automatisieren, indem Sie die Befehlszeilenversionen von xSQL Schema Compare und xSQL Data Compare verwenden

Haftungsausschluss:Ich bin mit xSQL verbunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top