2012-10-17 3 views
7

Ich habe Git Source Control Provider Setup und läuft gut.Wie Versionskontrolle SQL Server-Datenbank mit Visual Studio Git Source Control Provider

Für Visual Studio-Projekte. Das Problem besteht darin, dass jedes Projekt fest mit an eine SQL Server-Datenbank gebunden ist.

Ich weiß how to version control a database in seiner eigenen .git Repository, aber dies ist weder praktisch noch wirklich robust, denn im Idealfall würde ich das gleiche ADD will, COMMIT, TAG und Verzweigungsbefehle auf beiden Verzeichnisbäumen gleichzeitig zu betreiben, in synchronisierter Weise.

Gibt es eine Möglichkeit, SQL Server-Datenbank mit Visual Studio Git Source Control Provider in der beschriebenen Weise zu git?

+1

@marc_s Danke für die Korrektur des Tippfehlers. – Souper

Antwort

4

Sie können Ihr Datenbankschema als Visual Studio-Projekt speichern, indem Sie SQL Server Data Tools verwenden und dann dieses Projekt mit Git kontrollieren.

+0

Ich wusste nicht, dass es möglich ist, ein Datenbankschema als Visual Studio-Projekt zu speichern. Das ist großartig! Ursprünglich dachte ich daran, SSMS zu 'Script Database as'>' DROP and CREATE To' zu verwenden, um das gesamte Ding als ein textbasiertes Skript in das Verzeichnis der Visual Studio-Lösung zu exportieren, aber eine integrierte Lösung, wie Sie sie beschreiben, klingt vielversprechender. Welches Werkzeug der 'SQL Server Data Tools' exportiert tatsächlich? Muss ich den gesamten Werkzeugsatz installieren? +1 – Souper

+1

Es ist ein Paket, können Sie es hier herunterladen: http: // msdn.microsoft.com/en-us/data/hh297027 Hier haben Sie einige Dokumentationen: http://msdn.microsoft.com/en-us/library/hh272702(v=vs.103).aspx oder Videos: http: // msdn.microsoft.com/en-us/data/hh297028 –

0

Als 5 Jahre lang in der Datenbankversion Kontrollraum (als Direktor des Produktmanagements bei DBmaestro) und als DBA seit über zwei Jahrzehnten gearbeitet habe, kann ich Ihnen die einfache Tatsache sagen, dass Sie die Datenbankobjekte nicht wie Sie behandeln können Behandeln Sie Ihre Java, C# oder andere Dateien und speichern Sie die Änderungen in einfachen DDL-Skripten.

