Externe Prozeduren als SQL-Funktionen aufrufen

Zeigt die Schritte zum Aufrufen externer Prozeduren mit PL/SQL in der Datenbank an.

Übersicht über externe Prozeduren

Externe Prozeduren sind Funktionen, die in einer Sprache der dritten Generation geschrieben und aus PL/SQL oder SQL aufgerufen werden können, als wären sie eine PL/SQL-Routine oder -Funktion.

Externe Verfahren fördern die Wiederverwendbarkeit, Effizienz und Modularität. Vorhandene Dynamic Link Librarys (DLLs), die in anderen Sprachen geschrieben sind, können aus PL/SQL-Programmen aufgerufen werden. Die DLLs werden nur bei Bedarf geladen und können verbessert werden, ohne dass sich dies auf die aufrufenden Programme auswirkt.

Die Verwendung externer Prozeduren verbessert auch die Performance, da Sprachen der dritten Generation bestimmte Aufgaben effizienter ausführen als PL/SQL, das besser für die SQL-Transaktionsverarbeitung geeignet ist.

Externe Verfahren sind nützlich, wenn:

  • Lösung von wissenschaftlichen und technischen Problemen

  • Daten analysieren

  • Steuerung von Echtzeitgeräten und -prozessen

Weitere Informationen finden Sie unter Was ist eine externe Prozedur?.

Externe Prozeduren in Autonomous Database verwenden

Sie können externe Prozeduren in Autonomous Database mit benutzerdefinierten Funktionen aufrufen und verwenden.

Sie installieren keine externen Prozeduren auf einer Autonomous Database-Instanz. Um eine externe Prozedur zu verwenden, wird die Prozedur remote auf einer VM gehostet, die in einem virtuellen Cloud-Netzwerk (VCN) von Oracle Cloud Infrastructure ausgeführt wird.

Externe Prozeduren werden nur unterstützt, wenn sich Autonomous Database auf einem privaten Endpunkt befindet. Die Agent-Instanz EXTPROC wird in einem privaten Subnetz gehostet, und Autonomous Database greift über einen Reverse Connection-Endpunkt (RCE) auf den EXTPROC-Agent zu.

Hinweis

Autonomous Database unterstützt nur externe C-Prozeduren.

Externe Prozeduren werden wie folgt bereitgestellt:

  • Ein von Oracle bereitgestelltes Containerimage mit einem EXTPROC-Agent, der als Teil des Oracle Cloud Infrastructure-(OCI-)Marketplace-Stacks installiert und konfiguriert ist.

    Die Agent-Instanz EXTPROC wird remote auf einer VM gehostet, die in einem virtuellen Cloud-Netzwerk (VCN) von Oracle Cloud Infrastructure ausgeführt wird. Die sichere Kommunikation zwischen Autonomous Database und der Agent-Instanz EXTPROC wird sichergestellt, indem Regeln für die Netzwerksicherheitsgruppe (NSG) festgelegt werden, sodass der Traffic von Ihrer Autonomous Database-Instanz, die auf einem privaten Endpunkt ausgeführt wird, zur Agent-Instanz EXTPROC zulässig ist.

    Das Agent-Image EXTPROC ist für das Hosten und Ausführen externer Prozeduren auf Port 16000 vorkonfiguriert.

  • PL/SQL-Prozeduren zum Erstellen einer Library sowie zum Registrieren und Aufrufen externer Funktionen und Prozeduren.

    Weitere Informationen finden Sie unter DBMS_CLOUD_FUNCTION Package.

Führen Sie die folgenden Schritte aus, um eine externe Prozedur in Autonomous Database aufzurufen:

C-Prozedur definieren

