Versioning SQL Server-Datenbank

stimmen
288

Ich möchte meine Datenbanken unter Versionskontrolle erhalten. Hat jemand einen Rat oder empfohlenen Artikel mir die ersten Schritte?

Ich werde immer wollen zumindest haben einige dort Daten (wie alumb erwähnt: Benutzertypen und Administratoren). Ich werde mag auch oft eine große Sammlung von generierten Testdaten für Performance - Messungen.

Veröffentlicht am 01/08/2008 um 19:33
quelle vom benutzer
In anderen Sprachen...                            


29 antworten

stimmen
169

Martin Fowler schrieb meinen Liebling Artikel über das Thema, http://martinfowler.com/articles/evodb.html . Ich wähle nicht Schema wie unter Versionskontrolle Dumps im setzen alumb und andere vorschlagen , weil ich eine einfache Möglichkeit , möchte , dass meine Produktionsdatenbank zu aktualisieren.

Für eine Web-Anwendung, wo ich eine Produktionsdatenbankinstanz haben werden, verwende ich zwei Techniken:

Datenbank-Upgrade-Scripts

Eine Sequenz-Datenbank aktualisieren Skripte, die die DDL notwendig zu bewegen, das Schema von Version N zu N + 1 enthalten. (Diese gehen in Ihr Versionskontrollsystem). Ein _version_history_ Tisch, so etwas wie

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

jedes Mal, bekommt einen neuen Eintrag ein Upgrade-Skript ausgeführt wird, die auf die neue Version entspricht.

Dadurch wird sichergestellt , dass es einfach zu sehen , welche Version des Datenbankschemas gibt und dass Datenbank - Upgrade - Skripte wird nur einmal ausgeführt. Auch dies ist nicht Datenbank - Dumps. Vielmehr stellt jedes Skript die Änderungen notwendig , um von einer Version zur nächsten zu bewegen. Sie sind das Skript , das Sie auf Ihre Produktionsdatenbank beziehen sich auf „Upgrade“ es.

Entwickler Sandbox-Synchronisation

  1. Ein Skript zu sichern, sanieren und eine Produktionsdatenbank schrumpfen. Führen Sie diese nach jedem Upgrade auf die Produktion DB.
  2. Ein Skript zur Wiederherstellung (und zwicken, falls erforderlich), um die Sicherung auf einem Entwickler-Workstation. Jeder Entwickler läuft dieses Skript nach jeder Aktualisierung auf die Produktion DB.

Eine Einschränkung: Meine automatisierten Tests laufen gegen ein Schema zu korrigieren, aber leere Datenbank, so dass diese Beratung wird Ihre Bedürfnisse nicht perfekt passen.

Beantwortet am 02/08/2008 um 18:33
quelle vom benutzer

stimmen
42

Red Gate SQL vergleichen Produkt können Sie nicht nur auf Objektebene Vergleiche tun, und Change Scripts aus, dass zu erzeugen, sondern erlaubt es auch Sie Ihre Datenbank-Objekte in einer Ordnerhierarchie nach Objekttyp, mit einem [Objektname] .SQL Schaffung organisiert exportieren Skript pro Objekt in diesen Verzeichnissen. Die Objekttyp-Hierarchie ist wie folgt:

\ Funktionen
\ Security
\ Security \ Roles
\ Security \ Schemas
\ Security \ Users
\ Stored Procedures
\ Tables

Wenn Sie Ihre Skripte mit dem gleichen Stammverzeichnis Dump, nachdem Sie Änderungen vornehmen möchten, können Sie diese verwenden, um Ihre SVN-Repo zu aktualisieren, und halten eine laufende Geschichte jedes Objekt einzeln.

Beantwortet am 26/08/2008 um 08:23
quelle vom benutzer

stimmen
38

Dies ist einer der „harten Probleme“ rund um Entwicklung. Soweit ich weiß, gibt es keine perfekten Lösungen.

Wenn Sie nur die Datenbankstruktur und nicht die Daten speichern, müssen Sie die Datenbank als SQL-Abfragen exportieren. (In Enterprise Manager: Recht auf Datenbank klicken -> Generieren von SQL-Skript Ich empfehle die „erstellen eine Datei pro Objekt“ auf der Registerkarte Optionen festlegen.) Anschließend können Sie diese Textdateien svn commit und die Verwendung von svn des diff und Logging-Funktionen machen.

