Como debugar um erro no banco
Para certas situações as vezes é necessário que o DBA vá um pouco mais a fundo para depurar problemas no banco. Este tipo de situação vai desde acessos indevidos até erros em SQLs.
No caso de erros em SQLs, trata-se de situações onde o desenvolvedor por algum motivo não tem como depurar a aplicação para descobrir a linha de código com erro ou por a aplicação ser de terceiros onde o cliente não tem acesso aos fontes.
- xtrace
Ler artigo sobre xtrace - onmode -I <nmr_erro> <sesid>
Inclui um trap para gerar um Assert Failed quando ocorrer tal erro.
Exemplo:onmode -I -271Ira gerar um AF quando nao puder incluir um registro em uma tabela (Could not insert new row into the table) - onmode -I
Desativa todos os traps. - onmode -X profile VP# ou kill -6 no #proc do VP (comando não documentado)
Gera profile do processo
HP-UX:prof -m mon<PID>.out $INFORMIXDIR/bin/oninit
Linux:gprof -p gmon<PID>.out $INFORMIXDIR/bin/oninit - onmode -X stack VP# ou kill -7 no #proc do VP (comando não documentado)
Gera stack do processo
Observação: Executar kill (acima) uma vez, ativa. executar novamente , desativa. - onmode -A 1 / onmode -A 0 / AFDEBUG=1
Pausa (hang) o banco quando algum Assert Failed ocorre, permitindo assim pegar todas as informações do momento com o onstat - onmode -i
Volta o banco em atividade apos parar devido um AFDEBUG.
Exemplo para debugar um erro de dead lock
# rever no onconfig os parametros de geracao de AF (DEBUG) $ onmode -A 1 $ onmode -I 243 # para deadlock #...aguardar erro acontecer (monitorar o log do banco pois o banco ira ficar suspenso) $ onstat -o > shared.memory.dump $ onstat -g all > onstat.g_all.txt $ onstat -a > onstat.a.txt $ onstat -g ckp > onstat.g_ckp.txt $ onstat -g stk all > onstat.g_stk_all.txt $ onmode -i $ onmode -I $ onmode -A 0
- Todos os Assert Faileds (AFs) gerados, são parametrizados no ONCONFIG através dos parametros DUMP*
- Os erros mais comuns para debugar erros em aplicação são:
- 258 System error - invalid statement id received by the sqlexec process.
- 239 Could not insert new row - duplicate value in a UNIQUE INDEX column.
- 271 Could not insert new row into the table.
- 534 Could not insert new row into table, table is locked.
- 535 Already in transaction.
- 307 leituras
Tags:





Comentar