Versionskontrolle mit SQL Server

14

Ich starte ein neues Projekt und verwende SVN (mit Tortoise) als mein Versionskontrollsystem. Ich habe mich gefragt, ob es möglich ist, mit demselben System auch eine SQL Server-Datenbank zu verwalten.

Ich möchte meine Tabellen / Funktionen / Views / Procs / Trigger / etc versionieren. aber nicht meine Daten, da es sowieso nur Testdaten sind. Ich bin mir nicht sicher, wie ich das einrichten soll. Ich habe einige Optionen kennengelernt, möchte aber wissen, ob ich eine vermisst habe und ob es vielleicht einen Leitfaden oder etwas anderes gibt, das mir dabei hilft, damit zurechtzukommen.

Ich habe von Red Gate gehört und gesehen, aber ich suche nach etwas kostenlosem (oder zumindest sehr kostengünstigem). Ich weiß, dass ich immer selbst etwas schreiben könnte, aber ich versuche nicht wirklich, Zeit damit zu verbringen.

Eine Sache, auf die ich gestoßen bin, war ein Open-Source-Paket namens ScriptDB4Svn . Hat das schon mal jemand benutzt? Ist es gut? Kann es die Dinge tun, für die ich es brauche und ist es ziemlich einfach einzurichten?

yannis
quelle
1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?Warum hast du Angst, es selbst zu versuchen? Nimm es einfach und spiele herum.
Yannis
@YannisRizos - Ich werde es auf jeden Fall tun, wenn ich nicht zu viel Rückmeldung bekomme. Ich wollte nur versuchen, etwas Zeit zu sparen und herauszufinden, ob schon jemand damit gearbeitet hat oder ob jemand etwas von Anfang an ausprobiert und getestet hat das passte zu meinen Bedürfnissen, so dass ich etwas Experimentierzeit sparen konnte.
Hab gerade gemerkt, wie neu du hier bist. Programmers SE ist kein guter Ort, um Fragen zu stellen, nur um Zeit zu sparen. Wir erwarten wirklich, dass Sie solche Dinge für sich selbst tun , dh Ihre eigenen Nachforschungen anstellen, bevor Sie Fragen stellen . Oder fragen Sie alternativ im Chat (aber erwarten Sie keine soliden Antworten). Abgesehen davon ist es wirklich egal, denn der letzte Satz ist nicht Ihre Kernfrage, was eigentlich eine sehr gute ist (und richtig markiert, das ist selten für neue Benutzer, Kudos!).
Yannis
@YannisRizos - danke. Ich werde in den Chat springen, um zu sehen, ob ich Feedback für ScriptDB4Svn bekomme, und hier nach Updates für die Kernfrage suchen. Bearbeiten: Sieht so aus, als ob ich erst nach 20 Wiederholungen chatten kann. Na ja, Geduld, denke ich.

Antworten:

2

Technisch gesehen benötigen Sie nicht einmal ein Tool. Sie können die Objekte direkt skripten und in die Quellcodeverwaltung einchecken. Es ist ein bisschen mehr Arbeit ohne das Werkzeug, aber es ist definitiv praktikabel.

Übrigens: Ich habe das RedGate-Tool verwendet und es ist ziemlich clever und das Geld wert.

JohnFx
quelle
Grundsätzlich würde ich meine Arbeit in Management Studio erledigen und dann die Skripte in das SVN-Verzeichnis exportieren und dies grundsätzlich jedes Mal tun, wenn ich daran arbeite (wobei die alten bei jedem Export ersetzt werden). Ich denke das würde funktionieren. Es würde die SVN-Funktionalität behalten, zurückgesetzt zu werden, aber ja, es wäre eine Art Ärger. Vielleicht schaue ich mir die RedGate-Preise an und finde heraus, ob es sich für mich lohnt.
@Scott - Der manuelle Weg kann funktionieren, Sie müssen nur Ihre SQL-Entwicklung anders denken. Die geskripteten Versionen der Objekte sind die "offiziellen" und die in SQL ist nur eine kompilierte Version davon. Genau wie dein Quellcode.
JohnFx
Ich habe beschlossen, die Dinge manuell zu erledigen und möglicherweise ein Skript mithilfe der Hilfe in den von Mike Nakis bereitgestellten Links zu implementieren. Derzeit verwende ich jedoch nur die integrierte GUI in Management Studio, um die DB-Erstellungsskripten zu exportieren, wenn ich fertig bin arbeiten, und checken Sie diese ein und lassen Sie SVN sie auf diese Weise versionieren. Da ich mich dazu entschlossen habe, Dinge manuell zu erledigen, bekommst du die Antwort, dass ich kein Werkzeug brauche, um diese
1

Es hört sich so an, als hätten Sie hauptsächlich ein Microsoft-Setup. Sie könnten einen Blick in Datenbankprojekte werfen (früher bekannt als DataDude). Sie verwandeln T-SQL in Visual Studio in eine erstklassige Sprache. du kannst:

  • Projekte kompilieren - es wird nicht nur ein endgültiges Skript erstellt, sondern sichergestellt, dass Objektnamen usw. vorhanden sind.
  • Führen Sie eine statische Code-Analyse durch. Stellen Sie beispielsweise sicher, dass Sie immer auf Objekte verweisen, indem Sie deren Schema einbeziehen (z. B. [dbo]in den meisten Fällen), um die Leistung um 30% zu steigern.
  • Erstellen Sie Diff-Skripte, indem Sie verschiedene Versionen des Projekts vergleichen.
  • Aktualisieren Sie Ihr Projekt über eine Datenbank oder ein Skript (Reverse Engineering).
  • Intellisense.
  • Es gibt keine Diagrammwerkzeuge.

Sie vereinheitlichen Ihren Code und Ihren Datenbankcode auch unter Quellcodeverwaltung. Wenn Sie Menschen-up und Skript Ihrer Datenbankobjekte (anstelle von Davinci Werkzeuge in SSMS) Sie landen auch eine IDE - das ist schön.

Jonathan Dickinson
quelle
0

Sie können Rails verwenden. Rails hat ein Konzept für Datenbankmigrationen, die Sie anwenden oder zurücksetzen können. Nach meiner Erfahrung ist dies der beste Weg, eine Datenbank zu versionieren. Sie checken diese Migrationsdateien in SVN ein.

In meinem aktuellen Projekt entwickeln wir die Anwendung nicht in Ruby, verwenden jedoch weiterhin Rails, um die Datenbank zu verwalten. Ich würde es nicht anders machen.

Vinnie
quelle
Gibt es Anleitungen, die dies ein bisschen näher erläutern und so etwas einrichten?
Tatsächlich ist es keine gute Idee, Rails zusammen mit .NET-Technologien zu verwenden.
Altern
Kapitel über Rails-Migrationen ( guides.rubyonrails.org/migrations.html ). Dies sollte ausreichen, um Ihnen den Einstieg zu erleichtern und Ihnen den nötigen Hintergrund zu geben, warum dies eine gute Idee ist. @altern - da Sie Rails nur zum Manipulieren und Versionieren der Datenbank verwenden, sollte dies Auswirkungen auf und .NET-Technologien haben. Sie können auf die DB genauso zugreifen und sie verwenden, als würden Sie keine Schienen verwenden. Es würde mir nichts ausmachen, einige Hinweise auf Ihre Bedenken zu sehen. Ist IronRuby nicht eine .NET-Implementierung von Ruby and Rails?
Vinnie
> Ist IronRuby nicht eine .NET-Implementierung von Ruby and Rails? IronRuby ist eine .NET-Implementierung von Ruby . Ich bin nicht sicher, ob Rails auf IronRuby richtig funktioniert. Mein generelles Argument gegen die Verwendung von Rails zum Zweck der DB-Versionierung ist, dass Ruby und verwandte Technologien (RoR, Migratinos) eine ziemlich steile Lernkurve aufweisen, insbesondere für so einfache Aufgaben wie die DB-Versionierung. Es ist in Ordnung, es für andere Zwecke zu verwenden, nicht nur für Migrationen. Andernfalls wird die Komplexität des Projekts nur erhöht, ohne dass sich dies positiv auswirkt.
Altern
0