Ich habe dies mit einem Batch-Skript zusammen gebunden, die ein paar Parameter nehmen und die Datenbank einrichtet. Ich habe auch einige zusätzliche Abfragen hinzugefügt, die Standarddaten wie Benutzertypen und den Admin-Benutzer ein. (Wenn Sie weitere Informationen zu diesem Thema wünschen, schreibt etwas und ich kann das Skript irgendwo zugänglich setzen)

Wenn Sie auch alle Daten zu halten brauchen, empfehle ich ein Backup der Datenbank zu halten und mit Redgate ( http://www.red-gate.com/ ) Produkte , die Vergleiche zu tun. Sie kommen nicht billig, aber sie sind jeden Cent wert.

Beantwortet am 01/08/2008 um 20:28
quelle vom benutzer

stimmen
37

Zunächst müssen Sie das Versionskontrollsystem wählen, das richtige für Sie ist:

  • Zentralisierte Version Control System - ein Standard-System, in dem Benutzer überprüfen out- / Check in vor / nach dem sie an Dateien arbeiten, und die Dateien werden in einem einzigen zentralen Server gespeichert

  • Distributed Version Control System - ein System , in dem das Repository geklont wird, und jeder Klon ist eigentlich die vollständige Sicherung des Repository, also wenn alle Server abstürzt, dann kann jedes geklonte Repository verwendet werden, um sie wiederherzustellen Nachdem das richtige System für Ihre Bedürfnisse wählen , werden Sie das Repository einrichten müssen , die der Kern jeder Versionskontrollsystem ist alles in dem folgenden Artikel erklärt: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding -source-control-Grundlagen /

Nach der Einstellung ein Arbeitsordner ein Repository, und im Falle eines zentralen Versionskontrollsystem, können Sie lesen Sie diesen Artikel . Es zeigt , wie Steuerung zur Einrichtung Quelle in einer Entwicklungsumgebung:

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

  • Visual Studio und SQL Server-Datentools

  • Ein 3rd-Party-Tool ApexSQL Source Control
Beantwortet am 24/06/2015 um 10:36
quelle vom benutzer

stimmen
22

Hier bei Red Gate bieten wir ein Tool, SQL Source Control , die SQL verwendet Vergleich Technologie , um Ihre Datenbank mit einer TFS oder SVN - Repository zu verbinden. Dieses Tool integriert sich in SSMS und lässt Sie arbeiten wie gewohnt, außer es jetzt können Sie die Objekte zu begehen.

Für eine Migration basierten Ansatz (besser geeignet für automatisierte Installationen), bieten wir ReadyRoll , die erstellt und verwaltet eine Reihe von inkrementalen Skripte als Visual Studio Projekt.

In SQL Source Control ist es möglich, statische Datentabellen zu spezifizieren. Diese werden in der Quellcodeverwaltung als INSERT gespeicherten Anweisungen ignorieren.

Wenn Sie sich über Testdaten sprechen, würden wir Ihnen empfehlen, entweder Testdaten mit einem Werkzeug oder über einen Post-Deployment-Skript generieren Sie definieren, oder Sie einfach eine Produktions Sicherung auf dem Entwickler-Umgebung wiederherzustellen.

Beantwortet am 01/07/2010 um 10:10
quelle vom benutzer

stimmen
20

Sie könnten bei Liquibase (aussehen wollen http://www.liquibase.org/ ). Auch wenn Sie sich nicht mit dem Tool behandelt sie die Konzepte der Datenbank Change Management oder ziemlich gut Refactoring.

Beantwortet am 16/09/2008 um 19:16
quelle vom benutzer

stimmen
17

+1 für jeden, der die RedGate Werkzeuge, mit einer zusätzlichen Empfehlung und einem Vorbehalt empfohlen wird.

SqlCompare hat auch eine anständig dokumentierte API: So können Sie zum Beispiel eine Konsole app schreiben, die Ihre Quelle synchronisiert gesteuert Skripte Ordner mit einem CI-Integrationstest-Datenbank auf checkin, so dass, wenn jemand überprüft in einer Änderung des Schemas von ihren Skripten Ordner es wird automatisch zusammen mit der passenden Anwendungscode ändern eingesetzt. Dies trägt dazu bei, die Lücke mit den Entwicklern in der Nähe, die vergesslich sind über Veränderungen in ihrem lokalen ausbreitende db bis zu einer gemeinsamen Entwicklung DB (etwa die Hälfte von uns, denke ich :)).

Ein Nachteil ist, dass mit einer scripted Lösung oder auf andere Weise, die RedGate Werkzeuge ausreichend glatt sind, dass es einfach zu SQL Realitäten zugrunde liegen die Abstraktion zu vergessen. Wenn Sie alle Spalten in einer Tabelle umbenennen, hat SqlCompare keine Möglichkeit, die alten Säulen auf die neuen Spalten zuordnen und werden alle Daten in der Tabelle löschen. Es wird Warnungen generieren, aber ich habe Leute Vergangenheit gesehen klicken. Es gibt einen allgemeinen Punkt hier lohnt sich, glaube ich, dass Sie nur DB Versionsverwaltung automatisieren und Upgrade so weit - die Abstraktionen sind sehr undicht.

Beantwortet am 15/10/2008 um 10:44
quelle vom benutzer

stimmen
14

Mit VS 2010 verwenden, um das Datenbank-Projekt.

  1. Skript aus Ihrer Datenbank
  2. Nehmen Sie Änderungen an Skripten oder direkt auf dem DB-Server
  3. Synchronisierung mit Daten> Schemavergleich

Macht eine perfekte DB Versionierung Lösung und macht die Synchronisierung DB ein Kinderspiel ist.

Beantwortet am 25/02/2011 um 21:18
quelle vom benutzer

stimmen
14

Wir verwenden DBGhost unsere SQL - Datenbank zu verwalten. Dann legen Sie Ihre Skripte eine neue Datenbank in Ihrer Versionskontrolle zu bauen, und es wird entweder eine neue Datenbank erstellen oder aktualisieren Sie eine vorhandene Datenbank auf das Schema in der Versionskontrolle. So können Sie Änderungsskripts kümmern müssen nicht über das Erstellen von (obwohl man noch tun kann , dass, wenn Sie zum Beispiel den Datentyp einer Spalte ändern möchten , und müssen Daten konvertieren).

Beantwortet am 07/08/2008 um 22:12
quelle vom benutzer

stimmen
12

Es ist ein guter Ansatz Datenbank-Skripte in der Versionskontrolle mit Änderungsskripts zu speichern, damit Sie alle eine Datenbank aktualisieren können Sie haben. Auch könnten Sie Schemata für verschiedene Versionen zu speichern, so dass Sie eine vollständige Datenbank erstellen können, ohne alle Änderungsskripts beantragen zu müssen. Handhabung sollte die Skripte automatisiert werden, so dass Sie die manuelle Arbeit nicht tun müssen.

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

Das Automatisierungswerkzeug sollte Mittel für Datenbank-Metadaten Umgang, die sind, welche Datenbanken erzählt, in welchem ​​Zustand der Entwicklung und dem Tabellen enthalten Version steuerbare Daten und so weiter.

Beantwortet am 24/09/2008 um 07:11
quelle vom benutzer

stimmen
11

Sie können auch bei einer Migration Lösung suchen. Diese können Sie Ihre Datenbank-Schema in C # -Code spezifizieren, und rollen Sie Ihre Datenbankversion nach oben und unten MSBuild verwenden.

Ich bin derzeit mit DbUp , und es ist gut funktioniert.

Beantwortet am 06/08/2008 um 23:51
quelle vom benutzer

stimmen
10

Sie erwähnt haben keine Einzelheiten über Ihre Zielumgebung oder Zwänge, so kann dies nicht vollständig anwendbar sein ... aber wenn Sie nach einem Weg gesuchte effektiv ein sich entwickelndes DB-Schema zu verfolgen und sind nicht abgeneigt, die Idee der Verwendung von Rubin, Active die Migrationen sind bis Ihre Gasse.

Migrations programmatisch Datenbank Transformationen unter Verwendung eines Ruby-DSL definieren; jede Transformation angewandt oder (in der Regel) wird zurückgesetzt, so dass Sie auf eine andere Version des DB-Schemas zu einem bestimmten Zeitpunkt springen. Die Datei diese Transformationen definieren, können in die Versionskontrolle wie jedes andere Stück Quellcode überprüft werden.

Da Migration ein Teil sind Active , finden sie in der Regel den Einsatz in Full-Stack Rails - Anwendungen; Sie können jedoch Active unabhängig von Rails mit minimalem Aufwand nutzen. Sehen Sie hier für eine ausführlichere Behandlung der Verwendung von AR der Migrationen außerhalb von Rails.

Beantwortet am 02/08/2008 um 18:54
quelle vom benutzer

stimmen
9

Jede Datenbank soll unter Quellcodeverwaltung sein. Was fehlt , ist ein Werkzeug , um alle Datenbankobjekte automatisch Skript - und „Konfigurationsdaten“ - Datei, die dann an einem beliebigen Quelle Steuerungssystem hinzugefügt werden kann. Wenn Sie SQL Server verwenden, dann ist meine Lösung hier: http://dbsourcetools.codeplex.com/ . Habe Spaß. - Nathan.

Beantwortet am 07/07/2009 um 13:58
quelle vom benutzer

stimmen
8

Es ist einfach.

  1. Wenn die Basis Projekt bereit ist, dann müssen Sie vollständigen Datenbank-Skript erstellen. Dieses Skript wird auf SVN verpflichtet. Es ist die erste Version.

  2. Danach werden alle Entwickler erstellt Änderungsskripts (ALTER ..., neue Tabellen, sprocs, etc).

  3. Wenn Sie aktuelle Version benötigen, dann sollten Sie alle neuen Änderungsskripts auszuführen.

  4. Wenn App zur Produktion freigegeben wird, dann gehen Sie zurück zu 1 (aber dann wird es sukzessive Version natürlich).

Nant werden Ihnen helfen, diese Änderung Skripte auszuführen. :)

Und merke dir. Alles funktioniert gut, wenn es Disziplin ist. Jedes Mal, wenn Datenbankänderung dann entsprechende Funktionen im Code verpflichtet ist, ist zu verpflichtet.

Beantwortet am 16/05/2009 um 12:31
quelle vom benutzer

stimmen
7

Um den Dump einer Quellcodeverwaltungssystem, das wenig schneller, können Sie sehen, welche Objekte seit dem letzten Mal geändert haben, indem Sie die Versionsinformationen in sysobjects verwenden.

Setup: Erstellen Sie eine Tabelle in jeder Datenbank , die Sie schrittweise überprüfen möchten die Versionsinformationen aus der letzten Zeit halten Sie es überprüft (leer auf dem ersten Lauf). Deaktivieren Sie diese Tabelle , wenn Sie Ihre gesamte Datenstruktur neu 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 Betriebsmodus: Sie können die Ergebnisse aus dieser SQL - nehmen, und SQL - Skripte generieren nur für die , die Sie interessiert sind, und sie in eine Quelle Kontrolle Ihrer Wahl setzen.

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 IGNORE  #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 IGNORE  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

Hinweis: Wenn Sie einen Nicht-Standard - Sortierung in einer Ihrer Datenbanken verwenden, müssen Sie ersetzen /* COLLATE */mit Datenbankkollatierung. dhCOLLATE Latin1_General_CI_AI

