我们系统的数据量比较大,近200张表,有些表一天要插入1000000条左右的数据。
表是使用ER/STDIO设计的,然后直接生成建表的脚本,由于没有设置physical_attributes_clause语
句中的建表参数,因此使用了默认的参数。好像是INITIAL 10K NEXT 10K PCTFREE 20 PCTUSED 50
由于表的存储空间太小,在很短的时间内就会装满,因此ORACLE就需要不停为30多张表(数据量较大的)申请空间。于是在程序运行了一段时间后,开始出现ORA-01000: maximum open cursors exceeded的错误。 我将游标大小改到了300,还是出现错误,改到1000以后开始出现了ORA-01001:invalid cursors。再怎么加大open_cursors的数量都无济于事。
使用select * from v$open_cursor查询,发现有几百条的INSERT语句游标没有释放。
开始怀疑是程序调用的问题,仔细检查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后,对此表进行插入的游标全部释放,于是开始怀疑是表结构本身的问题。
重新设置了建表参数,将数据量最大的表的INITIAL和NEXT均设置为50M。
ALTER TABLE tablename STORAGE( INITIAL N NEXT N);
至今未再出现同样的错误。
表是使用ER/STDIO设计的,然后直接生成建表的脚本,由于没有设置physical_attributes_clause语
句中的建表参数,因此使用了默认的参数。好像是INITIAL 10K NEXT 10K PCTFREE 20 PCTUSED 50
由于表的存储空间太小,在很短的时间内就会装满,因此ORACLE就需要不停为30多张表(数据量较大的)申请空间。于是在程序运行了一段时间后,开始出现ORA-01000: maximum open cursors exceeded的错误。 我将游标大小改到了300,还是出现错误,改到1000以后开始出现了ORA-01001:invalid cursors。再怎么加大open_cursors的数量都无济于事。
使用select * from v$open_cursor查询,发现有几百条的INSERT语句游标没有释放。
开始怀疑是程序调用的问题,仔细检查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后,对此表进行插入的游标全部释放,于是开始怀疑是表结构本身的问题。
重新设置了建表参数,将数据量最大的表的INITIAL和NEXT均设置为50M。
ALTER TABLE tablename STORAGE( INITIAL N NEXT N);
至今未再出现同样的错误。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12137615/viewspace-614943/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12137615/viewspace-614943/