Llamada a scripts genéricos en una instancia de Autonomous Database

Puede llamar a scripts genéricos de tipo BASH, C o Python en su instancia de Autonomous Database.

Acerca de la ejecución de scripts genéricos en Autonomous Database

Puede llamar a scripts genéricos, incluidos scripts escritos en Bash, C o Python, desde una instancia de Autonomous Database.

No puede ejecutar un script genérico directamente en una instancia de Autonomous Database. En su lugar, el script se aloja de forma remota en una imagen de contenedor de Oracle Autonomous Database Extproc que se ejecuta en una red virtual en la nube (VCN) de Oracle Cloud Infrastructure. Llamará a scripts genéricos desde su instancia de Autonomous Database mediante trabajos de Oracle Scheduler. El trabajo de Oracle Scheduler que cree debe ser un trabajo ejecutable. Los trabajos ejecutables pueden ejecutar secuencias de comandos de shell u otros ejecutables.

Nota

Esta función solo está soportada para la versión 19c de la base de datos Oracle.

Los scripts genéricos de Autonomous Database solo están soportados cuando la base de datos está en un punto final privado. Para ejecutar scripts genéricos, debe obtener, instalar y configurar la imagen de contenedor de Oracle Autonomous Database con el agente EXTPROC instalado. La imagen de contenedor EXTPROC de Autonomous Database permite llamar a scripts y procedimientos externos escritos en BASH, C o Python desde su instancia de Autonomous Database. La instancia del agente EXTPROC se aloja en una subred privada, y Autonomous Database accede al agente EXTPROC a través de un punto final de conexión inversa (RCE).

Los scripts genéricos se despliegan mediante:

  • Una imagen de contenedor de Autonomous Database proporcionada por Oracle con el agente EXTPROC instalado. Oracle proporciona la imagen de contenedor en paquetes GitHub.

    Consulte GitHub README para obtener instrucciones para obtener y configurar la imagen de contenedor EXTPROC:

    La instancia del agente EXTPROC se aloja de forma remota en una imagen de contenedor que se ejecuta en una red virtual en la nube (VCN) de Oracle Cloud Infrastructure. La comunicación segura entre la instancia de Autonomous Database y la instancia de agente EXTPROC se protege mediante la definición de reglas de grupo de seguridad de red (NSG) para permitir el tráfico desde la instancia de Autonomous Database que se ejecuta en un punto final privado a la instancia de agente EXTPROC. La imagen del agente EXTPROC está preconfigurada para alojar y ejecutar procedimientos externos en el puerto 16000.

  • Procedimientos PL/SQL para registrar entornos de punto final y gestionar privilegios en los puntos finales registrados. Consulte DBMS_CLOUD_FUNCTION_ADMIN Package para obtener más información.

  • Procedimientos PL/SQL para crear y gestionar trabajos y programas del programador para llamar a scripts genéricos.

    Consulte DBMS_SCHEDULER para obtener más información.

Siga estos pasos para ejecutar un script genérico desde una instancia de Autonomous Database:

Carga de Cartera para Crear una Conexión Segura a la Instancia del Agente EXTPROC

Una cartera autofirmada se crea como parte de la creación de la aplicación del agente EXTPROC. Esta cartera permite acceder a la instancia del agente EXTPROC desde una instancia de Autonomous Database.

Para ejecutar scripts genéricos en la instancia del agente EXTPROC, Autonomous Database y el agente EXTPROC se conectan mediante la seguridad de capa de transporte mutuo (mTLS). Cuando se conecta al agente EXTPROC con mTLS, utiliza una conexión de base de datos TCPS (TCP seguro) mediante el estándar TLS 1.2 con un certificado de autoridad de certificación (CA) de cliente de confianza. Consulte Acerca de la conexión a una instancia de Autonomous Database para obtener más información.

Nota

También puede obtener y utilizar un certificado público emitido por una autoridad de certificación (CA).

