24. Februar 2018
Bei der Apache Software Foundation wird eine ziemlich smarte Implementierung eines Datenbankservers gepflegt. Apache Derby hat im Verlauf seiner wechselvollen Geschichte eine ausgezeichnete Produktreife erreicht und läßt es in puncto Datenbank an nichts fehlen. Noch dazu ist es im Handumdrehen beschafft, installiert und gestartet und läuft auf allen gängigen Rechnerarchitekturen.
Dieser Tipp beschreibt die wenigen Handgriffe zur Verwendung eines Datenbankservers auf Basis des Derby Network Servers.
Inhaltsübersicht
Zielsetzung
Vorbereitung
Start des Derby Network Servers
Ausführung überprüfen
Derby Network Server stoppen
Zusammenfassung in einem Skript
Derby Network Server mit Docker
Fazit
An einem festgelegten Ablageort sollen Datenbanken erstellt und verwaltet werden. SQL-Befehle sollen mit einem beliebigen Datenbank-Client an den Datenbankserver gerichtet werden können.
Für das obige Ziel muss ein Derby Network Server gestartet werden, der auf der Grundlage einer Ablaufumgebung für Java (Java Runtime Environment, JRE) läuft. Diese beiden Teile lassen sich aus dem Internet frei herunterladen:
An den oben angegebenen Stellen finden sich gepackte Archive, die alle Bestandteile von Java bzw. Derby enthalten und die jeweils in einem Schritt heruntergeladen werden können. Nach dem Herunterladen der Pakete Java und Derby liegen diese als gepackte Dateien unter Namen wie z.B. zulu8.27.0.7-jdk8.0.162-linux_x64.tar.gz
oder db-derby-10.14.1.0-bin.tar.gz
in dem Ordner, der beim Herunterladen als Ablageort gewählt wurde, z.B. im Ordner /home/fred/downloads
.
Mit den folgenden Kommandos wird anschließend beispielsweise das Java-Paket an den Ablageort entpackt, von wo aus es ausgeführt werden soll.
Für die weitere Beschreibung sind die so erstellten Ablageorte von Java und Derby mit $JAVA_HOME
und $DERBY_HOME
bezeichnet. Zum Ausführen der nachfolgend beschriebenen Kommandos müssen diese Platzhalter mit dem Ablageort ersetzt werden. Man schreibt also z.B. /home/fred/jre
anstelle von $JAVA_HOME
.
Grundlegende Informationen zur Ausführung von Java-Programmen liefert zudem der Tipp Java-Programme ausführen.
Sind Java und Derby heruntergeladen und entpackt, kann der Datenbankserver mit einem einzelnen Kommando gestartet werden. Es lautet wie folgt
Das obige Kommando startet einen Derby Network Server, der auf Port 1528 auf Kommmandos lauscht und Datenbanken im Ordner /pfad/zu/db-daten
verwaltet. Mit erfolgreichem Start erscheint die folgende Antwort
Wie die Antwort bekundet läuft der Server und ist nun bereit, SQL-Befehle entgegenzunehmen und auszuführen.
Mit dem Kommando ping
lässt sich überprüfen, ob der Datenbankserver auf Anfragen antwortet:
Läuft der Derby Network Server nicht, erscheint die folgende Antwort
Wenn der Derby Network Server läuft und auf Anfragen antwortet, wird auf das obige Kommando hingegen die folgende Antwort zurückgegeben
Der Server ist bereit zur Verwendung, also zum Erstellen von Datenbanken und zum Lesen aus den und Schreiben von Daten in die Datenbanken.
Um den laufenden Derby Network Server zu stoppen wird folgendes Kommando verwendet
Es erscheint die Antwort
Der Datenbankserver ist gestoppt. Es kann über den Server nicht auf Daten aus den vom Server verwalteten Datenbanken zugegriffen werden. Die Daten bleiben am zuvor gewählten Ablageort gespeichert und können nach neuerlichem Start des Datenbankservers weiter verwendet werden.
Die obigen Kommandos lauten bis auf die Teile start
, ping
und shutdown
identisch und lassen sich daher gut in einem Skript zusammenfassen. Das hat auch den Vorteil, dass die veränderlichen Teile, also die Pfadangaben, die den Weg zu den Ablageorten von Java, Derby und den Datenbanken weisen sowie der Port, über den Derby kommunizieren soll, einfacher anzugeben sind.
Beispielsweise angenommen die Bestandteile Java und Derby liegen in den Ordnern /home/fred/jvm
und /home/fred/jre/derby
lautet ein entsprechendes Skript wie folgt:
#!/bin/bash JRE_ORT=/home/fred/jvm/jre DERBY_ORT=/home/fred/jrs/derby DERBY_PORT=1528 DB_DIR=/home/fred/daten/db $JRE_ORT/bin/java -Dderby.system.home=$DB_DIR -classpath "$DERBY_ORT/lib/derby.jar:$DERBY_ORT/lib/derbynet.jar" org.apache.derby.drda.NetworkServerControl $1 -p $DERBY_PORT
Abgelegt unter dem Namen derby.sh
kann es anschließend wie folgt genutzt werden
cd /pfad/zum/skript
./derby.sh start
oder
./derby.sh ping
oder
./derby.sh shutdown
Freilich ließen sich Pfadangaben auch mit einer systemweiten Pfadangabe hinterlegen, aber das erfordert einen Eingriff in die Konfiguration des Betriebssystems und ist nicht immer wünschenswert oder möglich.
Mit Docker existiert eine Möglichkeit, Anwendungen wie den Derby Network Server als Container auszuführen. Das hat u.a. den Vorteil, dass die betreffende Anwendung mit einem einfachen Kommando gestartet und gestoppt werden kann, eventuelle Abhängigkeiten werden dabei von Docker berücksichtigt und einbezogen.
Der Docker Hub enthält eine Reihe von Repositories für Derby, gut funktioniert z.B. az82/docker-derby, mit dem ein Derby Network Server wie folgt gestartet werden kann.
Dies erzeugt und startet einen Container names derby
und weist dem Derby Network Server den Ordner derby-data
im aktuellen Arbeitsverzeichnis als Ablageort für Datenbanken zu. Dem so gestarteten Container namens derby kann zur Überprüfung, ob der Server läuft, wie folgt ein ping
gesendet werden
Zum Beenden des Servers kann folgendes Kommando dienen
Mit dem Beenden des Derby Network Servers wird auch die Ausführung des Docker-Containers beendet, in dem er läuft und dieser Container entfernt.
Für viele Anwendungen empfiehlt sich die Ablage von Daten in einer Datenbank. Der dafür erforderliche Datenbankserver ist mit wenigen Schritten beschafft und in Betrieb genommen.