O Oracle grava o trace no servidor do banco, na pasta de trace do ADR (Automatic Diagnostic Repository), com um nome como ORCL1_ora_4242.trc: o SID da instância, ora e o número do processo no sistema operacional. Marque o nome antes de ligar o trace, ache o caminho com uma consulta e copie o arquivo .trc.
Antes de começar
- Acesso ao sistema operacional do servidor do banco, para copiar o arquivo, ou alguém que copie para você.
- Permissão de consulta às views
V$DIAG_INFO,V$SESSIONeV$PROCESS. - Oracle 11g ou mais novo, que tem o ADR e essas views de diagnóstico.
Marcar o nome com tracefile_identifier
Na sessão que vai ser rastreada, antes de ligar o trace, dê um identificador ao arquivo:
alter session set tracefile_identifier = 'zz_exemplo';
Resultado: o trace seguinte da sessão sai com o identificador no nome, no formato sid_ora_pid_identificador.trc, por exemplo ORCL1_ora_4242_zz_exemplo.trc.
- O parâmetro muda só com
alter session: vale para a própria sessão, não para a de outra pessoa. - Cada troca do identificador abre um arquivo novo, e o Oracle marca nos dois que eles são do mesmo processo, com
*** TRACE CONTINUES IN FILEe*** TRACE CONTINUED FROM FILE. Envie os arquivos juntos (analisar juntos). - O nome do arquivo vira o título do relatório: use um identificador neutro (o que conferir antes de enviar).
Em banco multitenant, o alter session vale também numa sessão conectada a um PDB. A referência do TRACEFILE_IDENTIFIER marca o parâmetro como Modifiable in a PDB: No, mas essa propriedade diz se o PDB pode ter um valor próprio, gravado com alter system (administração de PDBs); o tracefile_identifier só muda por sessão. Para conferir, a coluna TRACEID de V$PROCESS mostra o identificador em vigor no processo da sessão, e a TRACEFILE, o caminho do arquivo (achar o arquivo de outra sessão).
Achar o arquivo da própria sessão
select value
from v$diag_info
where name = 'Default Trace File';
Resultado: o caminho completo do trace da sessão em que você rodou a consulta, como /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242.trc.
Achar o arquivo de outra sessão
O trace é do processo que atende a sessão. Junte V$SESSION e V$PROCESS pelo endereço do processo e filtre pelo 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: a coluna TRACEFILE traz o caminho do arquivo. Em RAC, use as views GV$ e junte também pela instância: o arquivo fica no servidor dela.
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;
Onde ficam os arquivos
O ADR fica no diretório do parâmetro DIAGNOSTIC_DEST, e a pasta de trace de cada instância segue o caminho diag/rdbms/<db_unique_name>/<SID>/trace a partir dele. Esta consulta devolve a pasta da instância em que você está:
select value
from v$diag_info
where name = 'Diag Trace';
Num banco multitenant, os traces das sessões de todos os PDBs ficam na pasta da instância. Em RAC, cada instância tem a sua pasta, no próprio servidor. As consultas desta página são as do guia de diagnóstico da Oracle.
Copiar o arquivo
- Desligue o trace antes de copiar: enquanto ele está ligado, o arquivo continua crescendo.
- Copie o
.trcda pasta de trace para a sua máquina:scp oracle@db-exemplo:/u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242_zz_exemplo.trc . - Deixe para trás o
.trmde mesmo nome. Ele guarda os metadados da estrutura do trace, usados pelo ADR para busca e navegação, e o WaitScope o ignora. - Se o arquivo for grande, compacte antes de enviar:
gzip -k ORCL1_ora_4242_zz_exemplo.trc
Resultado: um .trc, ou .trc.gz, pronto para enviar pelo navegador ou pelo app Android.
Problemas comuns
- O arquivo não existe. O trace não foi ligado, a sessão ainda não fez nenhuma chamada depois de ligar, ou, em RAC, você procura no servidor de outra instância.
- O nome não tem o identificador. O identificador foi definido em outra sessão. Se ele foi definido depois de o trace começar, o começo da operação ficou no arquivo anterior: envie os dois juntos.
- O mesmo processo deixou vários arquivos. A aplicação trocou o
tracefile_identifierno meio da operação: envie todos juntos (analisar juntos). - O arquivo traz várias operações. O trace ficou ligado além da operação, ou o processo atendeu outras tarefas. Gere de novo, ligado só durante a operação (ligar e desligar na hora certa).
Próximos passos
- Confira o que o trace contém antes de enviar.
- Envie pelo navegador ou pelo app Android.
- Se o ORA-00060 gravou o arquivo, veja enviar o trace de um deadlock.