Definieren Sie das C-Verfahren mit einem dieser Prototypen.

  • Kernighan & Ritchie Stil Prototypen. Beispiele:

    void UpdateSalary(x)
     float x;
    ...
    
  • ISO/ANSI-Prototypen, die keine numerischen Datentypen sind, die kleiner als die volle Breite sind (wie float, short, char). Beispiele:

    void UpdateSalary(double x)
    ...
    
  • Andere Datentypen, die unter Standardargumentpromotions die Größe nicht ändern.

    Dieses Beispiel ändert die Größe unter Standardargumentpromotions:

    void UpdateSalary(float x)
    ...

Shared-Library-Datei (.so) erstellen

Erstellen Sie eine Shared Object-(.so-Datei-)Library. Die Shared Object Library enthält die C-Prozedur (externe Prozedur), die im vorherigen Schritt definiert wurde.

Sie generieren eine Shared Object Library mit dem folgenden Befehl:

gcc -I/u01/app/oracle/extproc_libs/ -shared -fPIC -o extproc.so UpdateSalary.c

Dadurch wird die Shared Object-(.so-)Bibliothek extproc.so erstellt. Die Prozedur UpdateSalary, die im vorherigen Schritt definiert wurde, ist in der extproc.so-Bibliothek enthalten. Die gemeinsam verwendeten Objektbibliotheken (.so) werden zur Laufzeit dynamisch geladen.

Holen Sie sich die OCI Marketplace EXTPROC Stack-Anwendung

Zeigt die Schritte zum Abrufen der OCI Marketplace-Stackanwendung EXTPROC an.

Führen Sie die folgenden Schritte durch:
  1. Melden Sie sich bei der OCI-Konsole unter http://cloud.oracle.com an. Weitere Informationen finden Sie unter Bei der Oracle Cloud Infrastructure-Konsole anmelden.
  2. Klicken Sie im linken Navigationsmenü von Oracle Cloud Infrastructure auf Marketplace. Klicken Sie dann unter Marketplace auf Alle Anwendungen. Dadurch gelangen Sie zum Marketplace-Dashboard für alle Anwendungen.
  3. Geben Sie EXTPROC in das Suchfeld ein, und klicken Sie auf Suchen.
  4. Klicken Sie auf das Widget EXTPROC von Typ: Stack.
Dadurch gelangen Sie zur Detailseite des Oracle Autonomous Database EXTPROC Agent.

EXTPROC Stack-Anwendung starten

Starten Sie die EXTPROC-Stackanwendung auf der Seite "EXTPROC-Anwendungsdetails".

  1. Führen Sie auf der Oracle Autonomous Database-Seite EXTPROC Agent unter Stack eingeben die folgenden Aktionen aus:
    • Wählen Sie aus der Dropdown-Liste Version die Packageversion des Stacks aus. Standardmäßig wird im Menü die neueste Version angezeigt.

    • Wählen Sie in der Dropdown-Liste Compartment den Namen des Compartments aus, in dem Sie die Instanz starten möchten.

      Hinweis

      Wenn Sie keine Berechtigung haben, die Instanz im ausgewählten Compartment zu starten, wird die Instanz im Root Compartment gestartet.
    • Aktivieren Sie das Kontrollkästchen Ich habe die Oracle Standard Terms and Restrictions und akzeptieren

  2. Klicken Sie auf Stack starten.

Daraufhin wird die Seite Stack erstellen angezeigt, auf der Sie einen Stack für den EXTPROC-Agent erstellen können.

Stack für EXTPROC Agent-Anwendung erstellen

Zeigt die Schritte zum Erstellen des Stacks für die Instanz EXTPROC an.