Como requisito, debe exportar la cartera a Object Storage desde el directorio /u01/app/oracle/wallets/extproc_wallet/ en la máquina virtual donde se ejecuta EXTPROC. Esto permite que Autonomous Database utilice la cartera para acceder de forma segura a EXTPROC.

Cargue la cartera EXTPROC en la instancia de Autonomous Database:

  1. Importe la cartera, cwallet.sso, que contiene los certificados para la instancia de agente EXTPROC de Object Storage en la instancia de Autonomous Database. Tenga en cuenta lo siguiente para el archivo de cartera:
    • El archivo de cartera, junto con el ID de usuario y la contraseña de la base de datos, proporcionan acceso a la instancia del agente EXTPROC. Almacene los archivos de cartera en una ubicación segura y compártalos solo con usuarios autorizados.

    • No cambie el nombre del archivo de cartera. El archivo de cartera de Object Storage debe tener el nombre cwallet.sso.

  2. Cree credenciales para acceder a Object Storage en el que almacena el archivo de cartera cwallet.sso. Consulte el procedimiento CREATE_CREDENTIAL para obtener información sobre los parámetros de nombre de usuario y contraseña para diferentes servicios de almacenamiento de objetos.
    No es necesario crear una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure si activa las credenciales de entidad de recurso. Consulte Acerca del uso de la entidad de recurso para acceder a recursos de Oracle Cloud Infrastructure para obtener más información.
  3. Cree un directorio en la Autonomous Database para el archivo de cartera cwallet.sso.
    CREATE DIRECTORY wallet_dir AS 'directory_location';

    Consulte Creación de directorio en Autonomous Database para obtener más información sobre la creación de directorios.

  4. Utilice DBMS_CLOUD.GET_OBJECT para descargar la cartera de Object Storage. Por ejemplo:
    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;
    /

    En este ejemplo, namespace-string es el espacio del nombre de Oracle Cloud Infrastructure Object Storage y bucketname es el nombre del cubo. Consulte Espacios de nombres de Object Storage para más información.

    La cartera se copia en el directorio creado en el paso anterior, WALLET_DIR. La cartera que permite conectarse a la instancia de agente EXTPROC ahora está disponible en la instancia de Autonomous Database.

Pasos para invocar scripts genéricos

Muestra los pasos para llamar a scripts genéricos en una instancia de Autonomous Database.

Después de configurar la instancia de agente EXTPROC para ejecutar scripts genéricos, registre un punto final remoto y cree trabajos del programador para llamar a scripts genéricos.

A continuación se muestran los requisitos para llamar a scripts genéricos con Autonomous Database:

  • Los scripts genéricos se deben copiar en la instancia del agente EXTPROC. Consulte GitHub README para obtener más información.

  • Para crear y gestionar trabajos del programador para llamar a scripts genéricos con un usuario que no sea ADMIN, debe tener los siguientes privilegios:

    • MANAGE SCHEDULER

    • CREATE JOB

    • Privilegio en el punto final remoto registrado

Temas

Registro y gestión de punto final remoto en Autonomous Database

Como usuario ADMIN, realice los siguientes pasos para registrar y gestionar puntos finales remotos en su instancia de Autonomous Database.

Registro de un punto final remoto

Utilice DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV para registrar un punto final remoto.

Ejemplo:

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;
/

En este ejemplo se crea la biblioteca rem_executable y se registra la instancia del agente EXTPROC especificada en el parámetro remote_url en la instancia de Autonomous Database. La instancia del agente EXTPROC está preconfigurada para alojar scripts genéricos en el puerto 16000.

Consulte REGISTER_REMOTE_EXECUTION_ENV Procedure para obtener más información.

Gestión de privilegios en un punto final registrado

Este paso es opcional y solo es necesario cuando un usuario que no sea ADMIN necesita llamar a scripts genéricos desde Autonomous Database.

