API de REST de DBMS_CLOUD
En esta sección se tratan las API de REST DBMS_CLOUD que se proporcionan con Autonomous AI Database en una infraestructura de Exadata dedicada.
Requisitos
Como desarrollador, puede utilizar procedimientos DBMS_CLOUD con bases de datos de IA autónomas desplegadas en Oracle Public Cloud, Multicloud o Exadata Cloud@Customer.
Según la opción de despliegue, se deben cumplir los siguientes requisitos previos para utilizar los procedimientos DBMS_CLOUD con los proveedores de servicios Amazon S3, Azure Blob Storage y Google Cloud Storage.
El administrador del conjunto debe haber configurado una conectividad saliente mediante un gateway de NAT, como se describe a continuación:
-
Para crear un Gateway de NAT en la red virtual en la nube (VCN) donde residen los recursos de la base de datos de IA autónoma, siga las instrucciones de Creación de un Gateway de NAT en la documentación de Oracle Cloud Infrastructure.
-
Después de crear el gateway de NAT, agregue una regla de ruta y una regla de seguridad de salida a cada subred (en la VCN) en la cual residan las bases de datos de IA autónoma de modo que estos recursos puedan utilizar el gateway para obtener una clave pública de su instancia deAzure AD:
-
Vaya a la página Detalles de la subred de la subred.
-
En el separador Información de subredes, haga clic en el nombre de la Tabla de ruta de la subredes para mostrar su página Detalles de tabla de ruta.
-
En la tabla de Reglas de Ruta existentes, compruebe si ya hay una regla con las siguientes características:
-
Destination: 0.0.0.0/0 (Destino):
-
Tipo de destino: gateway de NAT
-
Destino: nombre del puerta de enlace de NAT que ha creado en la VCN
Si dicha regla no existe, haga clic en Agregar reglas de ruta y agregue una regla de ruta con estas características.
-
-
Vuelva a la página Detalles de la subred de la subred.
-
En la tabla Listas de seguridad de La subred, haga clic en el nombre de su lista de seguridad para mostrar su página Detalles de Lista de seguridad.
-
En el menú lateral, en Recursos, haga clic en Reglas de salida.
-
En la tabla de Reglas de salida existentes, compruebe si ya hay una regla con las siguientes características:
-
Tipo de destino:CIDR
-
Destino:0.0.0.0/0
-
Protocolo IP:TCP
-
Rango de puertos de origen:443
-
Rango de puertos de destino: todos
Si dicha regla no existe, haga clic en Agregar reglas de entrada y agregue una regla de salida con estas características.
-
-
La configuración de proxy HTTP del entorno debe permitir que la base de datos acceda al proveedor de servicios en la nube.
El administrador de conjunto define esta configuración al crear la infraestructura de Exadata Cloud@Customer, como se describe en Uso de la consola para aprovisionar Exadata Database Service on Cloud@Customer.
Nota: La configuración de red, incluido el proxy HTTP, solo se puede editar hasta que la infraestructura de Exadata tenga el estado Necesita activación. Una vez que se activa, no puede editar esa configuración.
La configuración de un proxy HTTP para una infraestructura de Exadata ya aprovisionada necesita una solicitud de servicio (SR) en My Oracle Support. Consulte Crear una solicitud de servicio en My Oracle Support para obtener más información.
Resumen de API REST de DBMS_CLOUD
En esta sección se tratan las API de REST DBMS_CLOUD que se proporcionan con Autonomous AI Database.
| API de REST | Descripción |
|---|---|
| Función GET_RESPONSE_HEADERS | Esta función devuelve las cabeceras de respuesta HTTP como datos JSON en un objeto JSON de Autonomous AI Database. |
| Función GET_RESPONSE_TEXT | Esta función devuelve la respuesta HTTP en formato TEXT (VARCHAR2 o CLOB) en la base de datos de IA autónoma. Normalmente, la mayoría de las API de REST en la nube devuelven una respuesta JSON en formato de texto. Esta función es útil si espera que la respuesta HTTP esté en formato de texto. |
| Función GET_API_RESULT_CACHE_SIZE | Esta función devuelve el tamaño de caché de resultados configurado. |
| Función y procedimiento SEND_REQUEST | Esta función inicia una solicitud HTTP, obtiene la respuesta y finaliza la respuesta en la base de datos de IA autónoma. Esta función proporciona un flujo de trabajo para enviar una solicitud de API de REST en la nube con argumentos, un código de respuesta de retorno y una carga útil. |
| Procedimiento SET_API_RESULT_CACHE_SIZE | Este procedimiento define el tamaño máximo de caché para la sesión actual. |
Visión general de API de REST de DBMS_CLOUD
Cuando utiliza PL/SQL en la aplicación y necesita llamar a las API de REST en la nube, puede utilizar DBMS_CLOUD.SEND_REQUEST para enviar las solicitudes de API de REST.
Las funciones de la API de REST DBMS_CLOUD le permiten realizar solicitudes HTTP mediante DBMS_CLOUD.SEND_REQUEST y obtener y guardar resultados. Estas funciones proporcionan una API genérica que le permite llamar a cualquier API de REST con los siguientes servicios en la nube soportados:
-
Oracle Cloud Infrastructure
Consulte Referencia de API y puntos finales para obtener información sobre las API de REST de Oracle Cloud Infrastructure.
-
Azure Cloud
Consulte Referencia de API de REST de Azure para obtener información sobre las API de REST de Azure.
Constantes de API de REST de DBMS_CLOUD
Describe las constantes DBMS_CLOUD para realizar solicitudes HTTP mediante DBMS_CLOUD.SEND_REQUEST.
DBMS_CLOUD soporta los métodos HTTP GET, PUT, POST, HEAD y DELETE. El método de la API de REST que se utilizará para una solicitud HTTP se suele documentar en la documentación de la API de REST en la nube.
| Nombre | Tipo | Valor |
|---|---|---|
METHOD_DELETE |
VARCHAR2(6) |
'DELETE' |
METHOD_GET |
VARCHAR2(3) |
'GET' |
METHOD_HEAD |
VARCHAR2(4) |
'HEAD' |
METHOD_POST |
VARCHAR2(4) |
'POST' |
METHOD_PUT |
VARCHAR2(3) |
'PUT' |
Caché de resultados de API de REST DBMS_CLOUD
Puede guardar los resultados de la API de REST DBMS_CLOUD al definir el parámetro cache en true con DBMS_CLOUD.SEND_REQUEST. La vista SESSION_CLOUD_API_RESULTS describe las columnas que puede utilizar cuando se guardan los resultados de la API de REST.
Por defecto, las llamadas a la API de REST DBMS_CLOUD no guardan los resultados de la sesión. En este caso, utilizará la función DBMS_CLOUD.SEND_REQUEST para devolver resultados.
Al utilizar DBMS_CLOUD.SEND_REQUEST y definir el parámetro cache en TRUE, los resultados se guardan y puede ver los resultados anteriores en la vista SESSION_CLOUD_API_RESULTS. Guardar y consultar resultados históricos de solicitudes de API de REST DBMS_CLOUD puede ayudarle cuando necesite trabajar con los resultados anteriores en sus aplicaciones.
Por ejemplo, para consultar los resultados recientes de la API de REST DBMS_CLOUD, utilice la vista SESSION_CLOUD_API_RESULTS:
SELECT timestamp FROM SESSION_CLOUD_API_RESULTS;
Al guardar los resultados de la API de REST DBMS_CLOUD con DBMS_CLOUD.SEND_REQUEST, los datos guardados solo están disponibles en la misma sesión (conexión). Una vez que se cierra la sesión, los datos guardados ya no están disponibles.
Utilice DBMS_CLOUD.GET_API_RESULT_CACHE_SIZE y DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE para ver y definir el tamaño de caché de la API de REST DBMS_CLOUD y para desactivar el almacenamiento en caché.
Parámetro cache_scope de resultados de API de REST de DBMS_CLOUD
Al guardar los resultados de la API de REST DBMS_CLOUD con DBMS_CLOUD.SEND_REQUEST, el acceso a los resultados en SESSION_CLOUD_API_RESULTS se proporciona según el valor de cache_scope.
Por defecto, cache_scope es 'PRIVATE' y solo el usuario actual de la sesión puede acceder a los resultados. Si define cache_scope en 'PUBLIC', todos los usuarios de sesión pueden acceder a los resultados. El valor por defecto para cache_scope especifica que cada usuario solo puede ver los resultados de la API de REST DBMS_CLOUD.SEND_REQUEST generados por los procedimientos que llama con los derechos del invocador. Al llamar a DBMS_CLOUD.SEND_REQUEST en una sesión, hay tres posibilidades que determinan si el usuario actual puede ver los resultados en la caché, según el valor cache_scope:
-
Ejecuta directamente
DBMS_CLOUD.SEND_REQUESTcomo una sentencia de nivel superior y la llamada aDBMS_CLOUD.SEND_REQUESTy los resultados de la API de REST se guardan con el mismo nombre de usuario. En este caso, tiene acceso a todos los resultados con el valor por defecto 'PRIVATE', definido paracache_scope. -
Puede escribir un procedimiento de derechos de invocador de envoltorio y, como usuario actual, la llamada con
DBMS_CLOUD.SEND_REQUESTllama al procedimiento y los resultados de la API de REST se guardan con el mismo nombre de usuario. En este caso, y tiene acceso a todos los resultados con el valor por defecto, 'PRIVATE', definido paracache_scope. -
Escribe el procedimiento de derechos de un definidor de envoltorio y el procedimiento es propiedad de otro usuario. Cuando llama a
DBMS_CLOUD.SEND_REQUESTdentro del procedimiento, los resultados se guardan con el nombre de usuario del propietario del procedimiento.En este caso, un usuario con derechos de elemento de definición diferente está llamando a
DBMS_CLOUD.SEND_REQUESTy los resultados de la API de REST se guardan con el propietario de ese procedimiento de elementos de definición. Para este caso, por defecto, cuandocache_scopeesPRIVATE', la sesión del invocador no puede ver los resultados.Si el propietario del procedimiento del responsable de la definición desea que los resultados estén disponibles para cualquier usuario de sesión que llame, debe definir
cache_scopeen'PUBLIC'enDBMS_CLOUD.SEND_REQUEST.
Vista de DBMS_CLOUD REST API SESSION_CLOUD_API_RESULTS
Puede guardar los resultados de la API de REST DBMS_CLOUD al definir el parámetro cache en true con DBMS_CLOUD.SEND_REQUEST. La vista SESSION_CLOUD_API_RESULTS describe las columnas que puede utilizar cuando se guardan los resultados de la API de REST.
La vista SESSION_CLOUD_API_RESULTS es la vista creada si almacena en caché los resultados con DBMS_CLOUD.SEND_REQUEST. Puede consultar los resultados históricos que pertenecen a la sesión de usuario. Cuando finaliza la sesión, los datos de SESSION_CLOUD_API_RESULTS se depuran.
| Columna | Descripción |
|---|---|
URI |
URL de solicitud de API de REST DBMS_CLOUD |
TIMESTAMP |
Registro de hora de respuesta de la API de REST DBMS_CLOUD |
CLOUD_TYPE |
Tipo de nube de API de REST DBMS_CLOUD, como Oracle Cloud Infrastructure y AZURE_BLOB |
REQUEST_METHOD |
Método de solicitud de la API de REST DBMS_CLOUD, como GET, PUT, HEAD |
REQUEST_HEADERS |
Cabeceras de solicitud de la API de REST DBMS_CLOUD |
REQUEST_BODY_TEXT |
Cuerpo de solicitud de la API de REST DBMS_CLOUD en CLOB |
RESPONSE_STATUS_CODE |
Código de estado de respuesta de la API de REST DBMS_CLOUD, como 200(OK), 404(Not Found) |
RESPONSE_HEADERS |
Cabeceras de respuesta de la API de REST DBMS_CLOUD |
RESPONSE_BODY_TEXT |
Cuerpo de respuesta de la API de REST DBMS_CLOUD en CLOB |
SCOPE |
cache_scope definido por DBMS_CLOUD.SEND_REQUEST. Los valores válidos son PUBLIC o PRIVATE. |
Función GET_RESPONSE_HEADERS
Esta función devuelve las cabeceras de respuesta HTTP como datos JSON en un objeto JSON.
Sintaxis
DBMS_CLOUD.GET_RESPONSE_HEADERS(
resp IN DBMS_CLOUD_TYPES.resp)
RETURN JSON_OBJECT_T;
Parámetros
| parámetro | Descripción |
|---|---|
resp |
Tipo de respuesta HTTP devuelto de DBMS_CLOUD.SEND_REQUEST. |
Excepciones
| Excepción | Error | Descripción |
|---|---|---|
invalid_response |
ORA-20025 |
Se ha transferido un objeto de tipo de respuesta no válido a DBMS_CLOUD.GET_RESPONSE_HEADERS. |
Función GET_RESPONSE_TEXT
Esta función devuelve la respuesta HTTP en formato TEXT (VARCHAR2 o CLOB). Normalmente, la mayoría de las API de REST en la nube devuelven una respuesta JSON en formato de texto. Esta función es útil si espera que la respuesta HTTP esté en formato de texto.
Sintaxis
DBMS_CLOUD.GET_RESPONSE_TEXT(
resp IN DBMS_CLOUD_TYPES.resp)
RETURN CLOB;
Parámetros
| parámetro | Descripción |
|---|---|
resp |
Tipo de respuesta HTTP devuelto de DBMS_CLOUD.SEND_REQUEST. |
Excepciones
| Excepción | Error | Descripción |
|---|---|---|
invalid_response |
ORA-20025 |
Se ha transferido un objeto de tipo de respuesta no válido a DBMS_CLOUD.GET_RESPONSE_TEXT. |
Función GET_API_RESULT_CACHE_SIZE
Esta función devuelve el tamaño de caché de resultados configurado. El valor de tamaño de caché solo se aplica a la sesión actual.
Sintaxis
DBMS_CLOUD.GET_API_RESULT_CACHE_SIZE()
RETURN NUMBER;
Función y procedimiento SEND_REQUEST
Esta función y procedimiento inicia una solicitud HTTP, obtiene la respuesta y finaliza la respuesta. Esta función proporciona un flujo de trabajo para enviar una solicitud de API de REST en la nube con argumentos y la función devuelve un código de respuesta y una carga útil. Si utiliza el procedimiento, puede ver los resultados y los detalles de respuesta de los resultados guardados con la vista SESSION_CLOUD_API_RESULTS.
Sintaxis
DBMS_CLOUD.SEND_REQUEST(
credential_name IN VARCHAR2,
uri IN VARCHAR2,
method IN VARCHAR2,
headers IN CLOB DEFAULT NULL,
async_request_url IN VARCHAR2 DEFAULT NULL,
wait_for_states IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
timeout IN NUMBER DEFAULT 0,
cache IN PL/SQL BOOLEAN DEFAULT FALSE,
cache_scope IN VARCHAR2 DEFAULT 'PRIVATE',
body IN BLOB DEFAULT NULL)
RETURN DBMS_CLOUD_TYPES.resp;
DBMS_CLOUD.SEND_REQUEST(
credential_name IN VARCHAR2,
uri IN VARCHAR2,
method IN VARCHAR2,
headers IN CLOB DEFAULT NULL,
async_request_url IN VARCHAR2 DEFAULT NULL,
wait_for_states IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
timeout IN NUMBER DEFAULT 0,
cache IN PL/SQL BOOLEAN DEFAULT FALSE,
cache_scope IN VARCHAR2 DEFAULT 'PRIVATE',
body IN BLOB DEFAULT NULL);
Parámetros
| parámetro | Descripción |
|---|---|
credential_name |
Nombre de la credencial para autenticarse con la API nativa en la nube correspondiente. |
uri |
URI HTTP para realizar la solicitud. |
method |
Método de solicitud HTTP: Consulte Constantes de API de REST de DBMS_CLOUD para obtener más información. |
headers |
Cabeceras de solicitud HTTP para la API nativa en la nube correspondiente en formato JSON. Las cabeceras de autenticación se definen automáticamente, solo transfieren cabeceras personalizadas. |
async_request_url |
URL de solicitud asíncrona. Para obtener la URL, seleccione la API de solicitud de la lista de API (consulte https://docs.cloud.oracle.com/en-us/iaas/api/). A continuación, navegue para buscar la API para su solicitud en el panel izquierdo. Por ejemplo, API de servicios de base de datos -> Base de datos de IA autónoma -> StopAutonomousDatabase. Esta página muestra el directorio raíz de API (y el punto final base). A continuación, agregue el punto final base con la ruta de acceso relativa obtenida para el enlace WorkRequest de la solicitud de trabajo. |
wait_for_states |
Los estados de espera son de tipo: Se permiten varios estados para |
timeout |
Especifica el timeout, en segundos, para las solicitudes asíncronas con los parámetros El valor por defecto es |
cache |
Si El valor por defecto es |
cache_scope |
Especifica si todos pueden tener acceso a esta caché de resultados de solicitud. Valores válidos: "PRIVATE" y "PUBLIC". El valor por defecto es "PRIVATE". |
body |
Cuerpo de solicitud HTTP para solicitudes PUT y POST. |
Excepciones
| Excepción | Error | Descripción |
|---|---|---|
invalid_req_method |
ORA-20023 |
El método de solicitud transferido a DBMS_CLOUD.SEND_REQUEST no es válido. |
invalid_req_header |
ORA-20024 |
Las cabeceras de solicitud transferidas a DBMS_CLOUD.SEND_REQUEST no tienen un formato JSON válido. |
Notas de uso
-
Si utiliza Oracle Cloud Infrastructure, debe utilizar un valor de credencial basado en clave de firma para
credential_name. Consulte Procedimiento CREATE_CREDENTIAL para obtener más información. -
Los parámetros opcionales
async_request_url,wait_for_statesytimeoutle permiten manejar solicitudes de larga ejecución. Con este formato asíncrono desend_request, la función espera el estado de finalización especificado enwait_for_statesantes de volver. Con estos parámetros en la solicitud de envío, transfiere los estados de devolución esperados en el parámetrowait_for_statesy utiliza el parámetroasync_request_urlpara especificar una solicitud de trabajo asociada, la solicitud no se devuelve inmediatamente. En su lugar, la solicitud sondeaasync_request_urlhasta que el estado de devolución es uno de los estados esperados o se superatimeout(timeoutes opcional). Si no se especificatimeout, la solicitud espera hasta que se produzca un estado encontrado enwait_for_states.
Procedimiento SET_API_RESULT_CACHE_SIZE
Este procedimiento define el tamaño máximo de caché para la sesión actual. El valor de tamaño de caché solo se aplica a la sesión actual.
Sintaxis
DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE(
cache_size IN NUMBER);
Parámetros
| parámetro | Descripción |
|---|---|
cache_size |
Defina el tamaño máximo de caché en el valor especificado Si el tamaño de caché se define en El tamaño de caché por defecto es |
Excepciones
| Excepción | Error | Descripción |
|---|---|---|
invalid API result cache size |
ORA-20032 |
El valor mínimo es 0 y el valor máximo es 10000. Esta excepción se muestra cuando el valor de entrada es menor que 0 o mayor que 10000. |
Ejemplo
EXEC DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE(101);