Beantwortet am 24/09/2008 um 13:53
quelle vom benutzer

stimmen
7

Da unsere App über mehrere RDBMS arbeiten muss, speichern wir unser Schema - Definition in der Versionskontrolle mit Hilfe der Datenbank-neutral Torque - Format (XML). Wir auch versions steuern die Referenzdaten für unsere Datenbank im XML - Format wie folgt (wobei „Beziehung“ ist eine der Referenztabellen):

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

Wir haben dann home-grown-Tools verwenden, um das Upgrade-Schema zu generieren und Referenzdaten-Skripte aktualisieren, die auf Version, um von Version X von der Datenbank erforderlich sind, X + 1.

Beantwortet am 24/09/2008 um 06:49
quelle vom benutzer

stimmen
7

Wenn Sie eine kleine Datenbank haben , und Sie wollen die ganze Sache auf die Version, diese Batch - Skript könnte helfen. Es löst, komprimiert und überprüft eine MSSQL - Datenbank MDF - Datei in Subversion.

Wenn Sie vor allem auf die Version Ihr Schema wollen und haben nur eine kleine Menge von Referenzdaten, können Sie möglicherweise verwenden SubSonic Migrationen , dass zu behandeln. Der Vorteil ist , dass man leicht wandert nach oben oder unten auf eine bestimmte Version.

Beantwortet am 07/08/2008 um 22:21
quelle vom benutzer

stimmen
6

