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.

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. Puede que desee cambiar el grupo de consumidores, por ejemplo, de LOW a HIGH. El paquete CS_SESSION proporciona una API para el cambio.

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 HIGH para algunas sentencias, el paquete CS_SESSION le permite cambiar.

Procedimiento SWITCH_SERVICE

Con este procedimiento se 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 debe 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 notifica ningún error si el servicio actual y el servicio especificado son idénticos.

El procedimiento no restablece los atributos de sesión. Cualquier elemento definido por el usuario 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 se ha cambiado a un servicio diferente, el valor del parámetro permanecerá igual.

Ejemplo

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

Seguridad y acceso

Al usuario ADMIN se le otorga al usuario EXECUTE el privilegio CS_SESSION con GRANT OPTION. También se otorga el privilegio 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. Esto se consigue creando 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 H Alto, Medio y Bajo. 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 y Turgente. Para una carga de trabajo de procesamiento de transacciones, se ha especificado un valor distinto de 'HIGH', 'MEDIUM', 'LOW', 'TP', 'TPURGENT'.
20.002 Fallo de cambio de servicio. Fallo al cambiar al nuevo servicio.