Wie Sie Datenbankänderungen in der Quellcodeverwaltung verfolgen?

stimmen
22

Wir verwenden SQL Server 2000/2005 und Vault oder SVN auf den meisten unserer Projekte. Ich habe nicht eine anständige Lösung für die Erfassung Datenbank-Schema / proc Änderungen in entweder Quellkontrollsystem gefunden.

Unsere aktuelle Lösung ist recht umständlich und schwierig zu erzwingen (Skript über das Objekt, das Sie in die Datenbank ändern und begehen).

Wir haben eine Menge Ideen, wie dieses Problem mit einiger kundenspezifische Entwicklung in Angriff zu nehmen, aber ich würde lieber installieren Sie ein vorhandenes Werkzeug (bezahlte Werkzeuge sind in Ordnung).

Also: Wie verfolgen Sie Ihre Datenbank Code-Änderungen? Haben Sie irgendwelche empfohlenen Werkzeuge haben?


Bearbeiten:

Vielen Dank für alle Vorschläge. Aus Zeitgründen, würde ich eher nicht meine eigene Rolle hier. Und die meisten der Vorschläge haben den Fehler, dass sie die Entwickler benötigen einige Verfahren zu folgen.

Stattdessen wäre eine ideale Lösung, um die SQL-Datenbank für Änderungen überwachen und alle erkannten Änderungen an SCM begehen. Zum Beispiel, wenn SQL Server ein auf Add-hatte, dass jede DML Änderung mit dem Benutzer aufnehmen könnte, die die Änderung vorgenommen hat, dann begehen Sie das Skript dieses Objekts SCM, würde ich begeistert sein.

Wir sprachen intern über zwei Systeme: 1. In SQL 2005, Objektberechtigungen verwenden, um Sie zu beschränken von Ändern eines Objekts, bis Sie eine „Kasse“ tat. Dann würde die checkin Prozedur Skript in das SCM. 2. Führen Sie einen geplanten Auftrag Änderungen zu erkennen und begehen sie (anonym) an SCM.

Es wäre schön, wenn ich den Benutzer-Aktion Teil überspringen könnte und habe das System automatisch alle damit umgehen.

Veröffentlicht am 09/12/2008 um 14:57
quelle vom benutzer
In anderen Sprachen...                            


14 antworten

stimmen
3

Ein armer Mann-Lösung wäre hinzuzufügen, um eine pre-commit Hook-Skript, das die neueste Db-Schema in eine Datei-Dumps und haben diese Datei an Ihrer SVN-Repository zusammen mit Ihrem Code. Dann können Sie die Db-Schema-Dateien aus jeder Revision diff.

Beantwortet am 09/12/2008 um 15:01
quelle vom benutzer

stimmen
1

Ich verpflichte nur das SQL-alter-Statement zusätzlich zur vollständigen SQL-CreateDB-Anweisung.

Beantwortet am 09/12/2008 um 15:01
quelle vom benutzer

stimmen
1

Hier ist Jeff Atwood auf Ihre Datenbank unter Versionskontrolle Get .

Beantwortet am 09/12/2008 um 15:03
quelle vom benutzer

stimmen
15

Verwenden Sie Visual Studio-Datenbank-Edition-Skript aus Ihrer Datenbank. Funktioniert wie ein Zauber und Sie können jedes Quelle-Steuersystem verwenden, natürlich am besten, wenn es VS-Plugins hat. Dieses Tool hat auch eine Reihe weiterer nützlicher Funktionen. Überprüfen Sie sie heraus hier in diesem großen Blog-Post

http://www.vitalygorn.com/blog/post/2008/01/Handling-Database-easily-with-Visual-Studio-2008.aspx

Check-out oder MSDN für die offizielle Dokumentation

Beantwortet am 09/12/2008 um 15:03
quelle vom benutzer

stimmen
1

In SQL2000 erzeugen jedes Objekt in seiner eigenen Datei , dann überprüfen Sie sie alle in die Quellcodeverwaltung. Lassen Sie Ihre Source - Control die Änderungshistorie behandeln.

In SQL 2005, müssen Sie ein Stück Code schreiben, um alle Objekte in separate Dateien zu erzeugen.