Utilice DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV para otorgar privilegios en el punto final registrado a un usuario que no sea el administrador.

Ejemplo:

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

En este ejemplo, se otorga el privilegio en REM_EXECUTABLE al usuario especificado. Consulte GRANT_REMOTE_EXECUTION_ENV Procedure para obtener más información.

Después de otorgar el privilegio en el punto final registrado, puede utilizar DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV para revocar el privilegio en el punto final registrado como usuario.

Ejemplo:

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

En este ejemplo, se revoca el privilegio en REM_EXECUTABLE del usuario especificado. Consulte REVOKE_REMOTE_EXECUTION_ENV Procedure para obtener más información.

Puede consultar DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT para mostrar los permisos otorgados para todos los puntos finales remotos. Consulte DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT View para obtener más información.

Eliminación de un punto final registrado

Utilice DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV para eliminar un punto final remoto registrado.

Ejemplo:

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

Esto elimina el punto final remoto rem_executable de su instancia de Autonomous Database. Consulte DEREGISTER_REMOTE_EXECUTION_ENV Procedure para obtener más información.

Crear y gestionar tareas de programador para invocar scripts genéricos

Muestra los pasos para crear y gestionar trabajos del programador para llamar a scripts genéricos desde Autonomous Database.

Para ejecutar los siguientes pasos como usuario que no sea ADMIN, debe tener los privilegios necesarios. Consulte Pasos para llamar a scripts genéricos para obtener más información.
  1. Utilice DBMS_SCHEDULER.CREATE_JOB para crear un trabajo del programador con el tipo de trabajo executable.

    Ejemplo:

    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;
    /

    En este ejemplo se crea el trabajo del programador rem_exec_job de tipo ejecutable.

    El parámetro job_name especifica el nombre del trabajo.

    El parámetro job_type especifica el tipo de acción de trabajo. Debe especificar job_type como ejecutable para llamar a scripts genéricos en su instancia de Autonomous Database.

    El parámetro job_action especifica la acción en línea del trabajo. Esta es la ubicación del script en el punto final remoto que debe llamar.

    El parámetro number_of_arguments especifica el número de argumentos de trabajo.

    El parámetro enabled indica si el trabajo se debe activar inmediatamente después de crearlo.

    El parámetro auto_drop indica si el trabajo se debe borrar una vez finalizado.

  2. Utilice DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE para definir el valor del argumento de trabajo.

    Ejemplo:

    BEGIN
     DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
        job_name          => 'rem_exec_job',
        argument_position => 1,
        argument_value    => 'param1');
     END;
    /
  3. Utilice DBMS_SCHEDULER.CREATE_JOB para modificar el atributo destination del trabajo rem_exec_job.

    Ejemplo:

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

    En este ejemplo, se modifica el atributo destination del trabajo rem_exec_job para especificar la ruta de la biblioteca remota.

    El parámetro job_name especifica el nombre del trabajo.

    El parámetro attribute especifica el atributo que se va a modificar.

    El parámetro value modifica el atributo destination para especificar el destino de punto final remoto.

    El parámetro acepta un valor de cadena en formato REMOTE_EXTPROC:remote_endpoint_name, donde remote_endpoint_name es el nombre del punto final remoto registrado.

    Se ha encontrado un error si no tiene privilegios en el punto final especificado.

    Consulte DBMS_SCHEDULER Subprograms para obtener más información.

  4. Ejecute DBMS_SCHEDULER.ENABLE en el trabajo del programador.

    Ejemplo:

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

    Este ejemplo activa el trabajo rem_exec_job. Consulte DBMS_SCHEDULER para obtener más información.

    Después de activar el trabajo, el programador comienza a ejecutar el trabajo.

    Consulte la vista USER_CLOUD_FUNCTION_RUN_DETAILS y la vista DBA_CLOUD_FUNCTION_RUN_DETAILS para ver el estado de los trabajos del programador.