Führen Sie im Assistenten Stack erstellen die folgenden Schritte aus:
  1. Prüfen und bearbeiten Sie auf der Seite Stackinformationen die folgenden Informationen nach Bedarf:
    • Stackinformationen

    • Benutzerdefinierte Mitarbeiter

    • Name (optional): Sie können den Standard-Stacknamen bearbeiten. Geben Sie dabei keine vertraulichen Informationen ein.

    • Beschreibung (optional): Sie können die Standardstackbeschreibung bearbeiten. Geben Sie dabei keine vertraulichen Informationen ein.

    • In Compartment erstellen

    • Terraform-Version

    • Tags: Geben Sie Folgendes an, um dem Stack Tags zuzuweisen.

      • Tag-Namespace: Um ein definiertes Tag hinzuzufügen, wählen Sie einen vorhandenen Namespace aus. Um ein Freigeben-Tag hinzuzufügen, lassen Sie den Wert leer.

      • Tagschlüssel: Um ein definiertes Tag hinzuzufügen, wählen Sie einen vorhandenen Tagschlüssel aus. Um ein Freiformtag hinzuzufügen, geben Sie den gewünschten Schlüsselnamen ein.

      • Tagwert: Geben Sie den gewünschten Tagwert ein.

      Tag hinzufügen: Klicken Sie auf diese Option, um ein weiteres Tag hinzuzufügen.

      Weitere Informationen zum Tagging finden Sie unter Ressourcentags.

  2. Klicken Sie auf Weiter.
    Daraufhin wird die Seite Variablen konfigurieren geöffnet, auf der Sie Variablen für die Infrastrukturressourcen konfigurieren können, die vom Stack erstellt werden, wenn Sie den Job "Anwenden" für diesen Ausführungsplan ausführen.
  3. Geben Sie auf der Seite "Variablen konfigurieren" die Informationen in den folgenden Bereichen ein: EXTPROC-Agent konfigurieren, Netzwerkkonfiguration und Compute-Konfiguration.
    1. Geben Sie Informationen im Bereich EXTPROC-Agent konfigurieren an.
      • Externe Librarys: Geben Sie eine durch Komma (,) getrennte Liste der Librarys an, die Sie aus Autonomous Database aufrufen möchten. Beispiel: extproc.so, extproc1.so.

        Nachdem Sie den Stack erstellt haben, müssen Sie die Librarys in das Verzeichnis /u01/app/oracle/extproc_libs auf der Agent-VM EXTPROC kopieren.

      • Wallet-Kennwort: Geben Sie das Wallet-Kennwort an.

        Das Wallet und ein selbstsigniertes Zertifikat werden für die gegenseitige TLS-Authentifizierung zwischen Autonomous Database und der Agent-VM EXTPROC generiert. Das Wallet wird im Verzeichnis /u01/app/oracle/extproc_wallet erstellt.
        Hinweis

        Nachdem das Wallet erstellt wurde, kann das Wallet-Kennwort nicht mehr geändert werden.
    2. Bereitstellung von Informationen im Bereich Netzwerkkonfiguration.
      • Compartment: Wählen Sie aus der Dropdown-Liste das Compartment aus, in dem Sie die Konfiguration platzieren möchten.

      • Netzwerkstrategie: Wählen Sie eine der Optionen aus der Dropdown-Liste aus, Neues VCN und Subnetz erstellen oder Vorhandenes VCN und Subnetz verwenden.

        • Neues VCN und Subnetz erstellen: Wählen Sie diese Option aus, wenn kein privater Endpunkt für Autonomous Database konfiguriert ist. Dadurch wird ein neues VCN mit öffentlichem und privatem Subnetz erstellt, das mit Sicherheitsregeln vorkonfiguriert ist.

          Wenn Sie diese Option auswählen, wird auf der Seite auch die Dropdown-Liste "Konfigurationsstrategie" angezeigt:

          Wählen Sie in der Dropdown-Liste Konfigurationsstrategie die Option Empfohlene Konfiguration verwenden aus.

        • Vorhandenes VCN und Subnetz verwenden: Wählen Sie diese Option aus, um den EXTPROC-Agent mit einem vorhandenen VCN zu erstellen. Dadurch wird die EXTPROC-Agent-Instanz im angegebenen Subnetz erstellt.

          Wenn Sie diese Option auswählen, geben Sie die folgenden Informationen für das vorhandene VCN und Subnetz an:

          • Führen Sie unter Virtuelles Cloud-Netzwerk folgende Schritte aus:

            Wählen Sie in der Dropdown-Liste Vorhandenes VCN ein vorhandenes VCN aus. Wenn das angegebene VCN nicht vorhanden ist, wird ein neues VCN erstellt.

          • Führen Sie unter EXTPROC-Subnetz folgende Schritte aus:

            Wählen Sie in der Dropdown-Liste Vorhandenes Subnetz ein vorhandenes Subnetz aus.

            Wenn Sie ein vorhandenes VCN und Subnetz verwenden möchten, fügen Sie eine Ingress-Regel für den Port 16000 der EXTPROC-Agent-Instanz hinzu. Außerdem fügen Sie eine Egress-Regel für das öffentliche Subnetz hinzu.

            Weitere Informationen finden Sie unter Netzwerkzugriff mit privaten Endpunkten konfigurieren.

      • Zugriffstyp für EXTPROC-Agent: Wählen Sie in der Dropdown-Liste eine der folgenden Optionen.

        • Sicherer Zugriff von bestimmten privaten ADB-S-Endpunktdatenbanken in Ihrem VCN: Wählen Sie diese Option aus, um zuzulassen, dass nur angegebene private Endpunkt-IPs in Ihrem virtuellen Cloud-Netzwerk (VCN) eine Verbindung zu Ihrem EXTPROC-Agent herstellen.

          Wenn diese Option ausgewählt ist, geben Sie im nächsten Schritt eine Liste der zulässigen IP-Adressen des privaten Endpunkts an.

        • Sicherer Zugriff von allen privaten ADB-S-Endpunktdatenbanken in Ihrem VCN: Wählen Sie diese Option aus, damit jeder private Endpunkt in Ihrem virtuellen Cloud-Netzwerk (VCN) eine Verbindung zu Ihrem EXTPROC-Agent herstellen kann.

      • IP-Adressen des privaten Endpunkts

        Geben Sie eine Liste der privaten Endpunkt-IP-Adressen getrennt durch Komma (,) für die Variable "Private Endpunkt-IP-Adressen" an. Zum Beispiel, 10.0.0.0, 10.0.0.1.

        Hinweis

        Dieses Feld wird nur angezeigt, wenn Sie Sicherer Zugriff von bestimmten privaten ADB-S-Endpunktdatenbanken in Ihrem VCN für den Zugriffstyp für EXTPROC-Agent auswählen.
    3. Geben Sie die Informationen zur Compute-Konfiguration an.
      • Compartment: Wählen Sie das Compartment aus, in dem Sie den Stack erstellen möchten.

      • Ausprägung: Wählen Sie eine Ausprägung basierend auf den Workload-Anforderungen der Agent-Instanz EXTPROC aus. Die Ausprägung bestimmt die Ressourcen, die der Agent-Instanz EXTPROC zugewiesen sind.

      • Anzahl OCPUs: Wählen Sie die Anzahl der OCPUs aus, die Sie der EXTPROC-Agent-Instanz zuweisen möchten.

      • Speichergröße (GB): Wählen Sie die Arbeitsspeichermenge in Gigabyte (GB) aus, die Sie der Agent-Instanz EXTPROC zuweisen möchten.

      • SSH-Schlüssel hinzufügen: Laden Sie einen SSH-Public Key hoch, oder fügen Sie den Public Key ein. Wählen Sie eine der folgenden Optionen aus:
        • SSH-Schlüsseldatei auswählen: Laden Sie den Public-Key-Teil des Schlüsselpaares hoch. Navigieren Sie zu der Schlüsseldatei, die Sie hochladen möchten, oder verschieben Sie die Datei per Drag-and-Drop in das Feld.

        • SSH-Schlüssel einfügen: Fügen Sie den Public-Key-Teil des Schlüsselpaars in das Feld ein.

  4. Klicken Sie auf Weiter.

    Dies führt Sie zur Seite Prüfen.

  5. Führen Sie auf der Seite Prüfen die folgenden Schritte aus:
    1. Prüfen Sie die Konfigurationsvariablen.
    2. Aktivieren Sie das Kontrollkästchen Anwendung ausführen unter Anwendung für den erstellten Stack ausführen?
    3. Klicken Sie auf Erstellen.
    Hinweis

    In diesem Bereich werden keine Variablen angezeigt, die Standardwerte oder Variablen enthalten, die Sie nicht geändert haben.

    Resource Manager führt den Apply-Job aus, um die entsprechenden Stackressourcen zu erstellen. Daraufhin wird die Seite Jobdetails angezeigt, und der Jobstatus lautet Akzeptiert. Wenn der Job "Anwenden" gestartet wird, wird der Status in In Bearbeitung aktualisiert.

    Hinweis

    Die Informationen, die Sie für die Verbindung zur Instanz benötigen, die als Teil des Stacks erstellt wurde, sind auf der Registerkarte Anwendungsinformationen verfügbar.