Ich schrieb dies vor einer Weile App http://sqlschemasourcectrl.codeplex.com/ die Ihre MSFT SQL DB - Scan wird so oft wie Sie wollen , und automatisch Dump Ihre Objekte (Tabellen, Views, Procs, Funktionen, SQL - Einstellungen) in SVN. Klappt wunderbar. Ich benutze es mit Unfuddle (die mir Warnungen auf checkins erhalten können)

Beantwortet am 23/09/2010 um 03:35
quelle vom benutzer

stimmen
6

Wir hatten die Notwendigkeit Version unserer SQL-Datenbank, nachdem wir zu einer x64-Plattform und unsere alte Version brach mit der Migration migriert. Wir schrieben eine C # Anwendung, die SQLDMO verwendet, um alle SQL-Objekte in einen Ordner zu kartieren:

                Wurzel
                    Servername
                       Name der Datenbank
                          Schemaobjekte
                             Datenbank-Trigger *
                                .ddltrigger.sql
                             Funktionen
                                ..function.sql
                             Sicherheit
                                Rollen
                                   Anwendungsrollen
                                      .approle.sql
                                   Datenbankrollen
                                      .role.sql
                                Schemen *
                                   .schema.sql
                                Benutzer
                                   .user.sql
                             Lager
                                Volltextkataloge *
                                   .fulltext.sql
                             Gespeicherte Prozeduren
                                ..proc.sql
                             Synonyme *
                                .synonym.sql
                             Tische
                                ..table.sql
                                Einschränkungen
                                   ... chkconst.sql
                                   ... defconst.sql
                                Indizes
                                   ... index.sql
                                Schlüssel
                                   ... fkey.sql
                                   ... pkey.sql
                                   ... ukey.sql
                                Löst aus
                                   ... trigger.sql
                             Arten
                                Benutzerdefinierte Datentypen
                                   ..uddt.sql
                                XML-Schema-Sammlungen *
                                   ..xmlschema.sql
                             Ansichten
                                ..view.sql
                                Indizes
                                   ... index.sql
                                Löst aus
                                   ... trigger.sql

Die Anwendung würde vergleichen dann die neu geschriebene Version auf die Version im SVN gespeichert und wenn es Unterschiede ist es würde SVN aktualisieren. Wir stellten fest, dass der Prozess ausgeführt wird, sobald eine Nacht ausreichend war, da wir viele Änderungen an SQL machen das nicht. Es ermöglicht uns, Veränderungen auf alle Objekte verfolgen wir kümmern uns um und ermöglicht es uns, unser volles Schema im Falle eines ernsten Problem neu zu erstellen.

Beantwortet am 09/10/2008 um 15:54
quelle vom benutzer

stimmen
6

Wir speichern nicht das Datenbankschema, speichern wir die Änderungen an der Datenbank. Was wir tun, ist die Schema-Änderungen speichern, so dass wir eine Änderung Skript für jede Version der Datenbank erstellen und es auf unsere Kunden-Datenbanken. Ich schrieb eine Datenbank-Utility-Anwendung, die mit unserer Anwendung verteilt wird, die das Skript lesen und wissen, welchen Updates angewandt werden muß. Es hat auch genug Smarts Ansichten und gespeicherte Prozeduren aktualisieren je nach Bedarf.

Beantwortet am 07/08/2008 um 00:00
quelle vom benutzer

stimmen
5

Ich stimme mit ESV Antwort und für diesen genauen Grund begann ich ein wenig ein Projekt vor einiger Zeit Datenbank-Updates in einer sehr einfachen Datei zur Aufrechterhaltung der dann eine lange Seite aus Quellcode gehalten werden kann. Es ermöglicht eine einfache Updates für Entwickler sowie UAT und Produktion. Das Tool arbeitet auf, aber SQL Server und MySQL.

Einige Projekteigenschaften:

  • Ermöglicht Schemaänderungen
  • Ermöglicht Wert Baumbestand
  • Ermöglicht separate Testdaten Einsätze für zB. UAT
  • Ermöglicht Option für Rollback (nicht automatisiert)
  • Behält Unterstützung für SQL Server und MySQL
  • Hat die Fähigkeit, Ihre vorhandene Datenbank in der Versionskontrolle mit einem einfachen Befehl (SQL Server nur ... arbeitet noch an mysql) zu importieren

