Cursores abertos no Oracle

Estamos com o problema clássico de cursores abertos no oracle, e precisamos achar qual software é o responsável para resolvermos o problema!

"Cause: In-use connections equal max-pool-size and expired max-wait-time. Cannot allocate more connections"

Não achei nada na internet que você executasse no Oracle para ele mostrar onde está o erro, mas achei algumas coisas que são úteis para acompanhar o problema:

PS:No java devemos fechar as Connections e os Statement

Para verificar os cursores abertos ativos por sessão:

select sum(a.value) total_cur, avg(a.value) avg_cur, max(a.value) max_cur, 
s.username, s.machine
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic#  and s.sid=a.sid
and b.name = 'opened cursors current' 
group by s.username, s.machine
order by 1 desc;

Mostrando os cursores abertos por máquina e usuário:

select a.value, s.username, s.sid, s.serial#
from v$sesstat a, v$statname b, v$session s
where a.statistic# = b.statistic#  and s.sid=a.sid
and b.name = 'opened cursors current';

Verificando se os cursores abertos estão chegando no limite:

select max(a.value) as highest_open_cur, p.value as max_open_cur
   from v$sesstat a, v$statname b, v$parameter p
   where a.statistic# = b.statistic# 
   and b.name = 'opened cursors current'
   and p.name= 'open_cursors'
   group by p.value;

Para ver quais SQLS estão ligados aos cursores:

SELECT s.machine, oc.user_name, oc.sql_text, count(1) 
FROM v$open_cursor oc, v$session s
WHERE oc.sid = s.sid
GROUP BY user_name, sql_text, machine
HAVING COUNT(1) > 2
ORDER BY count(1) DESC
;

Fonte: http://www.orafaq.com/node/758

3 comentários em “Cursores abertos no Oracle

  • 20 de setembro de 2012 em 13:01
    Permalink

    Foi advertidos sobre os cursores abertos. Tem algum aplicativo que não tem Sistema Fonte e por isso não tem como fechar os cursores.
    Tem como solucionar este problema do Cursor por um outro meio. Atualmente nós só aumentamos o valor do cursor que está em 1200.

    Resposta
    • 20 de setembro de 2012 em 13:17
      Permalink

      Ola Virgílio,
      Algumas perguntas:
      1) O sistema está feito em java? Em caso afirmativo teria uma maneira de pegar o código fonte usando decompiladores.
      2) O sistema é grande? Caso contrário, seria interessante desenvolver um novo software para sua empresa ter um controle maior.
      3) Solução via Oracle, não testada por mim, http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php

      Solução que normalmente acontece nas empresas, como paliativo até a correção do programa, é restartar o aplicativo diariamente para matar os cursores. Não transfira o erro do software para uma solução no banco de dados.

      Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blue Captcha Image
Atualizar

*

Facebook

Get the Facebook Likebox Slider Pro for WordPress
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera