Generische Skripte in einer Autonomous Database-Instanz aufrufen

Sie können generische Skripte des Typs BASH, C oder Python in Ihrer Autonomous Database aufrufen.

Allgemeine Skripte in Autonomous Database ausführen

Sie können generische Skripte, einschließlich in Bash, C oder Python geschriebener Skripte, aus einer Autonomous Database-Instanz aufrufen.

Sie können ein generisches Skript nicht direkt auf einer Autonomous Database-Instanz ausführen. Stattdessen wird das Skript remote auf einem Oracle Autonomous Database Extproc-Containerimage gehostet, das in einem virtuellen Cloud-Netzwerk (VCN) von Oracle Cloud Infrastructure ausgeführt wird. Mit Oracle Scheduler-Jobs rufen Sie generische Skripte aus Autonomous Database auf. Der von Ihnen erstellte Oracle Scheduler-Job muss ein ausführbarer Job sein. Die ausführbaren Jobs können Shellskripte oder andere ausführbare Dateien ausführen.

Hinweis

Dieses Feature wird nur für das Oracle-Datenbankrelease 19c unterstützt.

Generische Skripte aus Autonomous Database werden nur unterstützt, wenn sich die Datenbank auf einem privaten Endpunkt befindet. Um generische Skripte auszuführen, müssen Sie das Oracle Autonomous Database-Containerimage abrufen, installieren und konfigurieren, wobei der Agent EXTPROC installiert ist. Mit dem Autonomous Database-Containerimage EXTPROC können Sie externe Prozeduren und Skripte aufrufen, die in BASH, C oder Python aus Ihrer Autonomous Database geschrieben wurden. 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.

Generische Skripte werden wie folgt bereitgestellt:

  • Ein Oracle hat das Autonomous Database-Containerimage mit dem installierten EXTPROC-Agent bereitgestellt. Oracle stellt das Containerimage in GitHub-Packages bereit.

    Anweisungen zum Abrufen und Konfigurieren des EXTPROC-Containerimages finden Sie unter GitHub README:

    Die Agent-Instanz EXTPROC wird remote auf einem Containerimage gehostet, das in einem virtuellen Oracle Cloud Infrastructure-Cloud-Netzwerk (VCN) ausgeführt wird. Die sichere Kommunikation zwischen Ihrer Autonomous Database- und der Agent-Instanz EXTPROC wird gesichert, indem Network Security Group-(NSG-)Regeln festgelegt werden, sodass 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 zur Registrierung von Endpunktumgebungen und zur Verwaltung von Berechtigungen für die registrierten Endpunkte. Weitere Informationen finden Sie unter DBMS_CLOUD_FUNCTION_ADMIN Package.

  • PL/SQL-Prozeduren zum Erstellen und Verwalten von Scheduler-Jobs und Programmen zum Aufrufen generischer Skripte.

    Weitere Informationen finden Sie unter DBMS_SCHEDULER.

Führen Sie die folgenden Schritte aus, um ein generisches Skript aus einer Autonomous Database-Instanz auszuführen:

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 von einer Autonomous Database-Instanz auf die Agent-Instanz EXTPROC zugreifen.

Um generische Skripte in der Agent-Instanz EXTPROC auszuführen, verbinden sich Autonomous Database und der Agent EXTPROC mit Mutual Transport Layer Security (mTLS). Wenn Sie mit mTLS eine Verbindung zum EXTPROC-Agent herstellen, verwenden Sie eine TCPS-(Secure TCP-)Datenbankverbindung mit TLS 1.2-Standardzertifikat und einem CA-(Trusted Client Certificate Authority-)Zertifikat. 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/wallets/extproc_wallet/ auf der VM, auf der EXTPROC ausgeführt wird, in Object Storage exportieren. Dadurch kann Autonomous Database mit dem Wallet sicher auf die EXTPROC zugreifen.