Beantwortet am 09/12/2008 um 15:04
quelle vom benutzer

stimmen
5

Ich muß sagen, ich denke, ein Visual Studio-Datenbank-Projekt ist auch eine vernünftige Lösung für die Quellcodeverwaltung Dilemma. Wenn es richtig eingerichtet ist können Sie die Skripte für die Datenbank aus der IDE ausführen. Wenn Ihr Skript alt ist, erhalten Sie die neueste, gegen die DB laufen. Haben Sie ein Skript, das alle Objekte als auch neu erstellt, wenn Sie benötigen, müssen neue Objekte in die dieses Skript von Hand als auch hinzugefügt werden, aber nur einmal

Ich mag jede Tabelle, proc und Funktion in einem eigenen Datei zu sein.

Beantwortet am 09/12/2008 um 15:19
quelle vom benutzer

stimmen
0

Unsere DBAs regelmäßig prod gilt das, was in SVN ist und löschen Sie alle Objekte, die nicht unter Quellcodeverwaltung. Es dauert nur ein einziges Mal, bevor die devlopers nie wieder etwas in der Quellcodeverwaltung setzen vergessen.

Wir erlauben auch nicht, dass jemand ohne Script-Objekte zu prod zu bewegen, wie unsere Devs nicht prod Rechte hat, das ist einfach zu erzwingen.

Beantwortet am 09/12/2008 um 15:31
quelle vom benutzer

stimmen
1

Ihre eigenen von Grunde rollen würde nicht sehr machbar sein, aber wenn Sie ein SQL - Vergleichs - Tool wie verwenden Redgate SQL vergleichen SDK Ihre Änderungsdateien zu generieren für Sie wäre es nicht sehr lange dauern , bis die Hälfte-Rolle , was Sie wollen und dann prüfen , nur die Dateien , in Quellensteuerung. Ich rollte etwas ähnliches für mich in nur wenigen Stunden ändert sich von unseren Entwicklungssystemen in unseren Live - Systeme zu aktualisieren.

Beantwortet am 09/12/2008 um 15:34
quelle vom benutzer

stimmen
1

In unserer Umwelt, ändern wir nie die DB manuell: alle Änderungen von Skripten bei Release-Zeit fertig sind, und die Skripte sind in dem Versionskontrollsystem gehalten. Ein wichtiger Teil dieses Verfahrens ist, um sicher zu sein, dass alle Skripte erneut ausgeführt werden können gegen die gleiche DB der Skripte sind idempotent?) Ohne Datenverlust. Zum Beispiel, wenn Sie eine Spalte hinzufügen, stellen Sie sicher, dass Sie nichts tun, wenn die Spalte bereits vorhanden ist.

Dein Kommentar über „Vorschläge haben den Fehler, die sie benötigen die Entwickler einige Verfahren zu folgen“ ist wirklich eine verräterische. Es ist kein Fehler, es ist ein Feature. Versionskontrolle hilft Entwicklern in folgenden Verfahren und macht die Verfahren weniger schmerzhaft. Wenn Sie Verfahren nicht folgen wollen, müssen Sie keine Versionskontrolle.

Beantwortet am 09/12/2008 um 17:32
quelle vom benutzer

stimmen
0

In einem Projekt arrangierte ich durch sorgfältige Aufmerksamkeit bei der Gestaltung, die alle wichtigen Daten in der Datenbank können automatisch von externen Stellen neu erstellt werden. Beim Start erstellt die Anwendung die Datenbank, wenn sie fehlt, und füllt sie aus externen Datenquellen, ein Schema in dem Quellcode der Anwendung unter Verwendung (und damit mit der Anwendung versioniert). Der Datenbankspeicher-Namen (ein SQLite Dateinamen, obwohl die meisten Datenbank-Manager mehrere Datenbanken erlauben) eine Schemaversion, und wir erhöhen die Schemaversion, wenn wir eine Schemaänderung zu begehen. Das bedeutet, wenn wir die Anwendung auf eine neue Version mit einem anderen Schema, das ein neuer Datenbankspeicher wird automatisch erstellt und bevölkerte neu starten. Sollten wir der neue Lauf der alten Version wird den alten Datenbankspeicher verwenden, einen Einsatz zu einem alten Schema zurückzukehren haben dann

