ORA-01000: maximum open cursors exceeded
ORA-06512: at "××××××", line ××
通过如下语句进行open cussors查询
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 username='TEST'
and b.name = 'opened cursors current';
网上有描述.
案例来自itpub,yangtingkun:
“我们系统的数据量比较大,近200张表,有些表一天要插入1000000条左右的数据。表是使用ER/STDIO设计的,然后直接生成建表的脚本,由于没有设置physical_attributes_clause语句中的建表参数,因此使用了默认的参数。好像是INITIAL10K NEXT 10K PCTFREE 20 PCTUSED 50由于表的存储空间太小,在
很短的时间内就会装满,因此Oracle就需要不停为30多张表(数据量较大的)申请空间。于是在程序运行了一段时间后,开始出现ORA-01000:maximum open
cursors exceeded的错误。我将游标大小改到了300,还是出现错误,改到1000以后开始出现了ORA-01001:invalidcursors。再怎么加大open_cursors的数量都
无济于事。使用select * from v$open_cursors查询,发现有几百条的INSERT语句游标没有释放。
开始怀疑是程序调用的问题,仔细检查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后,对此表进行插入的游标全部释放,于是开始怀疑是表结构本
身的问题。重新设置了建表参数,将数据量最大的表的INITIAL和NEXT均设置为50M。至今未再出现同样的错误。”