Laden Sie das EXTPROC-Wallet in die Autonomous Database-Instanz hoch:

  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 den 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. Verwenden Sie DBMS_CLOUD.GET_OBJECT, um das Wallet aus Object Storage herunterzuladen. 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.

Schritte zum Aufrufen generischer Skripte

Zeigt die Schritte zum Aufrufen generischer Skripte in einer Autonomous Database an.

Nachdem Sie die Agent-Instanz EXTPROC so konfiguriert haben, dass generische Skripte ausgeführt werden, registrieren Sie einen Remoteendpunkt und erstellen Scheduler-Jobs, um generische Skripte aufzurufen.

Die folgenden Voraussetzungen sind erforderlich, um generische Skripte mit Autonomous Database aufzurufen:

  • Die generischen Skripte müssen in die EXTPROC-Agent-Instanz kopiert werden. Weitere Informationen finden Sie unter GitHub README.

  • Um Scheduler-Jobs zum Aufrufen generischer Skripte mit einem anderen Benutzer als ADMIN zu erstellen und zu verwalten, benötigen Sie die folgenden Berechtigungen:

    • MANAGE SCHEDULER

    • CREATE JOB

    • Berechtigung für den registrierten Remoteendpunkt

Themen

Remoteendpunkt in Autonomous Database registrieren und verwalten

Führen Sie als ADMIN-Benutzer die folgenden Schritte aus, um Remoteendpunkte in Autonomous Database zu registrieren und zu verwalten.

Remoteendpunkt registrieren

Verwenden Sie DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV, um einen Remoteendpunkt zu registrieren.

Beispiel:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV (
        remote_endpoint_name => 'rem_executable',
        remote_endpoint_url  => 'remote_extproc_hostname:16000',
        wallet_dir           => 'WALLET_DIR',
        remote_cert_dn       => 'CN=MACHINENAME'
);
END;
/

In diesem Beispiel wird die rem_executable-Bibliothek erstellt und die EXTPROC-Agentinstanz registriert, die im Parameter remote_url in Ihrer Autonomous Database angegeben ist. Die Agent-Instanz EXTPROC ist für das Hosten generischer Skripte auf Port 16000 vorkonfiguriert.

Weitere Informationen finden Sie unter Prozedur REGISTER_REMOTE_EXECUTION_ENV.

Berechtigungen für einen registrierten Endpunkt verwalten

Dieser Schritt ist optional und nur erforderlich, wenn ein anderer Benutzer als ADMIN generische Skripte aus Autonomous Database aufrufen muss.

Verwenden Sie DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV, um einem anderen Benutzer als ADMIN die Berechtigung für den registrierten Endpunkt zu erteilen.

Beispiel:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

In diesem Beispiel wird dem angegebenen Benutzer die Berechtigung für REM_EXECUTABLE erteilt. Weitere Informationen finden Sie unter Prozedur GRANT_REMOTE_EXECUTION_ENV.

Nachdem Sie die Berechtigung für den registrierten Endpunkt erteilt haben, können Sie mit DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV die Berechtigung für den registrierten Endpunkt als Benutzer entziehen.

Beispiel:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

In diesem Beispiel wird dem angegebenen Benutzer die Berechtigung für REM_EXECUTABLE entzogen. Weitere Informationen finden Sie unter Prozedur REVOKE_REMOTE_EXECUTION_ENV.

Sie können die DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT abfragen, um die Berechtigungen aufzulisten, die für alle Remoteendpunkte erteilt wurden. Weitere Informationen finden Sie in der Ansicht DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT.

Registrierten Endpunkt entfernen

Verwenden Sie DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV, um einen registrierten Remoteendpunkt zu entfernen.

Beispiel:

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE');
END;
/

Dadurch wird der Remoteendpunkt rem_executable aus Autonomous Database entfernt. Weitere Informationen finden Sie unter Prozedur DEREGISTER_REMOTE_EXECUTION_ENV.

Scheduler-Jobs zum Aufrufen generischer Skripte erstellen und verwalten

