Von Matthias Jung auf Donnerstag, 07. Mai 2020
Kategorie: Data Management

PL/SQL in MariaDB: Lost in translation?

Generell ist das MySQL-Universum in der letzten Zeit unübersichtlich geworden. Die unterschiedlichen Forks (Oracle, MariaDB, Percona, ...) entwickeln sich teilweise in verschiedene Richtungen bzw. positionieren sich heterogen im Markt. MariaDB bemüht sich dabei auch offensichtlich um die klassischen Oracle-Datenbank-Kunden. Mit der Version MariaDB 10.3 wurde unter anderem ein Subset der Sprache PL/SQL implementiert.

Im Folgenden soll kurz in einer Art Selbstversuch gezeigt werden, welche Schritte notwendig sind, um PL/SQL-Code in einer MariaDB (hier schon in der Version 10.4.11) zu nutzen.

Let's talk PL/SQL

Nach der Installation einer MariaDB (z.B. über fertige Docker Images (https://hub.docker.com/_/mariadb) muss die Datenbank für die Verwendung von PL/SQL konfiguriert werden:
Ab diesem Moment ist die Verwendung von PL/SQL-Code in MariaDB möglich.

Was liegt näher als dies zu testen? Im Folgenden werden wird für ein paar kleinere Demonstrationen das wohlbekannte Oracle Beispielschema "hr" benutzten. Unter anderem nutzen wir die Tabellen "EMPLOYEE" und "JOB_HISTORY". Diese enthalten Mitarbeiterdaten (Name, Gehalt, Jobtitel usw.), bzw. die Job-Historie von einzelnen Mitarbeitern.
Der oben stehende Code ist ein kleiner (sinnfreier) Block Oracle-PL/SQL-Code, der uns eine Textnachricht mit dem Gehalt für einen Mitarbeiter generiert. Er ließ sich problemlos in die MariaDB einspielen und kompilieren. Auch der Aufruf der Prozedur ist problemfrei und der Rückgabewert der Prozedur wird in der Variablen @val zurückgeliefert.

Translate this​! - Oracle 19 in MariaDB migieren

Von diesem Ergebnis motiviert wagen wir den nächsten Schritt. Nun sollen Elemente des Schemas "hr" aus einer Oracle 19 Datenbank in die MariaDB migriert werden:

Hierzu wird das Werkzeug Amazon SCT (Schema Conversion Tool) eingesetzt. Dies erlaubt unter anderem die Migration der Strukturen (nicht der Daten!) von einer Oracle DB in eine MariaDB. Andere Konstellationen (inkl. MySQL, PostgreSQL,...) sind auch realisierbar (Details unter: https://aws.amazon.com/de/dms/schema-conversion-tool/).

Die Objekte werden mit Originalnamen und -schreibweise (case-sensitive) auf der MariaDB erzeugt. In unserem Fall sind daher alle Objektnamen in Großbuchstaben erstellt worden. Dies kann aber auf Seiten der MariaDB z.B. über den Parameter (lower_case_table_names) in der Anwendung korrigiert werden.

Nach wenigen Sekunden ist das Datenmodell übertragen. Trotzdem sollte man das Ergebnis kontrollieren:

Alle Tabellen, Views und Sequenzen wurden erfolgreich migriert. Doch was ist mit den Prozeduren​? Auch hier ist also alles im grünen Bereich​.

PL/SQL for runaways?

Zeit für einen kleinen Test. Dazu müssen zunächst aber noch ein paar Daten angelegt werden. Wie bereits erwähnt, wurden ja nur die Strukturen (also z.B. leere Tabellen) und nicht die Daten konvertiert. Mittels der Prozedur wird, z.B. im Rahmen einer Beförderung, Versetzung oder Kündigung protokolliert, welcher Mitarbeiter wann welche Position in der Firma innehatte. Der Code der Prozedur ist der folgende (aus den Oracle SQL-Dateien): Nun versuchen wir diesen Code aufzurufen, um den Eintrag des Mitarbeiters #1 (Matthias Jung) in die Tabelle "JOB_HISTORY" zu protokollieren. Dazu deklarieren wir uns über ein SQL-Statement die Variablen @ID und @DATE und nutzen diese beim Aufruf der Prozedur: Die Prozedur läuft einwandfrei​.

So far, so good ;-)

Hiermit soll unser kleiner Test abgeschlossen sein. Natürlich wird es nicht ohne weiteres problemlos möglich sein, komplexe PL/SQL-Datenbanken/Applikationen einfach auf MariaDB zu portieren. Unter anderem fehlen alle per default ausgelieferten Packages einer Oracle DB (z.B. dbms_output). Aber auch hier gibt es die ersten aktiven Entwickler, die damit beginnen, diese Pakete für MySQL nachzuimplementieren.

Trotzdem ist es spannend zu sehen, dass es Bemühungen gibt, den Wechsel von Oracle in die OpenSource-Welt noch weiter zu vereinfachen.

Weitere Hinweise zu PL/SQL in MariaDB finden Sie unter:
https://mariadb.com/kb/en/sql_modeoracle-from-mariadb-103/

Sollten Sie Fragen zum Thema Datenbank-Migration und/oder zu MySQL (MariaDB) Datenbanken im Allgemeinen haben, dann sprechen Sie uns an.
Kommentare hinterlassen