COMO REALIZAR UNA TRAZA DE UN USUARIO EN ORACLE
Introducción
Hay varias formas de habilitar la traza de usuario en oracle. A continuación veremos algunas formas de hacerlo.
Prerequisitos
Modificar los parámetros timed_statistics y max_dump_file_size en caso de no estar seteados a true y unlimited.
SQL> alter system set timed_statistics=true;
SQL> alter system set max_dump_file_size=unlimited;
Trazando la session actual de usuario
Para iniciar la sesión de usuario ejecutamos lo siguiente
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
-- ejecutamos las sentencias--
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
Para saber dónde guarda oracle sus trazas podemos ejecutar la siguiente consulta:
SQL> select * from v$diag_info;
Trazando sesión de usuario con un trigger
Al usuario al que queramos habilitarle la traza le creamos los siguientes triggers
Para ejecutarse cuando abra sesión
create or replace trigger user_logon_trg
after logon on database
begin
if USER = 'xxxx' then
execute immediate
'Alter session set events ''10046 trace name context forever, level 8''';
end if;
end;
/
Para ejecutarse cuando se desconecte
create or replace trigger user_logoff_trg
before logoff on database
begin
if USER = 'xxxx' then
execute immediate
'Alter session set events ''10046 trace name context off''';
end if;
end;
/
Trazar la sesión de otro usuario
Para ello necesitamos saber el sid y el serial# de la sesión que queremos trazar. Esta información la podemos obtener haciendo un select a la vista v$session;
El ejemplo está puesto con un id=20 y un serial#=225
Para empezar a ejecutar la traza lanzamos lo siguiente
exec sys.dbms_system.SET_BOOL_PARAM_IN_SESSION(20, 225, 'sql_trace', TRUE);
-- ejecutamos las sentencias--
Para parar la traza
exec sys.dbms_system.SET_BOOL_PARAM_IN_SESSION(20, 225, 'sql_trace', FALSE);