2011-05-18 45 views
1

我們使用ORACLE A.S 10g和D.B 10g(10.0.1)。我們在A.S上維護一個D.B連接池。我們的應用程序是基於Web的我們正確地關閉了java端的結果集和語句。但是我們經常會收到超出打開的光標的錯誤。目前,對生產,我們將限制設置爲5000 我們用下面的查詢檢查當前打開的遊標oracle open cursor

select a.sid, a.value, b.name, b.statistic# 
from v$sesstat a, v$statname b 
where a.statistic# = b.statistic# 
and b.name = 'opened cursors current' 
and a.sid = 555(any sid number) 

「打開的遊標」的數量在增加,不能減少,直到我們重新啓動我們的應用服務器。 因爲我們正在使用連接池,所以遊標未關閉? 請指導我們該怎麼做。我們還會看什麼其他領域。

+0

你是否也關閉連接? (你只提到結果集和語句) – DaveH 2011-05-18 12:12:34

+0

他說他們有一個連接池 – 2011-05-18 12:16:01

+0

但他沒有說他使用connection.close()關閉連接,它將連接返回到池。 – DaveH 2011-05-18 12:18:00

回答

0

找到累犯:由存儲過程返回

select c.SQL_TEXT, count(*) cnt 
    from v$open_cursor c 
    group by c.SQL_TEXT 
    order by cnt desc 

REF遊標/功能需要太封閉。