Dies wurde bereits in stackoverflow besprochen: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

Außerdem enthält dieser externe Artikel einige zusätzliche Informationen: http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated, zusammen mit Beispielcode in Form einer Windows-Anwendung.

Da das, was Sie tun möchten, etwas ist, was ich für MS Access selbst getan habe, werde ich Ihnen sagen, was ich getan habe, falls es Ihnen einige Ideen gibt: Ich habe ein Modul namens Ado2Xml geschrieben, das das Schema und die Daten jedes ADO konvertiert -zugängliche Datenbank zu XML und zurück. Es kennt sich jedoch nur mit Tabellen und Ansichten aus. Keine gespeicherten Prozeduren, keine Trigger, kein Nichts. Auf jeden Fall wird in Ihrem Fall dieses Modul durch das Tool ersetzt, das Sie vermutlich finden werden, welches mit MS-SQL das macht, was Sie wollen. Bei jedem Start meiner Anwendung wird der Zeitstempel der Datenbank mit dem Zeitstempel der gespeicherten XML-Datei verglichen. Wenn die XML-Datei aktueller ist, wird die Datenbank zerstört und Ado2Xml aufgerufen, um sie aus der XML-Datei neu zu erstellen. Wenn meine Anwendung beendet wird, geschieht dies in umgekehrter Reihenfolge: Sie ruft Ado2Xml auf, um die Datenbank in die XML-Datei zu exportieren. Tatsächlich, Die ADO-Objekte, die das Datenbankschema extrahieren, sind aus irgendeinem Grund sehr langsam, sodass der Exportvorgang einige Zeit in Anspruch nimmt. Um zu vermeiden, dass meine Anwendung jedes Mal beendet wird und Visual Studio vom Debugging-Layout zum Bearbeitungslayout wechselt, startet meine App unmittelbar vor dem Beenden eine externe App, um den Export durchzuführen, damit sie beendet werden kann sofort.

Mike Nakis
quelle
Die beiden Links, die Sie angegeben haben, sind wahrscheinlich etwas, das ich selbst einrichten möchte, damit ich die manuellen Schritte, die ich gerade mache, im Grunde automatisch ausführen kann. Danke für die!
0

Ja, ich habe ein ähnliches (intern entwickeltes) Tool für ein vorheriges Projekt verwendet. Es würde alle Tabellen, Views, Sprocs, Trigger usw. in einzelne .sql-Dateien skripten. Dann hatten wir ein Skript, das jede Nacht lief, um zu "validieren", dass sich alles in unserer "Entwicklungs" -Datenbank in der Quellcodeverwaltung widerspiegelte.

Der normale Workflow besteht also darin, dass Sie Ihren Code ändern, die entsprechenden Tabellen und Sprocs in der Entwicklungsdatenbank nach Bedarf ändern und dann das von uns verwendete Tool ausführen, mit dem alle skriptbasierten .sql-Dateien aktualisiert werden. Sie würden dann alles auf einmal einchecken.

Das Problem bestand darin, dass der Code "funktioniert" (und Komponententests bestanden), wenn Sie vergessen haben, das Tool auszuführen, da die Datenbank "korrekt" war, die neuen Sprocs / Tabellen jedoch keine Quellcodeverwaltung darstellen.

Wir haben also jede Nacht ein Skript, das den Quellcode überprüft und dann das Tool zum Aktualisieren aller Skripte verwendet. Wenn ein Unterschied festgestellt wurde, hat jemand vergessen, seine Änderungen einzuchecken, und es wurde eine E-Mail-Benachrichtigung generiert. Es war im Grunde nur eine Möglichkeit, um sicherzustellen, dass wir nicht vergessen, die Quellcodeverwaltung auf dem neuesten Stand zu halten.

Es war ein bisschen nervig, weil es schwierig war, an Änderungen zu arbeiten, die mehrere Tage dauerten, aber es war besser, als nichts zu haben ...

Dean Harding
quelle
Können Sie näher darauf eingehen Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? Vielen Dank für Ihre Antwort.
@Scott: Ich habe die Antwort so bearbeitet, dass sie etwas detaillierter ist.
Dean Harding