Oracle Database · · 3 Min.

JavaScript Stored Procedures in 26ai

Wie MLE datenintensive Logik näher an die Oracle-Daten bringt.

Mit dem Multilingual Engine (MLE) können Entwickler in Oracle AI Database 26ai JavaScript direkt in der Datenbank speichern und ausführen. Das ist interessant, wenn Verarbeitung nah an den Daten stattfinden soll oder vorhandene JavaScript-Logik wiederverwendet werden kann. Es ist aber kein Grund, jede Geschäftslogik aus PL/SQL oder dem Mittel-Tier zu verschieben.

Einordnung: MLE ergänzt PL/SQL um eine weitere serverseitige Sprache. Der Code läuft weiterhin mit Datenbankrechten und unter Datenbank-Ressourcenlimits – deshalb gelten Code Review, Least Privilege und Monitoring genauso wie für PL/SQL.

1. Module statt großer Inline-Blöcke

JavaScript kann als MLE-Modul und als Environment im Schema persistiert werden. Module eignen sich für versionierbare, wiederverwendbare Funktionen; Call Specifications stellen ausgewählte Exporte für SQL und PL/SQL bereit. Eine kleine Funktion kann inline definiert werden, für produktive Logik ist ein eigenes Modul mit klarer Schnittstelle meist leichter zu testen.

Die JavaScript-Implementierung in Oracle AI Database 26ai orientiert sich an ECMAScript 2023. Das erleichtert Teams mit JavaScript-Erfahrung den Einstieg, ändert aber nichts an der Datenbankabhängigkeit: Laufzeit, unterstützte Datentypen und Zugriff auf Oracle-APIs müssen auf der Zielplattform geprüft werden.

2. Eine kontrollierte Call Specification

Eine Call Specification verbindet eine PL/SQL-Prozedur mit einer JavaScript-Funktion in einem MLE-Modul. Ein vereinfachtes Muster sieht so aus:

CREATE OR REPLACE PROCEDURE hello(
  "p_who" VARCHAR2
)
AS MLE MODULE hello_mod
SIGNATURE 'hello';

Die eigentliche Funktion liegt im Modul und wird über ihre Signatur angesprochen. Diese Trennung ist hilfreich: Das Modul kann separat getestet werden, während die öffentliche Datenbankschnittstelle klein bleibt. Parameter und Rückgabewerte sollten bewusst gewählt werden; große JSON-Dokumente oder implizite Typkonvertierungen gehören in einen gemessenen Testfall.

3. Rechte nach Ausführungsweg trennen

Für MLE gibt es unterschiedliche Ausführungswege. Dynamische JavaScript-Ausführung über DBMS_MLE braucht zusätzliche Rechte. Für MLE-Module und Environments gelten eigene Privilegien; wer Module im eigenen Schema anlegen möchte, benötigt unter anderem CREATE MLE. Wird eine Call Specification angelegt, kommt CREATE PROCEDURE hinzu.

Die Rolle DB_DEVELOPER_ROLE kann in lokalen Entwicklungsdatenbanken den Einstieg vereinfachen. Für Test und Produktion sollte trotzdem ein präziseres Rollenmodell verwendet werden. Besonders weitreichende ANY-Privilegien gehören nur in begründete administrative Prozesse, nicht in allgemeine Entwickler- oder Anwendungskonten.

4. Performance und Verbindungsmodell

MLE ist für datenintensive Verarbeitung interessant, weil Zwischenresultate nicht zwingend über das Netzwerk in das Mittel-Tier transportiert werden müssen. Das ist aber nur ein Vorteil, wenn die Logik tatsächlich große Datenmengen verarbeitet oder viele Round Trips vermeidet. Ein kurzer JavaScript-Schritt mit häufigem Kontextwechsel kann schlechter sein als eine passende SQL- oder PL/SQL-Operation.

Für MLE gelten außerdem Betriebsbedingungen: Unterstützt werden dedizierte Serververbindungen auf Linux x86-64 und Linux Arm; auch DRCP kann mit dedizierten Servern eingesetzt werden. Shared-Server-Verbindungen können MLE nicht verwenden. Diese Einschränkung muss in Connection-Pools, ORDS- oder Batch-Architekturen berücksichtigt werden.

5. Sicherer Rollout

  1. Use Case und Datenmenge messen, bevor Logik in die Datenbank verschoben wird.
  2. MLE-Module und Call Specifications wie Quellcode versionieren und reviewen.
  3. Nur benötigte Privilegien für Modul, Prozedur und Datenzugriff vergeben.
  4. Typkonvertierungen, Fehlerbehandlung und Transaktionsgrenzen explizit testen.
  5. Dedicated-Server-Anforderung sowie DRCP-, RAC- und Pooling-Szenarien prüfen.
  6. Ausführungsdauer, Fehler, Session-Kontext und Ressourcenverbrauch überwachen.
Praxisregel: Nutze MLE dort, wo JavaScript fachlich oder technisch einen klaren Vorteil bringt. Halte die Datenbankschnittstelle klein und lasse die eigentliche Berechtigung weiterhin durch Oracle erzwingen.

Fazit

JavaScript Stored Procedures in Oracle AI Database 26ai erweitern die Datenbank um eine moderne serverseitige Laufzeit. Module, Call Specifications und ein präzises Rollenmodell machen daraus eine wartbare Architektur. Der beste Einstieg ist ein kleiner, messbarer Use Case mit dedizierter Verbindung, klaren Rechten und einem Rollback-fähigen Deployment.

Weiterführend: Oracles Übersicht zum Multilingual Engine, den Call Specifications für JavaScript und die Dokumentation zu MLE-Rechten.