Zeigt die Schritte zum Erstellen und Verwalten von Scheduler-Jobs zum Aufrufen generischer Skripte aus Autonomous Database an.

Um die folgenden Schritte als anderer Benutzer als ADMIN ausführen zu können, benötigen Sie die erforderlichen Berechtigungen. Weitere Informationen finden Sie unter Schritte zum Aufrufen generischer Skripte.
  1. Mit DBMS_SCHEDULER.CREATE_JOB können Sie einen Scheduler-Job mit dem Jobtyp executable erstellen.

    Beispiel:

    BEGIN
     DBMS_SCHEDULER.CREATE_JOB (
        job_name             => 'rem_exec_job',
        job_type             => 'executable',
        job_action           => 'script_location_in_remote_docker_image/name',
        number_of_arguments  => 1,
        enabled              => false,
        auto_drop            => true);
     END;
    /

    In diesem Beispiel wird der Scheduler-Job rem_exec_job vom Typ "Executable" erstellt.

    Mit dem Parameter job_name wird der Name des Jobs angegeben.

    Der Parameter job_type gibt den Jobaktionstyp an. Sie müssen job_type als ausführbare Datei angeben, um generische Skripte in Autonomous Database aufzurufen.

    Der Parameter job_action gibt die Inlineaktion des Jobs an. Dies ist der Speicherort des Skripts auf dem Remoteendpunkt, den Sie aufrufen müssen.

    Der Parameter number_of_arguments gibt die Anzahl der Jobargumente an.

    Der Parameter enabled gibt an, ob der Job unmittelbar nach der Erstellung aktiviert werden soll.

    Der Parameter auto_drop gibt an, ob der Job nach Abschluss gelöscht werden soll.

  2. Verwenden Sie DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE, um den Wert des Jobarguments festzulegen.

    Beispiel:

    BEGIN
     DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
        job_name          => 'rem_exec_job',
        argument_position => 1,
        argument_value    => 'param1');
     END;
    /
  3. Verwenden Sie DBMS_SCHEDULER.CREATE_JOB, um das Attribut destination des Jobs rem_exec_job zu ändern.

    Beispiel:

    BEGIN
     DBMS_SCHEDULER.SET_ATTRIBUTE (
          name       => 'rem_exec_job',
          attribute  => 'destination',
          value      => 'REMOTE_EXTPROC:remote_endpoint_name');
     END;
    /

    In diesem Beispiel wird das Attribut destination des Jobs rem_exec_job geändert, um den Remote-Bibliothekspfad anzugeben.

    Mit dem Parameter job_name wird der Name des Jobs angegeben.

    Der Parameter attribute gibt das zu ändernde Attribut an.

    Der Parameter value ändert das Attribut destination, um das Remoteendpunktziel anzugeben.

    Der Parameter akzeptiert einen Zeichenfolgenwert im Format REMOTE_EXTPROC:remote_endpoint_name, wobei remote_endpoint_name der Name des registrierten Remoteendpunkts ist.

    Ein Fehler ist aufgetreten, wenn Sie keine Berechtigungen für den angegebenen Endpunkt haben.

    Weitere Informationen finden Sie unter DBMS_SCHEDULER-Unterprogramme.

  4. Führen Sie den Scheduler-Job DBMS_SCHEDULER.ENABLE aus.

    Beispiel:

    BEGIN
     DBMS_SCHEDULER.ENABLE (
        name => 'rem_exec_job');
     END; 
    /

    In diesem Beispiel wird der Job rem_exec_job aktiviert. Weitere Informationen finden Sie unter DBMS_SCHEDULER.

    Nachdem Sie den Job aktiviert haben, beginnt der Scheduler, den Job auszuführen.

    Fragen Sie USER_CLOUD_FUNCTION_RUN_DETAILS View und DBA_CLOUD_FUNCTION_RUN_DETAILS View ab, um den Status Ihrer Scheduler-Jobs anzuzeigen.