Ich bin daran interessiert zu wissen, mit welchen Methoden andere Benutzer Änderungen an der Datenbank verfolgen, einschließlich Änderungen an der Tabellendefinition, neuen Objekten, Paketänderungen usw. Verwenden Sie Flatfiles mit einem externen Versionskontrollsystem? Löst aus? Andere Software?
oracle
oracle-11g-r2
version-control
Leigh Riffel
quelle
quelle
Antworten:
An den Standorten, an denen ich gearbeitet habe, müssen alle Änderungen, die an den Produktionsinstanzen vorgenommen werden müssen, als Änderungsskripten ausgeführt werden, die in SQL * Plus ausgeführt werden. Darüber hinaus müssen die Skripts, die zum Neuerstellen aller Schemaobjekte von Grund auf neu erstellt werden müssen, auf dem neuesten Stand gehalten werden. Alle diese Skripte werden in die Änderungskontrolle eingecheckt und von dort migriert.
Sie können DDL-Änderungen überwachen oder DDL-Trigger verwenden, um Änderungen zu erfassen, oder Sie können sogar Diff-Software verwenden, um zwei Instanzen zu vergleichen. Diese Methoden sind jedoch wahllos. Oft nimmt ein Entwickler eine Reihe von Änderungen an einem Schema vor und macht sie rückgängig (z. B. kleine Teständerungen, Erstellen von Dummy-Tabellen zum Testen von Konzepten usw.), bevor er herausfindet, was genau geändert werden muss.
quelle
Ich habe viel über dieses Thema nachgedacht und gelesen. Dies ist ein breites Thema der Konfigurationssteuerung und der Änderungsmanagementstrategie. CMMI hat eine Domäne in diesem Thema. Sogar in Unternehmen, die eine CMMI 3-5-Akkreditierung haben, werden ihre Datenbanken manchmal nicht versionskontrolliert.
Diese Frage soll beantwortet werden , während unter Berücksichtigung folgende Einschränkungen .
Antwort 1
Dieser Ansatz funktioniert gut, wenn 6. Sie DDL-Anweisungen, bei denen es sich auch um einen Code handelt, in die Quellcodeverwaltung einfügen und sie verwalten. Niemand wird Test- und Produktionsserver ohne Rücksicht ändern.
Nachteile sind, wenn Sie Änderungen an Produktions- oder Testservern aus irgendeinem Grund vornehmen, eine schnelle Fehlerbehebung, eine Änderung des Primärschlüssels usw. Sie müssen diese Änderungen auch auf den Entwicklungsserver übertragen. Da der eigentliche Entwicklungsserver Ihre Grundwahrheit ist. Nicht anders herum.
Dies ist ein sehr entwicklerorientierter Ansatz. Aber wenn Sie zum ersten Mal ein neues Modul entwickeln, funktioniert es ziemlich gut.
Antwort 2 - wenn 1 und 6 wahr sind:
Ein ähnlicher Ansatz für Antwort 1 ist die Wartung eines Entwicklungsservers. Jeder benutzt es und ändert es. Dann ist es Zeit für ein Update. Sie verwenden ein Datenbankvergleichstool. Holen Sie sich diese als Skripte, setzen Sie es unter Versionskontrolle.
Der Unterschied zwischen Antwort 1 und Antwort 2 besteht darin, dass Sie in Antwort 1 DDL-Anweisungen für die gesamte Datenbank sammeln und speichern. In Antwort 2 müssen Sie jede Version der Änderung speichern.
Wenn Sie einer Tabelle eine Spalte hinzufügen und diese später entfernen möchten. Ihre Skripte zeigen dies in Antwort2, während Sie in Antwort1 nur die letzte Version sehen. Und Sie müssen V2 und V1 vergleichen, um Unterschiede zu erkennen. Persönlich mag ich die Antwort 1 besser, da ich Start und V3, V1 und V3 leicht vergleichen kann. In answer2 muss ich nach allen Änderungen suchen. Auch in Antwort 2 ist das Skript in der Quellcodeverwaltung in der Regel ein komplexes Skript. Schwer zu findende Informationen.
Antwort 3 Wenn 3 wahr ist. Beachten Sie, dass Sie in dieser Situation keine Einschränkung 6 haben, dh, Sie haben keine Entwicklungs-, Test- und Produktserver. Nur Produktionsserver. Mit DDL-Triggern können Sie protokollieren, welche Änderungen vorgenommen wurden. Dies wird hauptsächlich verwendet, um Menschen davon abzuhalten, ihre DDL-Zuschüsse zu missbrauchen. Wenn ein Problem auftritt, können Sie verantwortlich finden. Damit dies funktioniert, sollte sich jede Person mit ihrem Benutzerkonto verbinden und das Anwendungskonto sollte keine DDL-Berechtigungen haben. Da kennt jeder Entwickler Anwendungskonto und kann es nutzen.
Antwort 4 Wenn Sie 3 und 5 haben, beachten Sie, dass Sie in dieser Situation keine Einschränkung 6 haben, dh: Sie haben keine Entwicklungs-, Test- und Produktserver. Nur Produktionsserver. Anstelle des Triggers zum Speichern von Änderungen. Sie verwenden ein externes Tool, um nach Änderungen zu suchen und DDL-Skripte in der Quellcodeverwaltung zu speichern.
Wenn mit diesen Tools aufgezeichnet werden kann, wer Änderungen vorgenommen hat, ist dies hilfreich. Beachten Sie, dass Sie bei dieser Lösung zusätzliche DDL verlieren, die in Intervallen durchgeführt werden.
quelle
Ich habe gerade ein interessantes Tutorial zur Verwendung von Liquibase zur Version von Oracle gefunden.
quelle
In einigen unserer Datenbanken verwenden wir DDL-Trigger, um Änderungen zu erfassen und in einer Tabelle zu speichern. Wir haben dann ein Webinterface, um diese früheren Versionen aufzurufen. Es hat schwerwiegende Nachteile, weshalb ich nach Alternativen suche, aber es ist einfach und besser als keine Versionskontrolle.
quelle
Wir haben Schema Version Control für unsere 11g-Datenbanken verwendet, hatten jedoch einige Probleme mit der Software unter 11.2. Ohne die Probleme, an denen wir noch arbeiten, wäre es ein großartiges Produkt.
quelle
Wir haben früher mit Oracle SQL Designer gearbeitet, der (wie ich glaube) jetzt durch SQL Developer Data Modeler ersetzt wurde. http://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html
Das war ganz nett, esp. Die Möglichkeit, DOMAINs für Spalten festzulegen und viel Zeit beim Erstellen gemeinsamer Spalten zu sparen (mtime, ctime usw.).
quelle
Wir verwenden die Tools von oracle-ddl2svn (deren Autor ich bin), um das Speichern des Oracle-DDL-Schemas in SVN zu automatisieren.
quelle
Schauen Sie sich DBmaestro TeamWork an, dessen Datenbank den Change-Management- Ansatz erzwungen hat .
Offenlegung: Ich arbeite für dbMaestro
quelle
Ich habe es noch nie benutzt, aber http://blog.gitora.com/ ist eine andere Option.
quelle