Oracle proporciona el paquete DBMS_APPLICATION_INFO (ya desde la versión 9i), para ayudarnos a identificar con bastante detalle qué aplicación está ejecutando una sesión de usuario, proporcionando hasta 3 columnas en la vista V$SESSION que pueden identificar cada acción del usuario dentro de una aplicación:
- MODULE: para indicar, por ejemplo, qué Aplicación está ejecutando el usuario (máximo 48 caracteres).
- ACTION: para identificar, por ejemplo, en qué formulario está (máximo 32 caracteres).
- CLIENT_INFO: para saber, por ejemplo, por qué procedimiento/función o parte del formulario está pasando en este momento (máximo 64 caracteres).
Ejemplo:
Veamos directamente desde SQL, como usar el paquete DBMS_APPLICATION_INFO para identificar qué aplicación está usando el usuario conectado, usando los procedimiento SET_MODULE (para indicar la aplicación), SET_ACTION (para indicar el procedimiento o formulario) y SET_CLIENT_INFO (para identificar la acción concreta por la que está pasando en este momento):
SQL> select module,action,client_info from v$session where username=USER;
MODULE ACTION CLIENT_INFO
--------- --------------- --------------------------------------
SQL*Plus
SQL> exec dbms_application_info.set_action('DBMS_APPLICATION_INFO')
PL/SQL procedure successfully completed.
SQL> select module,action,client_info from v$session where username=USER;
MODULE ACTION CLIENT_INFO
--------- --------------------- --------------------------------------
SQL*Plus DBMS_APPLICATION_INFO
SQL> exec dbms_application_info.set_client_info('Pruebas Identificar Aplicacion')
PL/SQL procedure successfully completed.
SQL> select module,action,client_info from v$session where username=USER;
MODULE ACTION CLIENT_INFO
--------- --------------------- ------------------------------------
SQL*Plus DBMS_APPLICATION_INFO Pruebas Identificar Aplicacion
Como se observa en el ejemplo, en muchos casos Oracle utiliza el atributo MODULE para indicar desde qué cliente se está conectando el usuario a la BD, por ejemplo:
SQL> select distinct module from v$session;
MODULE
------------------------------------------------
I:\orant\BIN\DWFDE60.EXE
JDBC Thin Client
SQL*Plus
SQL*Plus desde mi PC
TOAD 10.1.1.8
TOAD 9.0.1.8
TOAD 9.1.0.62
TOAD 9.5.0.31
TOAD 9.7.2.5
TOAD background query session
httpd@talia (TNS V1-V3)
oraclePOSGRADD@aglae (TNS V1-V3)
Pero no hay ningún problema con sobreescribir estos valores con el nombre de la aplicación que realmente está ejecutando el usuario, por ejemplo posibles valores podrían ser 'SIVA', 'JUSTO', 'SUMA', 'CASIOPEA', etc, por ejemplo:
SQL> exec dbms_application_info.set_module('MNCS','DBCONNECTOR')
PL/SQL procedure successfully completed.
SQL> exec dbms_application_info.set_client_info('Pruebas de DBMS_APPLICATION_INFO')
PL/SQL procedure successfully completed.
SQL> select module,action,client_info from v$session where username=USER;
MODULE ACTION CLIENT_INFO
------------------- --------------------- --------------------------------------
MNCS DBCONNECTOR Pruebas de DBMS_APPLICATION_INFO
Además de a través de V$SESSION, se pueden leer los valores de MODULE, ACTION y CLIENT_INFO, a través de los procedimientos READ_MODULE (obtiene MODULE y ACTION) y READ_CLIENT_INFO del paquete DBMS_APPLICATION_INFO.
Enlaces de interés:
|