Paquete DBMS_SESSION

Este paquete, que es igual que ejecutar el comando ALTER SESSION SET, nos permite modificar, informarnos y ver los recursos de las sessiones.

DBMS_SESSION permite:

- Cambiar las características y seguridad de la BBBDD

- Habilitar y deshabilitar roles.

- Cambiar el NLS (Nacional Lenguage Support).

- Resetear estados de paquetes y sesiones de memoria.

El paquete es creado cuando de datos de Oracle es instalada, a través del script dbmsutil.sql. Y su dueño es el usuario SYS como todos los dbms.

SET_NLS

DBMS_SESSION.SET_NLS (caracteristica_NLS,valor);

Opciones:

NLS_CALENDAR

NLS_CURRENCY

NLS_DATE_FORMAT

NLS_LANGUAGE

NLS_NUMERIC_CHARACTERS

NLS_SORT

NLS_TERRITORY

NLS_ISO_CURRENCY

NLS_SPECIAL_CHAR

Disponemos de la vista para informarnos de las características actuales de NLS.

Select parameter, value from v$nls_parameters

Es un procedimiento que habilita o deshabilita ROLES y es equivalente a la ejecución de la orden Sql SET ROLE

DBMS_SESSION.SET_ROLE(Nombre del Rol’);

Este procedimiento no puede ser llamado desde funciones, procedimientos y triggers, porque sólo es para esa sesión.

Execute DBMS_SESSION.SET_ROLE(RESOURCE’);

Execute DBMS_SESSION.SET_ROLE(NONE’); –> Deshabilitas todos los roles que tu tengas.

Execute DBMS_SESSION.SET_ROLE(ROL1,ROL2,ROL3’);

IS_ROLE_ENABLED

Es una function que devuelve TRUE/FALSE dependiendo de si la sesión tiene o no el ROLE ASIGNADO.

V1 Boolean := DBMS_SESSION.IS_ROLE_ENABLED(Nombre del rol’);

Es una función que devuelve el identificador único de la sesion actual.

El identificador puede tener hasta 24 bytes de longitud (varchar2).

FREE_UNUSED_USER_MEMORY

Libera memoria de la sesión actual.

Se suele usar cuando se han realizado muchas operaciones en memoria y la memoria guardada sólo es utilizada para un fin en concreto y no de utilización general (compilación de paquetes, tablas, PL/SQL..)

DBMS_SESSION.FREE_UNUSED_USER_MEMORY;

La memoria devuelta de la sesión es asignada al Share Pool.

Reseteamos el estado de todos los paquetes para esta sesión.

Las variables persistentes de estos paquetes son perdidas y reiniciadas cuando se ejecuta este procedimiento.

DBMS_SESSION.RESET_PACKAGE;

SET_CLOSE_CACHED_OPEN_CURSORS

Es un procedimiento que cierra el número de cursores cacheados abiertos en memoria de la sesión.

DMBS_SESSION.SET_CLOSE_CACHED_OPEN_CURSORS;

También se pueden cerrar uno a uno:

DBMS_SESSION.CLOSE_CURSOR.

Es un procedimiento que permite la inclusión de información administrativa dentro de los ficheros de traza del sistema

Es equivalente a la orden Alter session set SQL_TRACE = true;

Aquí os dejo algunos de los ejemplos para comprenderlo mejor:

–1º Ejemplo SET_NLS

– Modificamos el formato de hora ( Equivale a un ALTER SESSION)

begin

 dbms_session.set_nls(‘NLS_DATE_FORMAT’,”’DD/MM/YYYY HH24:MI:SS”’);

 dbms_output.put_line(TO_CHAR(SYSDATE));

end;

/

–2º Ejemplo SET_ROLE

–deshabilitamos todos los roles actuales       

begin

 dbms_session.set_role(‘NONE’);

end;

/

– habilitamos el rol CONNECT

grant connect to system;

begin

 dbms_session.set_role(‘CONNECT’);

end;

/

–3º Ejemplo IS_ROLE_ENABLED ( permisos de SYSTEM)

declare

v_habilitado boolean;

begin

 v_habilitado := dbms_session.is_role_enabled(‘RESOURCE’);

            if v_habilitado then

              dbms_output.put_line(‘Habilitado’);

            else

              dbms_output.put_line(‘Deshabilitado’);

     end if;

end;

/

–4º Ejemplo: UNIQUE_SESSI0N_ID

declare

v_sesion varchar2(30);

begin

 v_sesion := dbms_session.unique_session_id;

              dbms_output.put_line(‘Id sesion:’||v_sesion);

end;

/          

–5º Ejemplo: FREE_UNUSED_USER_MEMORY

begin

 dbms_session.free_unused_user_memory;

end;

/

–6º Ejemplo : RESET_PACKAGE

begin

 dbms_session.reset_package;

end;

/

–7º Ejemplo : SET_CLOSE_CACHED_OPEN_CURSORS

begin

 dbms_session.set_close_cached_open_cursors(true);

end;

/

–8º Ejemplo: SET_SQL_TRACE Equivale a Alter session set SQL_TRACE = true;

begin

 dbms_session.set_sql_trace(true);

end;

/

Para ver los roles de un usuario.

SQL> select * from session_roles;

Artículos relacionados