- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 7 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
19 de abril de 2017 às 12:49 am #108712airoospParticipante
Boa tarde,
Preciso fazer o monitoramento de uma sessão em ambiente RAC, gerar um arquivo com informações sobre o que a sessão faz (select, insert, update, delete).
Se alguém tiver alguma dica, agradeço.
Obrigado.
Airton
19 de abril de 2017 às 2:37 am #108713José Laurindo ChiappaModeradorBlz ? Então, se teu objetivo é obter a relação ** exata e precisa ** de absolutamente TODOS os INSERTs/UPDATEs/DELETEs que a sessão fez, se a Menor Chance de perder nenhum deles, a sua Opção vai ser fazer um TRACE dessa sessão….
Para poder fazer um TRACE DE SESSÃO, a primeira coisa que vc tem que descobrir é se essa aplicação usa um POOL DE CONEXÃO (ie, existe um software fora da aplicação que vai no banco, cria montes de sessões e cada vez que a aplicação precisa conectar esse software direciona a aplicação para uma dessas sessões compartilhadas) ** OU ** se ela cria mesmo uma sessão física no banco a cada vez que alguém conecta no banco pela aplicação (isso é a chamada CONEXÃO DEDICADA)…
CASO seja conexão dedicada, vc pode :a. se for possível programar uma pausa na aplicação logo depois que ela conecta, vc pode ativar o trace abrindo uma outra sessão com usuário que tenha os privilégios corretos , identificando o sid e o serial da sessão criada (E também o INST_ID, já que é RAC) através de consulta na GV$SESSION , https://alexzeng.wordpress.com/2008/08/01/how-to-trace-oracle-sessions/ exemplifica a chamada às funções de trace ou b. se não for possível programar uma pausa assim que a aplicação cria a sua sessão dedicada, vc pode escrever uma trigger de logon que pesquisando a GV$SESSION localiza a sessão a tracejar, https://blogs.oracle.com/glennf/entry/threshold_login_triggers_for_oracle tem um exemplinho genérico que vc pode adaptar
CASO haja Pool de Conexão na parada, é mais complexo, pois o banco nunca sabe qual sessão está atendendo qual conexão da aplicação, vc pode :
a. ativar o trace para o banco todo, ou pelo menos para as sessões que já estão criadas : com isso vc obtém trace geral, certamente incluindo o que vc quer MAS esta opção Não é Recomendada, pois vai consumir montes de espaço em disco, e pode interferir SERIAMENTE na performance ou b. se a aplicação popula as colunas CLIENT_INFO, MODULE e ACTION na GV$SESSION (ou se a aplicação pode ser alterada para incluir uma chamada à package DBMS_APPLICATION_INFO que preenche essas colunas) vc pode usar a monitoração via trace ativado pela DBMS_MONITOR ou c. como última alternativa, crie um serviço específico no RAC e peça pra aplicação que vc quer debugar conectar com esse serviço : é possível vc tracejar apenas as conexões que forem feitas com um serviço específico....
==> veja http://www.toadworld.com/platforms/oracle/b/weblog/archive/2014/06/22/tracing-code-with-dbms-monitor como Ref para uso da DBMS_MONITOR para tracejar um serviço ou uma sessão identificada por coluna na GV$SESSION…
[]s
Chiappa
OBS : isso que eu falei é se vc precisa obter um trace ** exato **, uma lista PRECISA de tudo que foi executado – se for aceitável ter apenas uma noção dos principais SQLs que a aplicação executou vc pode pesquisar na GV$SQL ou (se tiver a permissão/licença pra isso) no ASH/AWR….
-
AutorPosts
- Você deve fazer login para responder a este tópico.