Der Code ist auf Google Code gehostet. Bitte beachten Sie auch Google-Code für einige weitere Informationen

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

Beantwortet am 24/02/2011 um 19:28
quelle vom benutzer

stimmen
5

Wir habe gerade angefangen Team Foundation Server. Wenn Ihre Datenbank ist mittelgroß, dann Visual Studio hat einige schöne Projekt Integrationen mit eingebautem vergleichen, Daten zu vergleichen, Datenbank-Refactoring-Tools, Datenbank-Test-Framework, und sogar Datengenerierungstools.

Aber das Modell paßt nicht sehr groß oder Datenbanken Dritter (die encrypt Objekte) sehr gut. Also, was haben wir getan nur Objekte unserer maßgeschneiderten zu speichern. Visual Studio / Team Foundation Server funktioniert sehr gut dafür.

TFS Datenbank Chef arch. Blog

MS TFS-Website

Beantwortet am 22/08/2008 um 18:13
quelle vom benutzer

stimmen
5

Die typische Lösung ist die Datenbank als notwendig und Backup der Dateien auszugeben.

Je nach Entwicklungsplattform kann es Open-Source-Plugins zur Verfügung. Ihren eigenen Code rollen, es zu tun ist in der Regel ziemlich trivial.

Hinweis: Sie können die Datenbank-Dump sichern möchten, anstatt sie in die Versionskontrolle setzen. Die Dateien können sehr groß schnell in der Versionskontrolle zu bekommen, und führen Sie Ihr gesamtes Quellensteuersystem zu verlangsamen (Ich bin eine CVS-Horror-Geschichte im Moment erinnere).

Beantwortet am 03/08/2008 um 02:49
quelle vom benutzer

stimmen
4

Ich verwende auch eine Version in der Datenbank über die Datenbank erweiterten Eigenschaften Familie von Stored Procedures. Meine Anwendung hat Skripte für jede Version Schritt (dh. 1,1-1,2 bewegen). Wenn entfalten, sieht es bei der aktuellen Version und läuft dann den Skripte nacheinander, bis die letzte App-Version erreicht. Es gibt kein Skript, das die gerade ‚endgültige‘ Version hat, auch bereitstellen auf eine saubere DB die deploy über eine Reihe von Upgrade-Schritte tut.

Nun, was Ich mag hinzuzufügen, ist, dass ich vor einer Präsentation 2 Tagen gesehen auf dem MS-Campus über die neue und kommende VS DB Ausgabe. Die Präsentation wurde speziell zu diesem Thema konzentriert und ich wurde aus dem Wasser geblasen. Sie sollen es auf jeden Fall überprüfen, die neuen Anlagen auf der Beibehaltung Schema-Definition fokussiert sind in T-SQL-Skripts (erzeugt), eine Runtime-Delta-Engine Deployment Schema mit definierten Schema zu vergleichen und zu tun, um die Delta-Abspaltungen und die Integration mit Quellcode-Integration, bis zu und einschließlich MSBUILD kontinuierliche Integration zum automatischen build Tropfen. Der Tropfen wird einen neuen Dateityp enthält, die .dbschema Dateien, die zur Entfaltungsstelle und ein Kommandozeilenwerkzeug entnommen werden können, kann das eigentliche ‚Delta‘ tun und die Einrichtung ausgeführt wird. Ich habe einen Blog-Eintrag zu diesem Thema mit Links zu dem VSDE Downloads, sollten Sie sie heraus überprüfen:http://rusanu.com/2009/05/15/version-control-and-your-database/

Beantwortet am 15/05/2009 um 20:26
quelle vom benutzer

stimmen
4

Vor einiger Zeit fand ich ein VB bas - Modul , das DMO und VSS verwendet , um Objekte eine ganze db Skript aus und in VSS zu bekommen. Ich drehte ihn in ein VB Script und veröffentlichte es hier . Sie könnten leicht die VSS - Anrufe nehmen und verwenden Sie die DMO Sachen alle Skripte zu generieren, und dann SVN rufen aus dem gleichen Batch - Datei, die die VBScript ruft sie zu lesen?

Dave J

Beantwortet am 16/09/2008 um 18:55
quelle vom benutzer

stimmen
3

Es ist eine sehr alte Frage, aber viele versuchen, dies auch jetzt zu lösen. Alles, was sie tun müssen, ist zu Visual Studio-Datenbank-Projekten zu erforschen. Ohne diese sieht jede Datenbank-Entwicklung sehr schwach. Von Code Organisation Bereitstellung Versionierung, vereinfacht es alles.