Wallet hochladen, um eine sichere Verbindung zur EXTPROC-Agent-Instanz zu erstellen

Ein selbstsigniertes Wallet wird beim Erstellen der Agent-Anwendung EXTPROC erstellt. Mit diesem Wallet können Sie auf die Agent-Instanz Extrpoc zugreifen.

Um Remoteprozeduren in der Agent-Instanz EXTPROC auszuführen, verbinden sich die Autonomous Database- und der Agent EXTPROC mit Mutual Transport Layer Security (mTLS). Mit Mutual Transport Layer Security (mTLS) stellen Clients Verbindungen über eine TCPS-(Secure TCP-)Datenbankverbindung mit dem Standard TLS 1.2 und einem vertrauenswürdigen Client-Certificate-Authority(CA-)Zertifikat her. Weitere Informationen finden Sie unter Verbindungen zu Autonomous Database-Instanzen herstellen.
Hinweis

Sie können auch ein öffentliches Zertifikat erhalten und verwenden, das von einer Certificate Authority (CA) ausgestellt wurde.

Als Voraussetzung müssen Sie das Wallet aus dem Verzeichnis /u01/app/oracle/extproc_wallet auf der VM, auf der EXTPROC ausgeführt wird, in Object Storage exportieren.

Führen Sie die folgenden Schritte aus, um das Wallet in Autonomous Database hochzuladen:

  1. Importieren Sie das Wallet cwallet.sso mit den Zertifikaten für die Agent-Instanz EXTPROC aus Object Storage in Autonomous Database. Beachten Sie Folgendes für die Wallet-Datei:
    • Die Wallet-Datei bietet zusammen mit der Datenbankbenutzer-ID und dem Kennwort Zugriff auf die Agent-Instanz EXTPROC. Speichern Sie Wallet-Dateien an einem sicheren Ort, und geben Sie sie nur für autorisierte Benutzer frei.

    • Benennen Sie die Wallet-Datei nicht um. Die Wallet-Datei in Object Storage muss den Namen cwallet.sso haben.

  2. Erstellen Sie Zugangsdaten für den Zugriff auf Object Storage, in dem Sie die Wallet-Datei cwallet.sso speichern. Informationen zu den Parametern für Benutzername und Kennwort für verschiedene Object Storage-Services finden Sie unter Prozedur CREATE_CREDENTIAL.
    Das Erstellen von Zugangsdaten für den Zugriff auf Oracle Cloud Infrastructure Object Storage ist nicht erforderlich, wenn Sie Zugangsdaten für den Resource Principal aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen verwenden.
  3. Erstellen Sie ein Verzeichnis in Autonomous Database für die Wallet-Datei cwallet.sso.
    CREATE DIRECTORY wallet_dir AS 'directory_location';

    Weitere Informationen zum Erstellen von Verzeichnissen finden Sie unter Verzeichnis in Autonomous Database erstellen.

  4. Verwenden Sie DBMS_CLOUD.GET_OBJECT, um das Wallet hochzuladen. Beispiele:
    BEGIN
      DBMS_CLOUD.GET_OBJECT (
        credential_name     => 'DEF_CRED_NAME',
        object_uri          => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
        directory_name      => 'WALLET_DIR'
    );
    END;
    /

    In diesem Beispiel ist namespace-string der Oracle Cloud Infrastructure Object Storage-Namespace und bucketname der Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.

    Das Wallet wird in das Verzeichnis kopiert, das im vorherigen Schritt erstellt wurde, WALLET_DIR. Das Wallet, mit dem Sie eine Verbindung zur EXTPROC-Agent-Instanz herstellen können, ist jetzt in Ihrer Autonomous Database-Instanz verfügbar.

