it-swarm-eu.dev

Wie versionieren Sie Ihre Oracle-Datenbankänderungen?

Ich bin interessiert zu wissen, mit welchen Methoden andere Personen Änderungen an der Datenbank verfolgen, einschließlich Änderungen der Tabellendefinition, neuer Objekte, Paketänderungen usw. Verwenden Sie Flatfiles mit einem externen Versionskontrollsystem? Löst aus? Andere Software?

32
Leigh Riffel

An den Standorten, an denen ich gearbeitet habe, müssen alle Änderungen, die an den Produktionsinstanzen vorgenommen werden müssen, als Änderungsskripte geschrieben werden, die in SQL * Plus ausgeführt werden. Darüber hinaus müssen die Skripte, die zum Neuerstellen aller Schemaobjekte von Grund auf erforderlich sind, 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 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.

22
Jeffrey Kemp

Ich habe viel über dieses Thema nachgedacht und gelesen. Dies ist ein umfassendes Thema der Konfigurationssteuerungs- und Änderungsmanagementstrategie. CMMI hat eine Domain in diesem Thema. Selbst in Unternehmen mit einer Akkreditierung von CMMI 3-5 kontrollieren sie ihre Datenbanken manchmal nicht.

Diese Frage sollte unter Berücksichtigung der Einschränkungen beantwortet werden.

  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 und wird dann in der Datenbank veröffentlicht. 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 keine sofortigen Änderungen kennen, sondern von Zeit zu Zeit: d. H. 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. Zum Beispiel
    • Embercadero verfügt über ein Tool zur Verwaltung von Datenbankänderungen ( http://www.embarcadero.com/products/db-change-manager-xe ). Welches hat die Fähigkeit, eine Datenbank (Oracle) zurückzuentwickeln und sie 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.
    • Wenn Sie Tabellenskripte für die Quellcodeverwaltung (svn, Mercurial usw.) erstellen und diese auch beibehalten.
    • 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, dass dedizierte Lösungen wie Liquibase besser funktionieren können.

Dieser Ansatz funktioniert gut, wenn Sie 6. Sie haben DDL-Anweisungen, die auch ein Code sind, in die Quellcodeverwaltung eingefügt und pflegen sie. Niemand wird Test- und Produktionsserver ohne angemessene Berücksichtigung wechseln.

Nachteile sind, wenn Sie aus irgendeinem Grund Änderungen an Produktions- oder Testservern vornehmen, eine schnelle Fehlerbehebung, eine Änderung des Primärschlüssels usw. Sie müssen diese Änderungen auch auf den Entwicklungsserver übertragen. Da ist eigentlich der Entwicklungsserver Ihre GRUNDE WAHRHEIT. 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, der es benutzt, ändert es. Dann, wenn es Zeit für ein Update ist. Sie verwenden ein Datenbankvergleichstool. Holen Sie sich diese als Skripte, stellen Sie sie unter Quellcodeverwaltung.

- 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 eine Spalte in eine Tabelle einfügen und später entscheiden, sie zu entfernen. Ihre Skripte zeigen dies in Antwort2, während in Antwort1 nur die letzte Version angezeigt wird. Und Sie müssen V2 und V1 vergleichen, um Unterschiede zu erkennen. Persönlich mag ich Antwort 1 besser, da ich Start und V3, V1 und V3 leicht vergleichen kann. In Antwort 2 muss ich nach allen Änderungen suchen. Auch in Antwort 2 ist das Skript in der Quellcodeverwaltung in der Regel ein komplexes Urknall-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. Sie können DDL-Trigger verwenden, um zu 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 jeder Entwickler das Anwendungskonto kennt und es verwenden kann.

Antwort 4 Wenn Sie 3 und 5 haben. Beachten Sie, dass Sie in dieser Situation keine Einschränkung 6 haben, dh: Sie haben keine Entwicklung, Test, Produktserver. Nur Produktionsserver. Anstelle des Auslösers zum Speichern von Änderungen. Sie verwenden ein externes Tool, um Änderungen zu finden und DDL-Skripte in der Quellcodeverwaltung zu speichern.

Wenn dieses Tool aufzeichnen kann, wer Änderungen vorgenommen hat, ist dies hilfreich. Beachten Sie, dass Sie in dieser Lösung zusätzliche DDL verlieren, die in Intervallen durchgeführt wird.

10
Atilla Ozgur

Ich habe gerade ein interessantes Tutorial zur Verwendung von Liquibase für die Version Oracle gefunden.

6
Leigh Riffel

In einigen unserer Datenbanken verwenden wir DDL-Trigger, um Änderungen abzufangen und in einer Tabelle zu speichern. Wir haben dann eine Weboberfläche, 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
Leigh Riffel

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.

4
Leigh Riffel

Früher haben wir mit Oracle SQL Designer gearbeitet, das (glaube ich) jetzt durch SQL Developer Data Modeler ersetzt wurde. http://www.Oracle.com/technetwork/developer-tools/datamodeler/overview/index.html

Das war ganz nett, besonders. Die Möglichkeit, DOMAINs für Spalten festzulegen und viel Zeit beim Erstellen gemeinsamer Spalten (mtime, ctime usw.) zu sparen.

2
Sebastian Roth

Wir verwenden Oracle-ddl2svn Tools (von denen ich der Autor bin) zum automatisierten Speichern des Oracle DDL-Schemas in SVN.

2
popalka

Werfen Sie einen Blick auf DBmaestro TeamWork, dessen Ansatz datenbankgesteuertes Änderungsmanagement ist.


Offenlegung: Ich arbeite für dbMaestro

0
Uri

Ich habe es nie benutzt, aber http://blog.gitora.com/ ist eine andere Option.

0
Leigh Riffel