Externe Prozeduren als SQL-Funktionen aufrufen

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

Externe Untersuchungen - Übersicht

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 Wiederverwendbarkeit, Effizienz und Modularität. Vorhandene in anderen Sprachen geschriebene Dynamic Link Librarys (DLLs) können aus PL/SQL-Programmen aufgerufen werden. Die DLLs werden nur bei Bedarf geladen und können verbessert werden, ohne die aufrufenden Programme zu beeinträchtigen.

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

Externe Prozeduren sind nützlich, wenn:

  • Lösung wissenschaftlicher und technischer Probleme

  • Daten werden analysiert

  • Steuerung von Geräten und Prozessen in Echtzeit

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 Ihre Autonomous Database auf einem privaten Endpunkt befindet. Die Agent-Instanz EXTPROC wird in einem privaten Subnetz gehostet, und die Autonomous Database greift über einen Reverse Connection Endpoint (RCE) auf den Agent EXTPROC zu.

Hinweis

Autonomous Database unterstützt nur externe C-Prozeduren.

Externe Prozeduren werden wie folgt bereitgestellt:

  • Ein von Oracle bereitgestelltes Containerimage mit dem 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 Ihrer Autonomous Database- und der Agent-Instanz EXTPROC wird sichergestellt, indem Sie Network Security Group-(NSG-)Regeln so festlegen, dass der Traffic von der Autonomous Database-Instanz, die auf einem privaten Endpunkt ausgeführt wird, zur Agent-Instanz EXTPROC zulässig ist.

    Das EXTPROC-Agent-Image ist für den Host vorkonfiguriert und führt externe Prozeduren auf Port 16000 aus.

  • 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 die C-Prozedur mit einem dieser Prototypen.

  • Kernighan & Ritchie Prototypen. Beispiel:

    void UpdateSalary(x)
     float x;
    ...
    
  • ISO/ANSI-Prototypen mit Ausnahme numerischer Datentypen, die kleiner als die volle Breite sind (z.B. float, short, char). Beispiel:

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

    In diesem Beispiel wird die Größe unter Standardargumentpromotions geändert:

    void UpdateSalary(float x)
    ...

Shared Library-Datei (.so) erstellen

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

Mit dem folgenden Befehl generieren Sie eine Shared Object Library:

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 im vorherigen Schritt definierte Prozedur UpdateSalary ist in der extproc.so-Bibliothek enthalten. Die Shared Object-(.so-)Librarys werden zur Laufzeit dynamisch geladen.

OCI Marketplace EXTPROC Stack-Anwendung herunterladen

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, und klicken Sie unter Marketplace auf Alle Anwendungen. Dadurch gelangen Sie zum Dashboard "Marketplace - 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 von Oracle Autonomous Database EXTPROC Agent.

EXTPROC Stack-Anwendung starten

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

  1. Führen Sie auf der Oracle Autonomous Database-Seite "EXTPROC Agent" unter Stacktyp die folgenden Schritte aus:
    • Wählen Sie in 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 zum Starten der Instanz im ausgewählten Compartment haben, wird die Instanz im Root Compartment gestartet.
    • Wählen Sie das Kontrollkästchen I have the Oracle Standard Terms and Restrictions aus.

  2. Klicken Sie auf Stack starten.

