出现这个错误的原因多是因为ResultSet或者是statement没有被及时关闭造成的
可以通过如下方式进行确认:
1、用V$OPEN_CURSOR VIEW来查看具体出问题的是哪些SQL,从而找到问题点
SELECT SID, USER_NAME, SQL_TEXT FROM V$OPEN_CURSOR;
执行上面的语句,查看哪些session打开了游标。
2、由于ORA-01000错误,多半是多次循环处理中出现的问题,可以用如下SQL查看被多次发行的SQL
SELECT OC.SID, OC.USER_NAME, ST.SQL_TEXT, OC.NUM_CURSORS
FROM V$SQL ST
INNER JOIN (
SELECT SID, USER_NAME, ADDRESS, HASH_VALUE, COUNT(*) NUM_CURSORS
FROM V$OPEN_CURSOR
GROUP BY SID, USER_NAME, ADDRESS, HASH_VALUE
HAVING COUNT(*) > 1
) OC
ON OC.ADDRESS = ST.ADDRESS
AND OC.HASH_VALUE = ST.HASH_VALUE
ORDER BY OC.SID;
如果检索结果中NUM_CURSORS的数目很大,说明那条SQL发行的时候没有被正常关闭,从而找到问题点