In den letzten zwei Monaten habe ich nach Lösungen oder Methoden für das Release-Management in Datenbanken gesucht. Ich suche nach dem, was die Leute als den besten Prozess ansehen, um damit umzugehen.
Wir haben 3 Umgebungen für unsere Datenbanken:
- Entwicklung
- User Acceptance Testing (UAT)
- Produktion
Das Problem ist, dass wir manchmal Änderungen an verschiedenen Dingen in unserer Entwicklungsdatenbank vornehmen und es Zeit für die Bereitstellung ist. Einige der Funktionen können möglicherweise nicht für UAT freigegeben werden.
Vor kurzem haben wir begonnen, die Red Gate SQL-Quellcodeverwaltung zum Speichern aller unserer Entitäten (mit regelmäßigen Festschreibungen) zu verwenden.
Ich habe darüber nachgedacht, auf Änderungssätzen zu basieren (dh, alles von Änderungssatz X und zurück wird jetzt an UAT übertragen). Dies bedeutet jedoch, dass die Benutzer ihren Code nur kurz vor der Bereitstellung in die Quellcodeverwaltung einchecken, was verwirrend werden kann ( zumal die Leute vergesslich sind). Ein weiteres Problem bei der Verwendung des Änderungssatzansatzes besteht darin, dass bei einem Fehler in einer gespeicherten Prozedur, der behoben werden muss, die Änderungssatznummer außerhalb des Bereichs unseres maximalen Änderungssatzes für die Revision liegt, sodass dies bei Bedarf der Fall ist Erstellen Sie die Datenbank aus einem maximalen Änderungssatz neu, wir würden den Fehler wieder beseitigen.
Irgendwelche Vorschläge zu einem Prozess?
Vielen Dank
quelle
Antworten:
Migrationen
Ein Auf und Ab, die in Ihrem Repo sind und zusammen mit Ihrer App markiert sind.
Sie können sogar mit SQL-Flatfiles basteln, die Ihr Schema ändern und die Schemaversion aktualisieren. Alles was Sie wirklich tun müssen ist:
Nun, Sie können Entwicklungsänderungen in dev vornehmen, aber Sie sollten Ihre Datenbank immer wegblasen und sie mit Migrationen neu erstellen, sobald Sie die Änderung erfasst haben.
quelle
Quellcodeverwaltung!
Sie stellen Ihre Entwicklungsbinärdateien nicht direkt in der Produktion bereit, ohne über svn / git / p4 zu gehen. Warum sollten Ihre Datenbanken dies allein tun? Holen Sie sich private Instanzen für Entwickler, um ihre lokalen Änderungen zu testen. Wenn sie jedoch zur Entwicklungsdatenbank gehen müssen, müssen sie über die eingecheckten DDL-Dateien erfolgen. Sie können sogar Tools schreiben, um diese ddl-Änderungen automatisch anzuwenden (ich kenne keine Möglichkeit, dies korrekt zu tun).
Sobald Sie die Einschränkungen bezüglich Änderungen des Datenbankschemas haben (kein sqlplus mehr -> ddl ausgeben!) Und eine strikte Kontokontrolle haben (kein ddl-Zugriff auf alle), sollte dies leichter zu handhaben sein.
quelle
Dem Vorschlag folgen, Migrationen zu verwenden ... Verwenden Sie möglicherweise ein O / RM, das Migrationen wie Ruby on Rails und Entity Framework 4.3 unterstützt. Das Problem bei beiden Ansätzen ist jedoch, dass eine Migration alles oder nichts ist. Sie können (normalerweise) nicht auswählen, welche Migrationen in Bezug auf Änderungssätze angewendet werden sollen.
Eine weitere praktikable Option (wenn Sie sich auf dem Microsoft-Stack befinden und die Plattform nie erwähnt haben) ist die Verwaltung Ihres SQL mit den Visual Studio-Datenbanktools. Es hat ein Refactoring eingebaut (Spalten umbenennen / entfernen usw.) und überprüft das Modell. Wenn ein gespeicherter Prozess beispielsweise auf eine Spalte verweist, die nicht mehr vorhanden ist, werden Sie darüber informiert.
quelle