die Datenbank fungiert wie eine traditionelle Anwendung Haufen, mit den Vorteilen der Persistenz, Transaktionssicherheit, statische Typisierung (praktisch, da wir Python) und Einzigartigkeit Einschränkungen im Wesentlichen. Allerdings haben wir keine Sorge überhaupt über die Datenbank zu löschen und neu anzufangen, und die Leute wissen, dass, wenn sie einige manuelle Hack in der Datenbank versuchen, dann wird es auf den nächsten Einsatz zurückgekehrt bekommen, ähnlich wie Hacks eines Prozesszustand erhalten zurückgekehrt beim nächsten Neustart.

Wir brauchen keine Migrationsskripts, da wir nur Datenbankdateinamen wechseln und die Anwendung neu starten und es baut sich. Es hilft, dass die Anwendungsinstanzen sind sharded eine Datenbank pro Client zu verwenden. Es reduziert auch die Notwendigkeit für Datenbanksicherungen.

Dieser Ansatz wird nicht funktionieren, wenn Ihre Datenbank Build von den externen Quellen dauert länger als die Anwendung ermöglicht gelegt werden bleiben.

Beantwortet am 15/12/2008 um 14:14
quelle vom benutzer

stimmen
0

Wenn Sie .Net und wie die Annäherung Rails verwenden nimmt mit Migrations, dann würde ich empfehlen Migrator.Net .

Ich fand ein nettes Tutorial , dass es geht durch bis in Visual Studio - Einstellung. Er stellt auch ein Beispielprojekt zu verweisen.

Beantwortet am 18/09/2009 um 19:03
quelle vom benutzer

stimmen
0

Wir entwickeln ein eigenes Tool, das unsere Datenbanken aktualisiert. Das Datenbankschema in einer Datenbank neutrale XML-Datei gespeichert, die dann gelesen wird und durch das Werkzeug bearbeitet. Das Schema wird in SVN gespeichert, und wir fügen Sie entsprechenden Kommentar zu zeigen, was geändert wurde. Es funktioniert ziemlich gut für uns.

Während diese Art von Lösung auf jeden Fall viel des Guten für die meisten Projekte ist, macht es sicherlich Leben manchmal einfacher.

Beantwortet am 18/09/2009 um 19:15
quelle vom benutzer

stimmen
0

Um wie Insert - Update alle um die Änderung zu verfolgen und löschen gibt es eine Menge Aufwand für die SVN sein. Es ist besser , nur die DDL - Änderungen zu verfolgen , wie (ändern, löschen, erstellen) , die das Schema ändert. Sie können dieses Schema leicht tun , indem Sie eine Tabelle erstellen und ein trgger Tracking - Daten zu dieser Tabelle einzufügen. Jedes Mal , wenn Sie wollen , kann u den Änderungsstatus erhalten , indem aus dieser Tabelle abfragt Es gibt viele Beispiel hier und hier

Beantwortet am 26/06/2012 um 16:02
quelle vom benutzer

stimmen
5

Datenbank - Tracking - Änderungen direkt von SSMS ist möglich , verschiedene 3rd - Party - Tools. ApexSQL Source Control - Skripte automatisch alle Datenbank - Objekt , das in Versions enthalten ist. Commits kann nicht automatisch durch das Werkzeug durchgeführt werden. Stattdessen muss der Benutzer , die begangen werden Änderungen wählen.

Wenn Änderungen von einem Repository bekommen, ist ApexSQL Source Control Kenntnis einer SQL-Datenbank referenzielle Integrität. So wird es ein Synchronisationsskripten einschließlich aller abhängigen Objekte zu erstellen, die so in einer Transaktionen eingewickelt werden, entweder alle Änderungen werden in dem Fall angewendet werden, ist kein Fehler aufgetreten ist, oder keine der ausgewählten Änderungen angewendet wird. In jedem Fall bleibt die Integrität der Datenbank unberührt.

Beantwortet am 07/12/2017 um 15:12
quelle vom benutzer

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