Oracle graba el trace en el servidor de la base de datos, en la carpeta de trace del ADR (Automatic Diagnostic Repository), con un nombre como ORCL1_ora_4242.trc: el SID de la instancia, ora y el número del proceso en el sistema operativo. Marque el nombre antes de activar el trace, encuentre la ruta con una consulta y copie el archivo .trc.
Antes de empezar
- Acceso al sistema operativo del servidor de la base de datos, para copiar el archivo, o alguien que lo copie por usted.
- Permiso de consulta a las vistas
V$DIAG_INFO,V$SESSIONyV$PROCESS. - Oracle 11g o posterior, que tiene el ADR y esas vistas de diagnóstico.
Marcar el nombre con tracefile_identifier
En la sesión que se va a rastrear, antes de activar el trace, póngale un identificador al archivo:
alter session set tracefile_identifier = 'zz_exemplo';
Resultado: el siguiente trace de la sesión sale con el identificador en el nombre, en el formato sid_ora_pid_identificador.trc, por ejemplo ORCL1_ora_4242_zz_exemplo.trc.
- El parámetro solo cambia con
alter session: vale para la propia sesión, no para la de otra persona. - Cada cambio del identificador abre un archivo nuevo, y Oracle marca en los dos que son del mismo proceso, con
*** TRACE CONTINUES IN FILEy*** TRACE CONTINUED FROM FILE. Envíe los archivos juntos (analizar juntos). - El nombre del archivo se convierte en el título del informe: use un identificador neutro (qué comprobar antes de enviar).
En una base de datos multitenant, alter session también vale en una sesión conectada a un PDB. La referencia de TRACEFILE_IDENTIFIER marca el parámetro como Modifiable in a PDB: No, pero esa propiedad indica si el PDB puede tener un valor propio, grabado con alter system (administración de PDBs); tracefile_identifier solo cambia por sesión. Para comprobarlo, la columna TRACEID de V$PROCESS muestra el identificador vigente en el proceso de la sesión, y la TRACEFILE, la ruta del archivo (encontrar el archivo de otra sesión).
Encontrar el archivo de la propia sesión
select value
from v$diag_info
where name = 'Default Trace File';
Resultado: la ruta completa del trace de la sesión en la que ejecutó la consulta, como /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242.trc.
Encontrar el archivo de otra sesión
El trace es del proceso que atiende la sesión. Combine V$SESSION y V$PROCESS por la dirección del proceso y filtre por el SID:
select s.sid, s.serial#, p.tracefile
from v$session s
join v$process p on p.addr = s.paddr
where s.sid = 123;
Resultado: la columna TRACEFILE trae la ruta del archivo. En RAC, use las vistas GV$ y combine también por la instancia: el archivo está en el servidor de esa instancia.
select s.inst_id, s.sid, s.serial#, p.tracefile
from gv$session s
join gv$process p on p.inst_id = s.inst_id and p.addr = s.paddr
where s.inst_id = 1
and s.sid = 123;
Dónde están los archivos
El ADR está en el directorio del parámetro DIAGNOSTIC_DEST, y la carpeta de trace de cada instancia sigue la ruta diag/rdbms/<db_unique_name>/<SID>/trace a partir de él. Esta consulta devuelve la carpeta de la instancia en la que usted está:
select value
from v$diag_info
where name = 'Diag Trace';
En una base de datos multitenant, los traces de las sesiones de todos los PDBs están en la carpeta de la instancia. En RAC, cada instancia tiene su propia carpeta, en su propio servidor. Las consultas de esta página son las de la guía de diagnóstico de Oracle.
Copiar el archivo
- Desactive el trace antes de copiar: mientras está activado, el archivo sigue creciendo.
- Copie el
.trcde la carpeta de trace a su máquina:scp oracle@db-exemplo:/u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242_zz_exemplo.trc . - Deje atrás el
.trmdel mismo nombre. Guarda los metadatos de la estructura del trace, que el ADR usa para búsqueda y navegación, y WaitScope lo ignora. - Si el archivo es grande, comprímalo antes de enviarlo:
gzip -k ORCL1_ora_4242_zz_exemplo.trc
Resultado: un .trc, o .trc.gz, listo para enviar desde el navegador o desde la app de Android.
Problemas frecuentes
- El archivo no existe. El trace no se activó, la sesión todavía no hizo ninguna llamada después de activarlo o, en RAC, usted busca en el servidor de otra instancia.
- El nombre no tiene el identificador. El identificador se definió en otra sesión. Si se definió después de que empezara el trace, el comienzo de la operación quedó en el archivo anterior: envíe los dos juntos.
- El mismo proceso dejó varios archivos. La aplicación cambió
tracefile_identifieren medio de la operación: envíelos todos juntos (analizar juntos). - El archivo trae varias operaciones. El trace quedó activado más allá de la operación, o el proceso atendió otras tareas. Genérelo de nuevo, activado solo durante la operación (activar y desactivar en el momento justo).
Próximos pasos
- Compruebe qué contiene el trace antes de enviarlo.
- Envíelo desde el navegador o desde la app de Android.
- Si el ORA-00060 grabó el archivo, vea enviar el trace de un deadlock.