Es gibt viele Gründe, und ich werde ein paar nennen:

  • Dateien werden lokal auf der Entwickler-PC gespeichert und die s/er Marken haben keinen Einfluss auf andere Entwickler. Ebenso ist der Entwickler nicht von Änderungen betroffen, die ihr Kollege vorgenommen hat. In der Datenbank ist dies (normalerweise) nicht der Fall und Entwickler teilen sich die gleiche Datenbank Umgebung, so dass alle Änderungen, die für die Datenbank festgeschrieben wurden Auswirkungen auf andere.
  • Änderungen am Veröffentlichungscode werden mithilfe der Check-In/Änderungen senden/ usw. vorgenommen (abhängig davon, welches Tool zur Quellcodeverwaltung Sie verwenden). An diesem Punkt wird der Code aus dem lokalen Verzeichnis des Entwicklers in der Quellcodeverwaltung eingefügt. Entwickler, die den neuesten Code abrufen möchten, müssen dies vom Quellcodeverwaltungstool anfordern. In der Datenbank ist die Änderung bereits vorhanden und wirkt sich auf andere Daten aus, auch wenn sie nicht in das Repository eingecheckt wurde.
  • Während des Eincheckens der Datei führt das Quellcodeverwaltungstool einen Konflikt aus, um festzustellen, ob die gleiche Datei während der Zeit, in der Sie Ihre lokale Kopie geändert haben, von einem anderen Entwickler geändert wurde. Auch hier gibt keine Überprüfung dafür in der Datenbank. Wenn Sie eine Prozedur von Ihren lokalen PC ändern und gleichzeitig das gleiche Verfahren mit Code-Form meines lokalen PC ändern, dann überschreiben wir gegenseitig die Änderungen.
  • Der Build-Prozess von Code wird getan, indem Sie die Bezeichnung/neueste Version des Codes in ein leeres Verzeichnis und führen Sie dann einen Build - kompilieren.Die Ausgabe sind Binärdateien, in denen wir & die vorhandene Kopie kopieren. Es ist uns egal, was vorher war. In der Datenbank können wir nicht die Datenbank neu erstellen, da wir die Daten pflegen müssen! Die Implementierung führt auch SQL-Skripts aus, die im Build-Prozess generiert wurden.
  • Bei der Ausführung der SQL-Skripte (mit den Befehlen DDL, DCL, DML (für statische -Inhalte) gehen Sie davon aus, dass die aktuelle Struktur der -Umgebung der Struktur beim Erstellen der Skripts entspricht. Wenn nicht, dann können Ihre Skripts fehlschlagen, während Sie versuchen, eine neue Spalte hinzuzufügen, die bereits existiert.
  • SQL-Skripte als Code Behandlung und manuell zu erzeugen sie Syntaxfehler verursachen, Abhängigkeiten Datenbankfehler, Skripte, die nicht wiederverwendbar sind, welche die Aufgabe der Entwicklung, Pflege erschweren, diese Skripte zu testen. Darüber hinaus können diese Skripts in einer -Umgebung ausgeführt werden, die sich von der unterscheidet, die Sie ausführen möchten .
  • Manchmal passt das Skript im Versionskontroll-Repository nicht die Struktur des Objekts, das getestet wurde und dann Fehler passieren in der Produktion!

Es gibt viele mehr, aber ich denke, du hast das Bild.

Was ich gefunden, die funktioniert, ist die folgende:

  1. Verwenden eines erzwungene Versionskontrollsystem, die Check-out/Check-in Operationen auf den Datenbankobjekten erzwingt. Dies stellt sicher, dass das Versionskontroll-Repository dem Code entspricht, der eingecheckt wurde, da es die Metadaten des Objekts in der Eincheck-Operation liest und nicht als separater Schritt manuell ausgeführt wird. Dies ermöglicht auch mehrere Entwickler parallel in der gleichen Datenbank arbeiten, während verhindern, dass sie versehentlich gegenseitig Code überschreiben.
  2. eine Wirkungsanalyse Verwenden Sie die Basislinien als Teil des Vergleichs nutzen, Konflikte zu identifizieren und festzustellen, ob eine Differenz (wenn die Objektstruktur zwischen dem Source-Control Repository und der Datenbank zu vergleichen) ist eine echte Veränderung, die Herkunft von Entwicklung oder ein Unterschied, der von einem anderen Pfad stammt und dann sollte es übersprungen werden, wie z. B. verschiedene Zweig oder eine Notfall-Fix.
  3. Verwenden Sie eine Lösung, die die Impact-Analyse für viele -Schemas auf einmal mithilfe der UI oder mithilfe der API ausführen kann, um schließlich den Build-Prozess zu automatisieren.

Ein Artikel, den ich dazu schrieb, wurde here veröffentlicht, Sie können es gerne lesen.

+0

Dies ist eine gute Antwort, die mehr Aufmerksamkeit verdient! Kann ich hinzufügen, dass das Tool, wenn Sie das SQL Ihrer Anwendung mit [QueryFirst] verwalten (https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst), Selbsttestmethoden für jede in Ihrem Binärprogramm kompilierte Abfrage generieren kann . Daher können Sie eine Binärdatei mit einer Produktions-DB testen und sich vergewissern, dass alle Abfragen ausgeführt werden, und dieselben Spalten wie bei der Entwicklung der Anwendung zurückgeben. QueryFirst ist * das einzige * Tool, von dem ich weiß, dass es das tun wird. Haftungsausschluss: Ich habe es geschrieben. – bbsimonbb

Verwandte Themen