- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 7 anos, 8 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
8 de março de 2017 às 12:31 am #108644CLAUDENIL DIAS PRADOParticipante
Ola Pessoal, tenho aqui o Banco Oracle 12c e a aplicação RM TOTVS, em um determinado momento essa aplicação me apresenta uma msg de falha, para melhor entender essa falha eu estou tentando capturar o SQL que roda na aplicação no momento do erro, para isto estou tentando usar a ferramenta Tracer for Oracle e a Toad for oracle, mas até presente momento sem sucesso, com a Toad for oracle até tive um progresso, mas não sei o porque a ferramenta me traz apenas os select, sendo que com certeza os updates, inserts aconteceram, ja com a ferramente Tracer for Oracle sem o minimo de sucesso…
8 de março de 2017 às 7:31 pm #108645José Laurindo ChiappaModeradorBom, antes de mais nada eu *** não uso *** nenhuma dessas ferramentas não-Oracle que vc cita (ie, nem o TOAD nem esse tal do tracer) mas sobre a última uma googlada rápida me levou a http://glufke.net/oracle/viewtopic.php?t=9914 que parece indicar a necessidade de restartar alguns serviços do TOTVS, veja lá : NÃO GARANTO a aplicabilidade, já que (repito) não uso nem esse ERP TOTVS nem a tal ferramenta externa/não-Oracle de trace…. INCLUSIVE, como o fórum linkado pela URL que indiquei parece ser uma página oficial da TOTVS, eu ** creio ** que essa deva ser a recomendação Oficial do fabricante desse ERP – confirme porém isso no Suporte deles….
Falando de mim pessoalmente, porém, se não houver Impedimento (sei que alguns ERPs como por exemplo o SAP, fornecem tools próprias que o Administrador deve preferire que são as recomendadas) eu dou SEMPRE preferência para usar as tools nativas do banco, e no caso nativo do banco Oracle para trace de SQL POR SESSÃO é o evento 10046 ou o SET SQLTRACE=TRUE (veja http://www.orafaq.com/wiki/SQL_Trace#Tracing_other_user.27s_sessions para alguns exemplos/refs), OU então para trace end-to-end/em ambientes com sessões não-dedicadas é o DBMS_MONITOR, http://docs.oracle.com/cd/E25178_01/server.1111/e16638/sqltrace.htm#BABJBHBE é a ref documental oficial da Oracle, e http://www.databasejournal.com/features/oracle/article.php/3447031/Oracle-Session-Tracing-Part-III.htm e http://www.juliandyke.com/Diagnostics/Packages/DBMS_MONITOR/SERV_MOD_ACT_TRACE_ENABLE.php contém alguns exemplos….
A questão é que no trace por sessão vc tem que indicar qual a sessão a tracejar, e muitos softwares hoje em dia usam o conceito de POOL DE CONEXÃO, ie : no startup do software o aplicativo abre umas tantas conexões no banco e cada vez que o aplicativo precisa enviar SQLs pro banco ele ** REUTILIZA ** uma das sessões já estabelecidas pelas conexões do pool – nesse cenário um SELECT pode ser processado no banco pela sessão X, o próximo comando (um UPDATE que seja) talvez seja processado pela sessão Y, o próximo SQL pode ser processado pela sessão Z criada pelas conexões do pool, assim por diante…. Aí, nesse caso de POOL DE CONEXÃO ativo/presente o trace por sessão NÂO É VIÁVEL já que vc nunca sabe qual em sessão o aplicativo vai estar processando, pra um caso assim em termos de tools nativas do banco vc tem que usar end-to-end via DBMS_MONITOR, indicando que vc quer tracejar sempre que for estabelecida uma conexão num serviço tal, num MODULE tal ou com CLIENT_ID tal….
[]s
Chiappa
8 de março de 2017 às 8:02 pm #108646José Laurindo ChiappaModeradorUma obs complementar : provavelmente não é o caso, mas se vc não conseguir definir/descobrir se tem ou não pool de conexão na jogada, ou então se não tiver como vc identificar a sessão e/ou não tiver como vc ter um MODULE ou um SERVICE_NAME específico pra conexão que vc quer tracejar, o Oracle oferece também a possibilidade de tracejar ** todas ** as sessões do database, via DBMS_MONITOR.DATABASE_TRACE_ENABLE ou parâmetro de inicialização – a idéia nesse caso seria combinar com teu usuário de executar a rotina problemática á noite ou numa hora que mais ninguém esteja usando a aplicação, aí imediatamente antes do usuário disparar a rotina vc ativa o trace de banco geral, e imediatamente depois que a rotina acabou e te deu o erro vc Desativa o trace geral de banco…. Com esta alternativa *** Não tem perda possível ** , vc vai estar tracejando absolutamente TUDO o que o database executou – sua Preocupação nesse caso, obviamente, é o tamanho / quantidade de traces que vc vai obter….
[]s
Chiappa
-
AutorPosts
- Você deve fazer login para responder a este tópico.