Às vezes você, como DBA, leva a culpa por tudo. O banco está lento, indisponível, sem patch, e a lista vai longe.
Às vezes, em situações raras, você consegue provar que estavam errados :D
Semana passada a gente foi chamado pra analisar um problema intermitente de aplicação. O time de app culpou o banco, mostrando o erro “java.sql.SQLException: Closed Connection” nos logs da app. Tudo no nível de banco foi checado e re-checado, até eles nos chamarem. Longas horas de debug e ainda sem resultados, tentamos uma abordagem diferente. Que tal fazer sniff na placa de rede no app server.. checar o fluxo de comunicação entre APP e banco.
E foi o que a gente fez:
tcpdump -i eth0 tcp port 1521 -A -s1500 | awk ‘$1 ~ “ORA-” {i=1;split($1,t,“ORA-”);while (i <= NF) {if (i == 1) {printf("%s",“ORA-“t[2])}else {printf("%s “,$i)};i++}printf(”\n”)}’
Isso nos deu a saída bonitinha:
bla@app_blaserver:~ # tcpdump -i eth0 tcp port 1521 -A -s1500 | awk ‘$1 ~ “ORA-” {i=1;split($1,t,“ORA-”);while (i <= NF) {if (i == 1) {printf("%s”,“ORA-“t[2])}else {printf("%s “,$i)};i++}printf(”\n”)}’ tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes ORA-01403:no data found ORA-00913:too many values ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01403:no data found ORA-01438:value larger than specified precision allowed for this column ORA-06512:at line 2 ORA-00937:not a single-group group function ORA-01403:no data found ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found ORA-00937:not a single-group group function ORA-01403:no data found
O ORA-01403 é esperado depois do fetch de cada cursor sendo processado, sem novidade ruim aqui.
Hummmm.. e quando os ORA-01438/ORA-06512/ORA-00937 são levantados, o que acontece com a conexão? Você pegou, né?
Depois de checar o que estava causando os erros, o problema intermitente parou, todo mundo ficou feliz, incluindo o time de DBA :D
(Você precisa adaptar o script pra encaixar com a porta do listener e a placa de rede da sua máquina, beleza?)
Como sempre, feedbacks são bem vindos.
Falamos,
Hang.