Beantwortet am 23/06/2015 um 11:26
quelle vom benutzer

stimmen
2

Schauen Sie sich DBGhost http://www.innovartis.co.uk/ . Ich habe jetzt seit 2 Jahren in einer automatisierten Weise verwendet und es funktioniert super. Es ermöglicht unsere DB viel wie ein Java oder C Build geschieht passieren baut, mit Ausnahme der Datenbank. Du weißt was ich meine.

Beantwortet am 02/11/2009 um 23:17
quelle vom benutzer

stimmen
2

Nach meiner Erfahrung ist die Lösung verfolgt zwei Ziele:

  1. Sie müssen Änderungen an der Entwicklungsdatenbank behandeln, die durch mehrere Entwickler während der Entwicklung durchgeführt werden.

  2. Sie müssen Datenbank-Upgrades in Kunden-Websites behandeln.

Um zu behandeln 1 # benötigen Sie ein starkes Datenbank Diff / Merge-Tool. Das beste Werkzeug sollte in der Lage sein, die automatische Zusammenführung so weit wie möglich durchzuführen, während so dass Sie Konflikte manuell lösen nicht behandelte.

Das perfekte Werkzeug Griff soll Operationen zusammenführen, indem einen 3-Wege-Merge-Algorithmus, um die Änderungen zu berücksichtigen bringt, die in der ihrigen Datenbank und die MINE Datenbank, bezogen auf die BASE-Datenbank vorgenommen wurden.

Ich schrieb ein kommerzielles Tool für SQLite - Datenbanken manuelle Zusammenführung Unterstützung bietet und ich hinzufüge derzeit Unterstützung für 3-Wege - Merge - Algorithmus für SQLite. Check it out bei http://www.sqlitecompare.com

Um # 2 zu handhaben Sie ein Upgrade Rahmen anstelle benötigen.

Die Grundidee ist ein automatisches Upgrade Framework zu entwickeln, die wissen, wie man aus einem vorhandenen SQL-Schema auf das neueren SQL-Schema aktualisieren und einen Upgrade-Pfad für jede bestehende DB Installation aufbauen kann.

Schauen Sie sich meine Artikel über das Thema in http://www.codeproject.com/KB/database/sqlite_upgrade.aspx eine allgemeine Vorstellung davon zu bekommen , was ich rede.

Viel Glück

Liron Levi

Beantwortet am 06/08/2009 um 11:28
quelle vom benutzer

stimmen
1

Ich würde mit Vergleichstool vorschlägt ein Versionskontrollsystem für Ihre Datenbank zu improvisieren. Eine gute Alternative ist xSQL Schemavergleich und xSQL Daten vergleichen .

Nun, wenn Ihr Ziel ist nur die Datenbank des Schema unter Versionskontrolle haben, können Sie einfach verwenden xSQL Schema Compare xSQL Snapshots des Schemas und fügen Sie diese Dateien in Ihrer Versionskontrolle zu generieren. Als, zurückzukehren oder Aktualisierung auf eine bestimmte Version zu vergleichen, nur die aktuelle Version der Datenbank mit dem Snapshot für die Zielversion.

Ach, wenn Sie auch die Daten unter Versionskontrolle haben wollen, können Sie xSQL Daten vergleichen verwenden Änderungsskripts für Sie Datenbank zu erzeugen und die SQL-Dateien in Ihrer Versionskontrolle hinzufügen. Sie könnten dann diese Skripte ausführen, um jede Version, die Sie wiederherstellen / aktualisieren möchten. Beachten Sie, dass für die ‚revert‘ Funktionalität, die Sie Änderungsskripts generieren müssen, dass, wenn sie ausgeführt wird Version 3 die gleiche wie Version 2 und für die ‚update‘ Funktionalität machen, müssen Sie Änderungsskripts erzeugen, die das Gegenteil tun.

Schließlich mit einigen grundlegenden Batch Programmierkenntnisse können Sie den gesamten Prozess automatisieren, indem Sie die Befehlszeilen-Version xSQL Schema mit Vergleichen und xSQL Daten vergleichen

Disclaimer: Ich bin zu xSQL dem Unternehmen assoziiert.

Beantwortet am 10/01/2017 um 16:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more