Este paquete “DBMS_SESSION” 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 v$nls_parameters para informarnos de las características actuales de NLS.
Select parameter, value from v$nls_parameters
SET_ROLE
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’);
UNIQUE_SESSION_ID
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.
RESET_PACKAGE
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.
SET_SQL_TRACE
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;