Wie versionieren Sie Ihre Oracle-Datenbankänderungen?


32

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?


1
Dies ist sehr ähnlich zu dba.stackexchange.com/questions/2/… - möglicherweise erhalten Sie von dort einige nicht Oracle-spezifische Ideen dafür!
Gaurav

@Gaurav Das habe ich gesehen, aber ich wollte einige Oracle-spezifische Antworten.
Leigh Riffel

Nicht das, wonach Sie gefragt haben, aber verwandt: Edition-basierte Neudefinition
Jack Douglas

Antworten:


22

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.


1
Mein Arbeitsplatz hat einen ähnlichen Workflow wie der hier erwähnte
Sathyajith Bhat

10

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 .

  1. Sie haben einen Keeper und jede DDL wird von diesem Keeper ausgeführt.
  2. Andere Personen können DDL-Anweisungen ausführen.
  3. Sie müssen nur protokollieren, welche Änderungen vorgenommen wurden, aber Sie müssen keine großen Unterschiede vergleichen.
  4. Ihr Datenbankentwurf erfolgt über ein externes Tool, das dann in der Datenbank veröffentlicht wird. Dieses externe Tool kann sogar DDL-Skripte in der Quellcodeverwaltung sein. Entscheidend ist jedoch, dass Sie die Quellcodeverwaltung durchführen und diese dann in der Datenbank veröffentlichen.
  5. Sie müssen nicht sofort Änderungen kennen, sondern von Zeit zu Zeit: dh stündlich, täglich.
  6. Sie haben eine definierte Serverstruktur: Entwicklung, Test, Produktion. Und eine gute Teststrategie.

Antwort 1

  • Wenn 1, 4, 6 wahr ist, können Sie eine externe Quellcodeverwaltung verwenden. Beispielsweise
    • Embercadero verfügt über ein Tool zur Verwaltung von Datenbankänderungen ( http://www.embarcadero.com/products/db-change-manager-xe ). Welche hat die Fähigkeit, eine Datenbank (Oracle) zurückzuentwickeln und in ihre Quellcodeverwaltung zu setzen. Dann kann eine beliebige Anzahl von Entwicklern, dba, dieses Schema erreichen und Änderungen daran vornehmen.
    • Oracle SQL Designer ähnelt diesem Ansatz.
    • Indem Sie Tabellenskripte für die Quellcodeverwaltung erstellen (svn, mercurial usw.) und diese auch auf dieselbe Weise verwalten.
    • http://www.liquibase.org ist ein automatisierter Ansatz von oben.
    • Ich habe einen Codegenerator geschrieben, der DAL-Anweisungen (Data Access Layer) und DDL-Anweisungen (Create Table) generiert hat. Wir haben sie zur Quellcodeverwaltung gebracht und dort gewartet. Ich denke, dedizierte Lösungen wie liquibase funktionieren möglicherweise besser.

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.

- Red Gate Schema Compare supports Oracle
- Embercadero has similar tool
- https://github.com/carbonfive/db-migration
- http://www.sumsoftsolutions.com/svco/ (I have not used this product but I believe it belongs to this category.)
- Rails Active Migration (http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html)

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.

  1. Start
  2. V1
  3. V2
  4. V3
  5. ...

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.



4

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.


4

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.



2

Wir verwenden die Tools von oracle-ddl2svn (deren Autor ich bin), um das Speichern des Oracle-DDL-Schemas in SVN zu automatisieren.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.