Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 18 anos atrás por chduarte.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #78103
    rferreira
    Participante

      Pessoal, tudo bem??

      podem me ajudar formular alguma técnica para detectar automaticamente esses processos travados dentro do oracle?? eu achei algumas tecnicas na web, porem nao ficou claro se elas vao funcionar em todos os casos…..

      eu achei uma query assim:
      select spid, username, program
      from v$process
      where not exists (select 1 from v$session where paddr = addr)
      and spid is not null;

      isso me parece verificar se existem processos que nao estao vinculados a alguma sessao (alguns poucos processos do oracle aparecem no retorno dessa query), porem eu queria saber se alguem ja fez isso para me ajudar a verificar esse método…

      obrigado,
      Renato…

      #78111
      chduarte
      Participante

        Na verdade o Oracle automaticamente detecta os processos que estao mortos no banco atraves do PMON. De tempos em tempos o PMON verifica as sessoes que estao inativas e inexistentes e remove do banco.

        Voce pode colocar este parametro no SQLNET.ORA para a cada X minutos o PMON fazer esta verificacao.

        sqlnet.expire_time = 10

        Documentacao do parametro:

        #Possible values: 0-any valid positive integer! (in minutes)
        #Default: 0 minutes
        #Recommended value: 10 minutes
        #
        #Purpose: Indicates the time interval to send a probe to verify the
        # client session is alive (this is used to reclaim watseful
        # resources on a dead client)

        []

        #78119
        rferreira
        Participante

          isso que eu temia que alguem dissesse, pois eu tambem tinha visto muito sobre isso na web…. mas meu trabalho eh aferir os requisistos pra desenvolvimento de metodos para gerenciamento do oracle como aplicação e preciso propor um metodo pra detectar isso em especial que foi solcitado, nao sei porque o cliente pediu, mas está marcado como uma das coisas mais importantes do relatório gigaaante que eu recebi…. tem certeza que não existem outras hipoteses em que o oracle fica com o processos presos?? afinal, conforme eu pesquisei, esse parametro aí só trata erros de sessão por timeout de rede…. foi um DBA que fez essa solicitação, eu logo imagino que ele achava isso pertinente, eu nao tenho como julgar pois nao sou DBA…

          🙂 🙂 🙂 🙂

          #78121
          chduarte
          Participante

            Este parametro funciona da seguinte maneira:

            99% das conexoes feitas com o banco é feito via rede atraves do protocolo NET8 da propria Oracle. Este parametro manda a cada X minutos um pacote para cada conexao.

            Se ele receber uma resposta significa que este processo esta no ar, mesmo os inativos. Senao recebe nenhuma resposta ele mata o processo no banco.

            Eu ja trabalhei com bancos com mais de 8000 conexoes simultaneas sem nenhum problema entao acredito que este nao seja um problema mais a se preocupar com o banco.

            O que geralmente acontece é o desenvolvedor deixar a conexao aberta no banco e principalmente em Java ele so fecha a conexao apos o metodo close() se disparado.

            O desenvolvedor devera garantir isso no codigo porque mesmo se a aplicacao abrir mais de uma conexao o banco devera mante-la porque ele nao sabe como a aplicacao funciona.

            []

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