超出打開游標的最大數(shù)如何處理?
出現(xiàn)這個錯誤的原因多是因為ResultSet或者是statement沒有被及時關閉造成的。你JMeter測試的時候盡管OPEN_CURSORS降到了3,但是資源被正常關閉的情況下還是可以運行正常。
解決這個問題,可以用V$OPEN_CURSORVIEW來查看具體出問題的是哪些SQL,從而找到問題點。
SELECTSID,USER_NAME,SQL_TEXTFROMV$OPEN_CURSOR;
執(zhí)行上面的語句,查看哪些session打開了游標。
另外,由于ORA-01000錯誤,多半是多次循環(huán)處理中出現(xiàn)的問題,可以用如下SQL查看被多次發(fā)行的SQL
SQL>SELECTOC.SID,OC.USER_NAME,ST.SQL_TEXT,OC.NUM_CURSORS
2
FROMV$SQLST
3
INNERJOIN(
4
SELECTSID,USER_NAME,ADDRESS,HASH_VALUE,COUNT(*)NUM_CURSORS
5
FROMV$OPEN_CURSOR
6
GROUPBYSID,USER_NAME,ADDRESS,HASH_VALUE
7
HAVINGCOUNT(*)>1
8
)OC
9
ONOC.ADDRESS=ST.ADDRESS
10
ANDOC.HASH_VALUE=ST.HASH_VALUE
11
ORDERBYOC.SID;
如果檢索結果中NUM_CURSORS的數(shù)目很大,說明那條SQL發(fā)行的時候沒有被正常關閉,從而找到問題點。