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:
- 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.
- 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.
- 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.
@marc_s Danke für die Korrektur des Tippfehlers. – Souper