Unser Newsletter rund um technische Themen,
das Unternehmen und eine Karriere bei uns.

3 Minuten Lesezeit (638 Worte)

Datenbankschemata im Griff behalten: flexible Bereitstellung mit Liquibase

Änderungen am Datenbankschema können fehleranfällig sein. Werden keine Artefakte als Ergebnis von Änderungen erzeugt, ist die Historie nur schwer nachzuvollziehen. Eine agile Anwendungsentwicklung erfordert meist auch häufige Anpassungen innerhalb der Datenbank. Liquibase ermöglicht eine effektive Verwaltung von Datenbankschemaänderungen, die sich ähnlich wie die Entwicklung einer Anwendung gestaltet. 

Was ist Liquibase?

Liquibase ist eine Technologie zur Verwaltung von Datenbankschemaänderungen. Das Tool ermöglicht es Entwicklern Änderungen an einer Datenbank in Form von strukturierten Dateien (SQL, XML, JSON, YAML) zu definieren und zu verfolgen. Diese Dateien enthalten Anweisungen zum Erstellen, Ändern oder Löschen von Tabellen, Spalten, Indizes und anderen Datenbankobjekten. Liquibase unterstützt verschiedene Datenbankmanagementsysteme wie MySQL, PostgreSQL, Oracle, SQL Server und viele andere (vollständige Liste). Das Tool ist verfügbar in einer Open-Source-Edition sowie mit erweiterten Funktionalitäten in einer Pro- und Enterprise-Edition.

Konzepte von Liquibase

Eine einzelne Datenbankänderung wird in einem Changeset definiert. Ein Changeset hat eine eindeutige ID, einen Autor und ggf. weitere optionale Attribute. Changelog-Dateien beinhalten die Changesets in sequentieller Reihenfolge. Eine Changelog-Datei im SQL-Format könnte wie folgt aussehen: 

--liquibase formatted sql

--changeset hanna.dünschede:001
CREATE TABLE table_1
(
    id			VARCHAR(255) NOT NULL,
    example		VARCHAR(255) NOT NULL
);
ALTER  TABLE  table_1  ADD  PRIMARY  KEY  id;
--rollback DROP TABLE table_1;

--changeset hanna.dünschede:002
ALTER TABLE table_1 ADD new_column VARCHAR(255) NOT NULL AFTER `id`;
--rollback ALTER_TABLE table_1 DROP COLUMN new_column;
 

In einem „Properties File“ wird die Datenbankverbindung konfiguriert. Alternativ können die Parameter auch über Umgebungsvariablen gesetzt werden. Hier ist ein beispielhaftes „Properties File“ für eine PostgreSQL-Datenbank: 

driver: org.postgresql.Driver
classpath: ./lib/postgresql-42.6.0.jar
url: jdbc:postgresql://localhost:5432/demodb
changelogFile: ./path/to/file/dbchangelog.sql
 

Die Versionierung basiert auf zwei Tabellen in der Datenbank, die Liquibase bei der ersten Ausführung anlegt. Die DATABASECHANGELOG Tabelle zeichnet alle bereitgestellten Änderungen auf. Um gleichzeitige Änderungen an der Datenbank zu verhindern, werden parallele Zugriffe mithilfe der DATABASECHANGELOGLOCK-Tabelle blockiert. 

Typischer Workflow

Liquibase bietet verschiedenste Kommandos zur Aktualisierung, zum Rückgängigmachen und zur Nachverfolgung von Datenbankänderungen und mehr (vollständige Liste).

In einem typischen Deployment Workflow werden folgende Kommandos gebraucht:

validate				//Überprüfung des Changelogs
update-testing-rollback	//führt update, rollback, update aus
update-sql				//Preview der aktuellen Änderungen
update				//führt Änderung in Zieldatenbank aus
tag					//aktueller Stand wird mit Tag versehen 

Müssen Änderungen zurückgenommen werden, sieht ein typischer Rollback-Workflow wie folgt aus: 

rollback-sql		//Preview des Rollbacks
rollback			//führt Rollback zum angegebenen Tag aus 

Nutzung in CI/CD Pipelines

Liquibase lässt sich einfach in CI/CD Pipelines integrieren. Damit lässt sich eine automatisierte kontinuierliche Bereitstellung über verschiedene Anwendungsumgebungen, von der Entwicklung über Test bis Produktion, realisieren. In einem Versionskontrollsystem können geänderte Changelog-Dateien per Pull-Request geprüft werden. Die Pipeline kann so konfiguriert werden, dass die beiden oben dargestellten Workflows ausführbar sind. Dies kann durch direkte Liquibase-Kommandos in der entsprechenden CI/CD-Umgebung geschehen oder bei komplexeren Umgebungen kann eine Einbettung in ein Docker Utility Image sinnvoll sein. Dies ermöglicht es zusätzliche Tools wie z. B. gcloud cli bei Nutzung von Google-Cloud-Datenbanken oder Datenbankemulatoren zur Ausführung von Tests einzubinden. So lassen sich datenbankspezifische Konfigurationen innerhalb des Images in Helper-Skripte verpacken und der Aufruf aus der Pipeline heraus wird vereinfacht. Durch Anpassung auf verschiedene Datenbankmanagementsysteme wird nur ein zentrales Image benötigt. 

Fazit

Mit Liquibase können sich Datenbankschemata genau wie Anwendungen im Laufe der Zeit den Anforderungen anpassen. Inkompatibilitäten zwischen der Datenbank und der Anwendung lassen sich verhindern. Artefakte der Datenbankänderungen können im Versionskontrollsystem getrackt werden, um eine transparente Historie zu gewährleisten. So lassen sich mit wenig Mehraufwand Änderungen sicher und flexibel bereitstellen.

Sie haben Fragen rund um Liquibase und/oder den Betrieb von Datenbanken? Sprechen Sie uns an. 

Seminarempfehlung

ORDIX ERFOLGSBEISPIEL

Grundlage des Beitrags war ein internes Projekt. Dabei wurde eine Demo-CI/CD-Pipeline aufgebaut, in der mithilfe von Liquibase Datenbankschemata versioniert werden.

Kundennutzen:

Kunden werden auf Probleme bei der Datenbankentwicklung aufmerksam gemacht, die sie möglicherweise bei sich im Unternehmen haben. Die Technologie Liquibase wird als Lösung aufgezeigt, um eine flexiblere und nachvollziehbare Datenbankentwicklung zu erreichen.

Die Pipeline wurde bereits erfolgreich zur Demonstration von Liquibase beim Kunden eingesetzt.

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Samstag, 21. Dezember 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie