Traza de un determinado SQLid

Hoy vamos a volver a los comandos basicos de tune.

Supogamosque tengamos identificado un sqlid df759ww9krh1x que nos da problemas.

Como lo trazamos?

La manera mas sencilla de tener una traza en ese sqlid es:

alter system set events 'sql_trace[sql: df759ww9krh1x] level=12';

Donde encuentro la traza?

La encontraremos en el lugar habitual de las trazas que suele ser

$ORACLE_BASE/diag/rdbms/< DB_NAME >/< INSTANCE_NAME >/trace/

Que nombre tedra el fichero?

EL fichero sera del de tipo *_ora_.trc , la manera de encontrar el PID perteneciente al proceso (server process) que ejecuta el SQL con ese SQL_ID

select spid
from v$process p
join v$session s on p.addr = s.paddr
where s.sql_id = 'df759ww9krh1x';

Como vemos que hay dentro de esa traza?

Para ello, usamos el tkprof

tkprof ORCL1_ora_12345.trc salida_df759ww9krh1x.txt sort=exeela,fchela

Como desahbiliatmos la traza?

Tan importante ocmo activarla es asegurares que queda desactivada

alter system set events 'sql_trace[sql: df759ww9krh1x] off';

Como podeis ver , todo bien facil

Obtener informacion del alert

Hoy vamos a ver una entrada muy rápida sobre alguna información albergada en el alert.log

Como hemos hablado en alguna entrada anterior , las versiones 11 y 12 de Oracle disponen de una vista con la información del alert.log, ¿de que nos sirve esto?
Pues puede sernos muy útil para obtener mediante consultas SQL algunos patrones, por ejemplo

Veces que se ha hecho un ALTER en lo que llevamos de año

select    
 ORIGINATING_TIMESTAMP,
 MESSAGE_TEXT
    from sys.x$dbgalertext
where  ORIGINATING_TIMESTAMP >
      TO_TIMESTAMP('01-01-14 00:00:00','DD-MM-RR HH24:MI:SS')
 and ( MESSAGE_TEXT like 'ALTER%')

Podemos filtrar mucho mas, por ejemplo , quitando las opciones de rman
Veces que se ha hecho un ALTER en lo que llevamos de año quitando el rman

 
 select    
   ORIGINATING_TIMESTAMP,
   MESSAGE_TEXT
     from sys.x$dbgalertext
   where  ORIGINATING_TIMESTAMP >
      TO_TIMESTAMP('01-01-14 00:00:00','DD-MM-RR HH24:MI:SS')
     and module_id not in ('rman')
     and ( MESSAGE_TEXT like 'ALTER%')
    and( MESSAGE_TEXT not like 'ALTER DATABASE BACKUP CONTROLFILE TO %')

O si queremos ver las veces que se ha llevado a cabo un evento concreto como arrancado la base de datos
Veces que se ha hecho un ALTER DATABASE OPEN

 select    
   ORIGINATING_TIMESTAMP,
   MESSAGE_TEXT
     from sys.x$dbgalertext
   where  ORIGINATING_TIMESTAMP > 
         TO_TIMESTAMP('01-01-14 00:00:00','DD-MM-RR HH24:MI:SS')
 and( MESSAGE_TEXT like 'ALTER DATABASE OPEN%')  
 

Como decía al principio, es una entrada muy sencilla, pero que, puede aportarnos información útil en muchos casos