Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 5 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #108712
    Avatar de airoospairoosp
    Participante

      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

      #108713
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? 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….

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress