Oracle Database · · 3 Min.

Eine Schema-Baseline mit SQLcl Liquibase

Ein bestehendes Oracle-Schema erfassen und kontrolliert in die Versionsverwaltung übernehmen.

Viele Oracle-Datenbanken sind über Jahre gewachsen, bevor Schemaänderungen versioniert wurden. SQLcl bringt Liquibase integriert mit und kann den aktuellen Objektbestand eines Schemas als Changelog erfassen. Damit entsteht eine nachvollziehbare Ausgangsbasis, auf der Teams spätere Änderungen als neue Changesets verwalten können.

Wichtig bei der Einführung: Ein generierter Changelog beschreibt den erfassten Zustand. Er ist nicht automatisch ein sicherer Update-Plan für genau die Datenbank, aus der er stammt. Baseline-Erstellung und spätere Bereitstellung in einer leeren Zielumgebung sind unterschiedliche Abläufe.

1. Schema in aufgeteilte Dateien exportieren

Verbinden Sie SQLcl mit dem Schema, das als Ausgangspunkt dienen soll, und führen Sie die Schema-Generierung in einem eigens dafür vorgesehenen Arbeitsverzeichnis aus:

lb generate-schema -split

SQLcl erzeugt XML-Changelogs für unterstützte Objekte sowie einen Controller-Changelog, der die einzelnen Dateien einbindet. Mit -split werden Objekte nach Typ in separaten Verzeichnissen abgelegt. Das lässt sich in Git besser prüfen und reduziert Konflikte gegenüber einem einzelnen großen Export. Die erzeugten Spezial-Changelogs nutzen SQLcl-Funktionalität; planen Sie daher SQLcl als Werkzeug für deren weitere Verarbeitung ein.

2. Export prüfen, bevor er zur Referenz wird

Kontrollieren Sie den Export auf Vollständigkeit und fachliche Relevanz: Sind benötigte Tabellen, Views, Packages, Trigger, Sequenzen, Synonyme und Grants enthalten? Öffnen Sie die generierten Dateien in einem Code-Review und vergleichen Sie wichtige Objekte mit dem tatsächlichen Zielzustand. Für zusätzlichen DDL-Review kann SQLcl mit -sql SQL-Dateien ausgeben; diese dienen der Prüfung und sind laut Dokumentation nicht als eigenständiger Deploy-Artefakt-Ersatz gedacht.

Temporäre, fremdverwaltete oder umgebungsspezifische Objekte gehören nicht ungeprüft in die Baseline. Definieren Sie außerdem, welche Schema- und Berechtigungsobjekte künftig vom Team versioniert werden.

3. Bestehende Datenbank und neue Umgebungen unterscheiden

Auf der bereits erfassten Datenbank sollen die Baseline-Changesets normalerweise nicht erneut ausgeführt werden. Erst nachdem Sie geprüft haben, dass Changelog und Schema übereinstimmen, kann lb changelog-sync -changelog-file controller.xml die Changesets als ausgeführt markieren. Der Befehl führt die eigentlichen Änderungen nicht aus – deshalb darf er nicht als Abkürzung für einen Schema-Abgleich verstanden werden.

In einer leeren, kompatiblen Zielumgebung wird der Changelog dagegen als Installation verwendet. Prüfen Sie zunächst den Status und lassen Sie den auszuführenden SQL-Plan erzeugen:

lb status -changelog-file controller.xml
lb update-sql -changelog-file controller.xml

Erst nach Review und Freigabe wenden Sie die Änderungen mit lb update an. Die Tabelle DATABASECHANGELOG verwaltet Liquibase direkt in der Datenbank; sie wird nicht in Git eingecheckt.

4. Ab dann Änderungen sauber fortschreiben

Behandeln Sie den bestätigten Export als Baseline. Bereits angewendete Changesets sollten nicht nachträglich editiert werden: Liquibase prüft Checksummen und meldet unerwartete Änderungen. Neue Schemaänderungen erhalten neue Changesets mit Rollback-Plan, soweit dieser fachlich möglich ist. Bei PL/SQL-Objekten muss zudem die Statement-Aufteilung passend konfiguriert werden, da ein Package- oder Procedure-Body selbst Semikolons enthält.

  1. Ausgangsschema und einzuschließende Objekttypen festlegen.
  2. Mit SQLcl lb generate-schema -split ausführen und alle Dateien versionieren.
  3. Controller, Objektumfang und DDL mit Schema-Ownern reviewen.
  4. Baseline nur nach Abgleich auf der bestehenden DB synchronisieren; nicht unbesehen erneut anwenden.
  5. Deployment auf leere Testumgebung mit status, update-sql und anschließendem update verifizieren.

Fazit

SQLcl Liquibase erleichtert den Einstieg in Schema-Versionierung, indem es Oracle-Objekte direkt aus dem Datenbankkatalog in einen strukturierten Changelog überführt. Entscheidend ist die klare Trennung zwischen Baseline für eine bestehende Datenbank und Installation auf einer leeren Umgebung. Mit Review, geprüfter Synchronisierung und unveränderten, versionierten Changesets wird daraus eine belastbare Grundlage für künftige Deployments.

Weiterführend: Oracles SQLcl-Anleitung zu generate-schema sowie die Dokumentation zu changelog-sync.