Externe Prozeduren als SQL-Funktion aufrufen - Schritte

Zeigt die Schritte zum Aufrufen einer externen Prozedur als SQL-Funktion an.

Nachdem Sie die OCI Marketplace-Stackanwendung EXTPROC gestartet und für die Ausführung externer Prozeduren konfiguriert haben, erstellen Sie eine Library mit SQL-Wrapper-Funktionen, die ihre jeweiligen externen Prozeduren referenzieren und aufrufen.

Als Voraussetzung müssen die Librarys auf der Ausnahmeliste in das Verzeichnis /u01/app/oracle/extproc_libs auf der VM EXTPROC kopiert werden.

Führen Sie die folgenden Schritte aus, um eine Library in Autonomous Database zu erstellen und C-Routinen als externe Prozedur in der Library zu registrieren:
  1. Library erstellen.

    Eine externe Prozedur ist eine C-Sprachroutine, die in einer Bibliothek gespeichert ist. Um externe Prozeduren mit Autonomous Database aufzurufen, erstellen Sie eine Library.

    Führen Sie DBMS_CLOUD_FUNCTION.CREATE_CATALOG aus, um eine Library zu erstellen. Beispiele:

    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
            library_name               => 'demolib',
            library_listener_url       => 'remote_extproc_hostname:16000',
            library_wallet_dir_name    => 'wallet_dir',
            library_ssl_server_cert_dn => 'CN=VM Hostname',
            library_remote_path        => '/u01/app/oracle/extproc_libs/library name'
    );
    END;
    /
    

    Dadurch wird die demolib-Library in Autonomous Database erstellt und die dynamische Link-Library in der Datenbank registriert. Die Agent-Instanz EXTPROC ist vorkonfiguriert, um externe Prozeduren auf Port 16000 zu hosten.

    Weitere Informationen finden Sie unter Prozedur CREATE_CATALOG.

    Fragen Sie die Ansichten DBA_CLOUD_FUNCTION_CATALOG View und USER_CLOUD_FUNCTION_CATALOG View ab, um die Liste aller Kataloge und Librarys in der Datenbank abzurufen.

    Fragen Sie die Ansicht USER_CLOUD_FUNCTION_ERRORS View ab, um alle Fehler aufzulisten, die während der Verbindungsvalidierung mit dem Remote-Library-Speicherort generiert wurden.

  2. Erstellen Sie die Funktion.

    Beispiele:

    CREATE OR REPLACE FUNCTION ftest(
          x VARCHAR2, 
          y VARCHAR2) 
    RETURN VARCHAR2 AS LANGUAGE C
          LIBRARY test
          NAME "demolib"
          PARAMETERS(
              x STRING, 
              y STRING)
          AGENT IN (x);
    /
  3. Sie können eine vorhandene Library mit der Prozedur DROP_CATALOG löschen. Beispiele:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          LIBRARY_NAME  => 'demolib'
      );
    END;
    /
    

    Dadurch wird die DEMOLIB-Bibliothek gelöscht.

    Weitere Informationen finden Sie unter Prozedur DROP_CATALOG.