O trace grava cada erro que uma chamada devolve, inclusive os que o PL/SQL tratou e a aplicação nunca viu. O achado conta esses erros e leva à lista de códigos, com o que cada um quer dizer e onde apareceu.
Sintomas
No Diagnóstico, aparece o achado n erros Oracle no trace (ERROS_ORACLE), ou 1 erro Oracle no trace. O texto lembra que o ORA-01403 (fim de dados) não entra na conta e termina com Ver erros.
O achado aparece quando o trace tem pelo menos uma linha ERROR ou PARSE ERROR com código diferente de ORA-01403. O número é a soma das ocorrências de todos os códigos, menos o 1403. A severidade é sempre alta, mesmo com um erro só, e o achado não mostra percentual do tempo total: ele não mede tempo, pede que você confira se o erro é esperado.
Quando o único código do trace é o ORA-01403, o achado é outro: ORA-01403 (fim de dados) no trace.
Causa
- A linha
ERRORregistra o erro devolvido por uma chamada de um cursor, como uminsertque violou a chave ou umfetchcancelado pelo cliente. - A linha
PARSE ERRORregistra um SQL que não compilou (sintaxe, objeto que não existe, falta de privilégio), com o texto do SQL logo abaixo. - Erros em SQL recursivo, dentro de PL/SQL ou de trigger, e erros tratados num bloco
exceptiontambém aparecem, mesmo que a aplicação nunca os veja.
Cada erro custa o trabalho feito até ele e o desfazer do comando. Quando o erro chega à aplicação, a sessão ainda espera SQL*Net break/reset to client, da classe Application (espera por bloqueio de outra sessão).
Resolução
- Clique em Ver erros.
Resultado: um cartão por código, com O que é, Quando aparece, O que fazer e o link para a documentação da Oracle. Código fora do catálogo da console traz só a nota Código fora do catálogo da console. e o link.
- Em Onde apareceu, veja Chamada, Comando, Prof., Ocorrências, Primeira vez e Linha de cada local do erro.
- Na coluna Prof., 0 quer dizer que o erro voltou para a aplicação; acima de 0, que veio de SQL recursivo. Nesse caso, confira se o PL/SQL trata o erro ou o esconde com
when others. - Clique no comando (#n) para abrir o detalhe dele. Em
PARSE ERROR, a coluna Comando mostra o texto do SQL que não compilou. - Corrija pela causa do código, começando pelos mais comuns em trace:
| Código | O que costuma ser |
|---|---|
| ORA-00001 | Chave única violada: sequence atrás dos dados, carga processada duas vezes ou duas sessões inserindo a mesma chave. |
| ORA-00060 | Deadlock: veja deadlock entre sessões. |
| ORA-00942, ORA-00904 | Tabela, view ou coluna que não existe para o usuário, em geral em PARSE ERROR: objeto removido, sinônimo ou privilégio faltando, SQL montado errado. |
| ORA-01013 | O cliente cancelou a chamada, em geral pelo tempo limite do driver. Veja o plano e as esperas do comando antes de aumentar o limite. |
| ORA-01722 | Número inválido: conversão implícita de texto para número num filtro ou numa inserção. |
| ORA-04068 | Estado de pacote descartado: o pacote foi recompilado enquanto a sessão o usava. |
Erro repetido muitas vezes no mesmo comando custa uma execução a cada ocorrência. O caso típico é o ORA-00001 em laço que insere e trata a exceção: use merge em vez de inserir e capturar o erro.
Em Onde apareceu, o local de um erro numa variante de SQL que só difere em literais aponta para a forma: a coluna Comando traz o número e o texto da forma, com o selo N variantes, e o link abre o detalhe dela. O PARSE ERROR, que não tem cursor, continua identificado pelo texto do SQL que falhou.
Como confirmar
- Corrija a causa do código que mais aparece.
- Ligue o trace da mesma operação (ligar o trace com o DBMS_MONITOR).
- Envie o arquivo novo e abra o relatório.
- Compare o número no título do achado e as ocorrências de cada código em Erros.
Resultado: o código corrigido some da seção Erros. O achado some quando sobra no trace, no máximo, o ORA-01403.
No relatório
O relatório de exemplo não tem erros, e a seção Erros só aparece quando o trace tem algum.
- Erros: um cartão por código, com o significado, as causas, a ação e os locais em Onde apareceu (erros).
- Diagnóstico: o achado e o link Ver erros (Diagnóstico).
- Detalhe do comando: o quadro Erros, no topo, com quantos erros o comando teve (detalhe do comando).
- Perfil do tempo de resposta: a espera
SQL*Net break/reset to client, quando os erros chegam à aplicação (perfil). - Deadlocks: no cartão do ORA-00060, o link Ver o deadlock leva ao deadlock que gerou o erro (deadlocks).