Paquete CS_SESSION

El paquete CS_SESSION proporciona una interfaz para cambiar el servicio de base de datos y el grupo de consumidores de la sesión existente.

Note:

El soporte para el paquete CS_SESSION está disponible en Oracle Database 19c a partir de la versión 19.28 y en Oracle Database 23ai a partir de la versión 23.9.

Cuando se establece una conexión con una instancia de Autonomous Database, a esa sesión se le asigna un grupo de consumidores. Por ejemplo, se podría crear una sesión mediante una conexión al servicio LOW de una instancia de Autonomous Database. Es posible que desee cambiar el grupo de consumidores, por ejemplo, de BAJO a ALTO. El paquete CS_SESSION proporciona una API para el cambio. Consulte Nombres de servicio de base de datos predefinidos para bases de datos autónomas para obtener más información.

Los grupos de consumidores determinan la simultaneidad y el grado de paralelismo (DOP). Por ejemplo, las sentencias de una conexión establecida al servicio de base de datos LOW se ejecutan en serie. Las sentencias de una conexión establecida al servicio de base de datos HIGH se ejecutan en paralelo. Si tiene una carga de trabajo que requiere el procesamiento de sentencias en serie con el cambio a un grupo de consumidores ALTO para algunas sentencias, el paquete CS_SESSION le permite cambiar.

SWITCH_SERVICE Procedimiento

Este procedimiento cambia el servicio de base de datos y el grupo de consumidores de la sesión actual.

Sintaxis

CS_SESSION.SWITCH_SERVICE(service_name IN varchar2);

Parámetros

parámetro Descripción
service_name

Especifica el grupo de consumidores que se actualizará.

Según la carga de trabajo, los valores válidos son: HIGH, MEDIUM, LOW, TP o TPURGENT.

Notas de uso

Cuando se llama, el procedimiento cambia la sesión al servicio especificado y al grupo de consumidores relacionado. Si el servicio especificado no existe en esa base de datos, se proporciona un mensaje de error. Por ejemplo, si especifica 'TP' como nombre de servicio en una carga de trabajo de almacén de datos, el error indica que no es un nombre de servicio válido. No se informa ningún error si el servicio actual y el servicio especificado son idénticos.

El procedimiento no restablece los atributos de sesión. Todo lo que el usuario haya definido para su sesión antes de llamar a este procedimiento continuará tal cual. Por ejemplo, si se ha modificado un parámetro de sesión y, posteriormente, la sesión ha cambiado a un servicio diferente, el valor del parámetro seguirá siendo el mismo.

Ejemplo

BEGIN
  CS_SESSION.SWITCH_SERVICE('HIGH');
END;
/

Seguridad y acceso

Al usuario ADMIN se le otorga el privilegio EXECUTE en CS_SESSION con GRANT OPTION. El privilegio también se otorga a DWROLE sin GRANT OPTION.

Consideraciones de seguridad adicionales

Si a un usuario se le otorgan privilegios EXECUTE en este procedimiento y no desea que ese usuario cambie a un servicio específico, puede utilizar un disparador AFTER SET CONTAINER para bloquear la operación. Para ello, se crea un disparador AFTER SET CONTAINER.

CREATE OR REPLACE TRIGGER SESS_SWITCH
AFTER SET CONTAINER ON DATABASE
BEGIN
IF SYS_CONTEXT('USERENV','SESSION_USER') = 'USER' and
   SYS_CONTEXT('USERENV','SERVICE_NAME') = 'serviceexample_low.adwc.oraclecloud.com'
THEN
    NULL;
ELSE
    RAISE_APPLICATION_ERROR(-20001, 'Denied!  You are not allowed to switch service in the database');
END IF;
END;
/

Mensajes de error

En la siguiente tabla, se describen las excepciones para CS_SESSION

Error Mensaje Causa
20.001 Nombre de servicio no válido. Los valores válidos son HIGH, MEDIUM, LOW. Para una carga de trabajo de almacén de datos, se ha especificado un valor distinto de 'HIGH', 'MEDIUM', 'LOW'.
20.001 Nombre de servicio no válido. Los valores válidos son ALTO, MEDIO, BAJO, TP, TPURGENTE. Para una carga de trabajo de procesamiento de transacciones, se especificó un valor distinto de 'HIGH', 'MEDIUM', 'LOW', 'TP', 'TPURGENT'.
20.002 Error al cambiar el servicio. No se pudo cambiar al nuevo servicio.