Dadurch gelangen Sie zur Seite Stack erstellen, 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 Provider

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

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

    • Erstellen in Compartment

    • 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 Freiformtag 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 der Stack erstellt, wenn Sie den Apply-Job für diesen Ausführungsplan ausführen.
  3. Geben Sie auf der Seite "Variablen konfigurieren" die Informationen in die folgenden Bereiche ein: EXTPROC-Agent konfigurieren, Netzwerkkonfiguration und Compute-Konfiguration.
    1. Geben Sie Informationen im Bereich EXTPROC-Agent konfigurieren an.
      • Externe Librarys: Geben Sie eine Liste der Librarys an, die durch Komma (,) getrennt sind und von Ihrer Autonomous Database aufgerufen werden sollen. 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 der 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. Geben Sie Informationen im Bereich Netzwerkkonfiguration an.
      • Compartment: Wählen Sie in 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-Agentinstanz im angegebenen Subnetz erstellt.

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

          • Gehen Sie unter Virtuelles Cloud-Netzwerk wie folgt vor:

            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.

          • Gehen Sie unter EXTPROC-Subnetz wie folgt vor:

            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 Agent-Instanz EXTPROC hinzu. Sie fügen auch eine Egress-Regel im öffentlichen Subnetz hinzu.

            Weitere Informationen finden Sie unter Netzwerkzugriff mit privaten Endpunkten konfigurieren.

      • EXTPROC Agent-Zugriffstyp: Wählen Sie eine der folgenden Optionen aus der Dropdown-Liste aus.

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

          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.

      • Private Endpunkt-IP-Adressen

        Geben Sie eine Liste der privaten Endpunkt-IP-Adressen an, die durch Komma (,) getrennt sind, für die Variable "IP-Adressen des privaten Endpunkts". 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 EXTPROC-Agent-Zugriffstyp auswählen.
    3. Geben Sie die Informationen zur Compute-Konfiguration an.
      • Compartment: Wählen Sie das Compartment, 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 unter "Anzahl OCPUs" die Anzahl der OCPUs, die Sie der EXTPROC-Agentinstanz zuweisen möchten.

      • Speichergröße (GB): Wählen Sie die Arbeitsspeichermenge in Gigabyte (GB), 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üsselpaars 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 Ihres Schlüsselpaares in das Feld hinzu.

  4. Klicken Sie auf Weiter.

    Daraufhin wird die Seite Prüfen geöffnet.

  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 Apply ausführen unter Apply 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 Job "Anwenden" aus, um entsprechend die entsprechenden Stackressourcen zu erstellen. Dadurch gelangen Sie zur Seite Jobdetails, und der Jobstatus lautet Akzeptiert. Wenn der Bewerbungsjob beginnt, wird der Status in In Bearbeitung geändert.

    Hinweis

    Die Informationen, die Sie für die Verbindung mit der 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

Im Rahmen der Erstellung der Agent-Anwendung EXTPROC wird ein selbstsigniertes Wallet 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 beziehen 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 sowie die Datenbankbenutzer-ID und das Kennwort ermöglichen den Zugriff auf die Agent-Instanz EXTPROC. Speichern Sie Wallet-Dateien an einem sicheren Ort und teilen Sie sie nur mit autorisierten Benutzern.

    • 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 Benutzernamen- und Kennwortparametern für verschiedene Objektspeicherservices finden Sie unter Prozedur CREATE_CREDENTIAL.
    Das Erstellen von Zugangsdaten für den Zugriff auf den Oracle Cloud Infrastructure-Objektspeicher ist nicht erforderlich, wenn Sie Resource-Principal-Zugangsdaten aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen nutzen.
  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. Laden Sie das Wallet mit DBMS_CLOUD.GET_OBJECT hoch. Beispiel:
    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 WALLET_DIR erstellt wurde. Das Wallet, mit dem Sie eine Verbindung zur Agent-Instanz EXTPROC 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 zur Ausführung externer Prozeduren konfiguriert haben, erstellen Sie eine Bibliothek 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 Ihrer Autonomous Database zu erstellen und C-Routinen als externe Prozedur in der Library zu registrieren:
  1. Erstellen einer Bibliothek.

    Eine externe Prozedur ist eine in einer Bibliothek gespeicherte C-Sprachroutine. 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. Beispiel:

    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 Dynamic Link Library in der Datenbank wird registriert. Die Agent-Instanz EXTPROC ist für das Hosten externer Prozeduren auf Port 16000 vorkonfiguriert.

    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 Ihrer Datenbank abzurufen.

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

  2. Erstellen Sie die Funktion.

    Beispiel:

    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 Bibliothek mit der Prozedur DROP_CATALOG löschen. Beispiel:
    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.