Versionierung (Eigenentwicklung)
Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.
Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.
Diese Seite dokumentiert die Versionierung von Datenbankschemas mittels einer Eigenentwicklung. Das empfohlene Vorgehen ist die Versionierung mit Liquibase. |
Die Verwaltung von Versionsinformationen für ein Datenbankschema innerhalb der Datenbank soll sicherstellen, dass die Anwendung und Datenmigrationsskripte erkennen können, ob ein Datenbankschema die erwartete Version hat. Zusätzlich sollen die Datenbankadministratoren nachvollziehen können, welche Änderungen am Datenbankschema bereits erfolgt sind.
Die Versionsnummer eines Datenbankschemas ist gleich der Versionsnummer der Anwendung, mit der das Schema angelegt bzw. zuletzt geändert wurde. Damit ist auf einen Blick zu erkennen, welche Versionsnummer eine Anwendung mindestens haben muss, um mit dem Schema zusammenarbeiten zu können.
Wird nur eine Anwendung geändert, das Datenbankschema aber nicht, so bleibt die Versionsnummer des Datenbankschemas sowohl in der Anwendung als auch in den Datenbank-Skripten unverändert. Nur die Versionsnummer der Anwendung selbst wird erhöht.
Zusätzlich wird ein Update-Zähler mitgeführt, der jedes Mal hochgezählt wird, wenn sich das Datenbankschema ändert, aber die Anwendung unverändert bleibt. Das ist z.B. dann der Fall, wenn zusätzliche Indexe angelegt werden oder Views, die die Anwendung selbst nicht benötigt.
Im Folgenden wird ein Verfahren festgelegt, das diese Anforderungen umsetzt. Die Umsetzung der Versionierung ist in den Nutzungsvorgaben dokumentiert.
1. Installationsablauf bei der Neuanlage
Die Neuinstallation eines Datenbankschemas erfolgt in mehreren Schritten, die jeweils aufeinander aufbauen. Für die automatisierte Installation werden diese Schritte von einem Datenbankskript nacheinander durchgeführt.
- Schritt 1: Umgebungsvariablen laden
-
Für Testzwecke ist es erforderlich, Datenbankschemas in unterschiedlichen Umgebungen zu installieren. Umgebungsspezifische Konfigurationsparameter, wie z. B. der Schema-Name oder die Angaben zur Datenbankverbindung werden in einem eigenen Datenbankskript abgelegt, das Umgebungsvariablen mit den entsprechenden Werten setzt. Die übrigen Installationsschritte verwenden dann diese Variablen.
- Schritt 2: Tablespace erstellen
-
Erstellen aller Tablespaces, die für die Installation der Datenbankobjekte benötigt werden.
- Schritt 3: Benutzer anlegen
-
Anlegen aller Datenbankbenutzer, einschließlich ihrer Rollen und Berechtigungen. Mit diesen Benutzern werden die anwendungsspezifischen Datenbankobjekte angelegt. Es müssen daher alle hierfür benötigten Rechte für die Dauer der Installation gesetzt werden.
- Schritt 4: Erzeugen der anwendungsspezifischen Datenbankobjekte
-
Es werden alle Tabellen, Indexe, Views, Prozeduren, Funktionen und weitere Datenbankobjekte für die Anwendung angelegt. Die anwendungsspezifischen Datenbankobjekte werden mit den in Schritt 3 angelegten Benutzern erstellt.
- Schritt 5: Abschlussbearbeitung
-
In diesem Schritt können alle Operationen ausgeführt werden, die sich auf die bisher angelegten Datenbankobjekte beziehen.
- Schritt 6: Rechte entziehen
-
Falls den Benutzern im Schritt 3 Rechte zugewiesen wurden, die nur für die Installation benötigt wurden, werden sie in diesem Schritt wieder entzogen.
Die nachfolgende Abbildung zeigt noch einmal die einzelnen Schritte der Installation.
1.1. Struktur der Installationsskripte für die Neuanlage
Für die automatisierte Installation wird eine Strukturierung der Installationsskripte festgelegt. Es existieren folgende Aufrufbeziehungen:
- Shell-Skripte
-
Über die Shell-Skripte
install-db-schema.bat
(Windows) bzw.install-db-schema.sh
(Linux) wird das SQL-Skript00_install-main.sql
aufgerufen. Als Parameter werden das Skript für das Anlegen der Umgebungsvariablen und die Log-Datei mitgegeben. - 00_install-main.sql
-
Das SQL-Skript ruft die eigentlichen Installationsskripte in der richtigen Reihenfolge über das Hilfsskript
99_starte-skript-mit-logging.sql
nacheinander auf. Dabei werden auch die Tabellen zur Versionierung angelegt und korrekt gefüllt. - 99_starte-skript-mit-logging.sql
-
Das Hilfsskript führt ein SQL-Skript aus und befüllt die Versionstabelle korrekt. Als Parameter werden der Pfad des Skripts, die Schnittnummer inklusiv der Unterschrittnummer und die Beschreibung mit übergeben.
- <Installationsskript>.sql
-
Die eigentlichen Installationsskripte haben das feste Namensschema:
<Schrittnummer>-<Unterschrittnummer>_<Name>.sql
. Die Schrittnummer ist 2-stellig und entspricht der Schrittnummer aus dem Installationsablauf bei der Neuanlage. Falls zu einem Schritt mehrere Skripte gehören, gibt die Unterschrittnummer die Reihenfolge an, in der diese ausgeführt werden. Der Name kann frei vergeben werden, sollte aber sprechend sein.
Die nachfolgende Abbildung zeigt noch einmal die Beziehung zwischen den einzelnen Skripten.
Templates für die Skripte sind als Ressourcen in der Bibliothek isy-persistence
abgelegt.
2. Installationsablauf bei der Schemaänderung
Die Änderung eines Datenbankschemas erfolgt analog zur Neuanlage ebenfalls in mehreren Schritten, die jeweils aufeinander aufbauen. Für die automatisierte Änderung werden diese Schritte von einem Datenbankskript nacheinander durchgeführt.
- Schritt 1: Umgebungsvariablen laden
-
Dieser Schritt unterscheidet sich nicht von der Neuanlage. Je nach Art der durchzuführenden Änderung kann es aber erforderlich sein, hier weitere Variablen zu setzen.
- Schritt 2: Rechte setzen
-
Falls erforderlich, werden für den Benutzer, mit dem die Änderungen durchgeführt werden sollen, alle für die Änderung des Datenbankschemas benötigten Berechtigungen gesetzt.
- Schritt 3: Durchführen der Schemaänderungen
-
Es werden alle Änderungen am Datenbankschema vorgenommen. Das umfasst sowohl das Anlegen neuer Datenbankobjekte, wie z.B. Tabellen, Views und Indexe, als auch die Änderung bereits vorhandener Datenbankobjekte, wie z.B. das Löschen und Hinzufügen von Spalten in Tabellen. Die Änderungen werden mit dem Benutzer durchgeführt, für den in Schritt 2 die Berechtigungen entsprechend gesetzt wurden.
- Schritt 4: Abschlussbearbeitung
-
In diesem Schritt können alle Operationen ausgeführt werden, die sich auf die bisher angelegten Datenbankobjekte beziehen.
- Schritt 5: Rechte entziehen
-
Falls in Schritt 2 für Benutzer Rechte gesetzt wurden, die nur für die Durchführung der Änderungen benötigt wurden, werden sie in diesem Schritt wieder entzogen.
Die nachfolgende Abbildung zeigt noch einmal die einzelnen Schritte der Installation.
2.1. Struktur der Änderungsskripte
Für die automatisierte Änderung wird eine Strukturierung der Änderungsskripte festgelegt. Diese ist analog zur Struktur der Installationsskripte aus Abschnitt Struktur der Installationsskripte für die Neuanlage. Es existieren folgende Aufrufbeziehungen:
- Shell-Skripte
-
Über die Shell-Skripte
update-db-schema.bat
(Windows) bzw.update-db-schema.sh
(Linux) wird das SQL-Skript00_update-main.sql
aufgerufen. Als Parameter werden das Skript für das Anlegen der Umgebungsvariablen und die Log-Datei mitgegeben. - 00_update-main.sql
-
Das SQL-Skript ruft die eigentlichen Installationsskripte in der richtigen Reihenfolge über das Hilfsskript
99_starte-skript-mit-logging.sql
nacheinander auf. Dabei werden auch die Tabellen zur Versionierung angelegt und korrekt gefüllt. - 99_starte-skript-mit-logging.sql
-
Das Hilfsskript führt ein SQL-Skript aus und befüllt die Versionstabelle korrekt. Als Parameter werden der Pfad des Skripts, die Schnittnummer inklusiv der Unterschrittnummer und die Beschreibung mit übergeben.
- <Update-Skript>.sql
-
Die eigentlichen Änderungsskripte haben das feste Namensschema
<Schrittnummer>-<Unterschrittnummer>_<Name>.sql
. Die Schrittnummer ist 2-stellig und entspricht der Schrittnummer aus Kapitel Installationsablauf bei der Schemaänderung. Falls zu einem Schritt mehrere Skripte gehören, gibt die Unterschrittnummer die Reihenfolge an, in der diese ausgeführt werden. Der Name kann frei vergeben werden, sollte aber sprechend sein.
Die nachfolgende Abbildung zeigt noch einmal die Beziehung zwischen den einzelnen Skripten.
Templates für die Skripte sind als Ressourcen in der Bibliothek isy-persistence
abgelegt.