出現這個錯誤的原因多是因為ResultSet或者是statement沒有被及時關閉造成的。你JMeter測試的時候儘管OPEN_CURSORS降到了3,但是資源被正常關閉的情況下還是可以執行正常。
解決這個問題,可以用V$OPEN_CURSORVIEW來檢視具體出問題的是哪些SQL,從而找到問題點。
SELECTSID,USER_NAME,SQL_TEXTFROMV$OPEN_CURSOR;
執行上面的語句,檢視哪些session打開了遊標。
另外,由於ORA-01000錯誤,多半是多次迴圈處理中出現的問題,可以用如下SQL檢視被多次發行的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的數目很大,說明那條SQL發行的時候沒有被正常關閉,從而找到問題點。
出現這個錯誤的原因多是因為ResultSet或者是statement沒有被及時關閉造成的。你JMeter測試的時候儘管OPEN_CURSORS降到了3,但是資源被正常關閉的情況下還是可以執行正常。
解決這個問題,可以用V$OPEN_CURSORVIEW來檢視具體出問題的是哪些SQL,從而找到問題點。
SELECTSID,USER_NAME,SQL_TEXTFROMV$OPEN_CURSOR;
執行上面的語句,檢視哪些session打開了遊標。
另外,由於ORA-01000錯誤,多半是多次迴圈處理中出現的問題,可以用如下SQL檢視被多次發行的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的數目很大,說明那條SQL發行的時候沒有被正常關閉,從而找到問題點。