Tech Shorty

TechShorty: Datenbankänderungen mit Liquibase

: Im Videoformat TechShorty stellen unsere Mitarbeiter ihre Lieblingstechnologien vor. Diesmal: Steve Ulrich über Liquibase

Liquibase ist eine datenbank-unabhängige Open-Source-Bibliothek für das Management und die Nachverfolgungen von Modifikationen in Datenbankschemata. Insbesondere im Kontext agiler Softwareentwicklung ist sie ausgesprochen hilfreich, weil sie für mehr Transparenz und ein besseres Monitoring bei Datenbankänderungen sorgt. Softwareentwickler Steve Ulrich erklärt uns, wie das technisch funktioniert.

Hintergrund

Änderungen an einem Programm erfolgen in der Regel durch ein Source-Code-Management-System (SCM), wie z. B. Subversion, Mercurial oder Git. Ein SCM speichert dabei die Commits des Entwicklers als so genanntes Changeset, das die Änderungen an den Dateien sowie deren Beschreibung, Autor, Datum etc. enthält. Die Summe aller Änderungen, nacheinander abgespielt, ergibt den Programmstand. Durch diese Vorgehensweise erhält jeder Entwickler, jedes Build-System etc. den gleichen Stand. Außerdem lässt sich so nachvollziehen, was passiert ist, denn das SCM liefert ein Changelog mit. Auch können Änderungen rückgängig gemacht werden, einfach, indem das Changeset umgekehrt angewendet wird.

Allerdings: Bei Datenbanken werden Daten und Datenstrukturen im Datenbanksystem verwaltet und damit innerhalb der jeweiligen Installation. Damit ist eine Verwaltung durch das SCM alleine nicht mehr möglich.

So hilft Liquibase

Hier kommt Liquibase ins Spiel: Liquibase erlaubt es dem Entwickler, Changesets für die Datenbank zu schreiben. Die Changesets werden dann der Reihe nach eingelesen und ausgeführt. Liquibase überwacht dabei, welche Changesets bereits ausgeführt worden sind. Dieses Vorgehen entspricht in etwa dem eines SCM. Allerdings läuft Liquibase, je nach Konfiguration, bei der Installation oder beim Start der Anwendung.

Changesets können mit Liquibase auf zwei Arten definiert werden: Zum einen mit klassischen SQL-Statements, denen man mittels Kommentaren Meta-Informationen mitgeben kann. Zum Anderen bietet Liquibase eigene „Changes“ an, die in XML, YAML oder JSON definiert werden können und datenbankneutral sind.

Die Changes können also auf verschiedenen Datenbanksystemen ausgeführt werden, das erzeugte SQL wird dabei an die jeweilige Datenbank angepasst. Somit braucht man kein extra Script für verschiedene Datenbanken zu schreiben, nur weil die Syntax sich geringfügig unterscheidet.

Ein weiterer Pluspunkt für die Changes sind Auto-Rollbacks. Hierbei bringen einige Changes direkt eine Möglichkeit zum Rückgängigmachen der Änderung mit. Benennt man zum Beispiel eine Tabelle A in B um, wird das Rollback die Tabelle B wieder in A umbenennen, ohne dass man dies definieren muss. Ist mal kein Auto -Rollback vorhanden, kann man ein eigenes Rollback-Verhalten definieren.

Jedoch: Löscht man eine Tabelle, sind die Daten weg. Ein Rollback ist dann natürlich nur noch mit einem Backup möglich. Hier zeigt sich, dass Liquibase ein vorsichtiges Vorgehen bei Änderungen in der Datenbank nicht ersetzt, aber es koordiniert die Anpassungen an den Daten, macht sie besser testbar und dokumentiert sie.

Steve Ulrich