项目在运行过程中,后台报错:
ORA-01000: maximum open cursors exceeded ORA-00604: error occurred at recursive SQL level 1 ORA-01000: maximum open cursors exceeded ORA-00604: error occurred at recursive SQL level 1 ORA-01000: maximum open cursors exceeded
网上搜索了一下,找到了原因根源:
使用Oracle数据库的时候,经常会碰到有ORA-01000: maximum open cursors exceeded的错误。实际上,这个错误的原因,主要还是代码问题引起的。 ora-01000: maximum open cursors exceeded:表示已经达到一个进程打开的最大游标数。这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。
对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。
而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。
解决方案
一、从源头上解决方案(建议)
检查代码,把涉及到打开链接的地方,用完之后,千万别忘记关掉。
二、临时解决方案(不已建议)
通过修改oracle系统参数:将OPEN_CURSORS 的值设置得足够大,以避免应用程序用尽所有打开的游标。应用程序不同,该值也不同。即便会话打开的游标数未达 OPEN_CURSORS 指定的数量(即设置的值高于实际需要的值), 也不会增加系统开销。
步骤如下:
第一步:查看当前OPEN_CURSORS 的值
show parameter open_cursors;
第二步:查看修改之后是重启oracle服务生效还是立即生效
show parameter spfile;
多说一点在修改系统参数时,scope有三个重要参数,如下:
alter system set parameter= value scope=spfile;
**SCOPE=MEMORY:只改变当前实例运行,亦即初始化参数改变了只对当前实例有效,当实例重启之后,初始化参数值还原。
**SCOPE=SPFILE:只改变SPFILE的设置。亦即改变初始化参数文件内容。实例重启后参数生效。
** SCOPE=BOTH,既改变实例也改变SPFILE。指定这个选项相当于不带参数的alter system语句。需要注意的是,如果修改静态参数,必须指定SPFILE参数(必须表明SCOPE=MEMOEY或者SCOPE=SPFILE),否则会报错。
如何查看scope设置的是上面参数中的值,则通过: show parameter spfile;如下
第二步:修改游标:open_cursors的值
alter system set OPEN_CURSORS=1200;
因时间关系,写的有点乱。
另外,oracle中还有几个重要的值:分别为:sessions,processes;通过如下命令看查看当前值:
show parameter sessions; show parameter processes;
修改的话,通过如下命令:
alter system set sessions = value; alter system set processes = value;
相关推荐
ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-...
ORA-01036:非法的变量名/编号 oracle特有的错误
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
本文对ORA-01000_maximum_open_cursors_exceeded_超出打开游标的最大数的原因和解决方案有详细描述
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
oracle报错ora-12541:TNS无监听程序
ORA-00031:标记要终止的会话解决方案; ORA-00031:标记要终止的会话解决方案;
最近在工作中遇到了一个问题,错误是Oracle dbca时报错:ORA-12547: TNS:lost contact,通过查找相关的资料终于找到了解决的方法,下面分享给大家,话不多说了,来一起看看详细的介绍吧。 环境: OS:RHEL6.5 x86-...
oracle 12 c ORA-01017: 用户名/口令无效; 登录被拒绝
NULL 博文链接:https://3w1h.iteye.com/blog/1211779
调整参数后引起,ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3 2768M 的解决方案
kettle连接oracle12C--报错ORA-28040 没有匹配的验证协议
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
ORA-12541 TNSno listener 的解决方案 ORA-12541 TNSno listener 的解决方案
解决ORACLE TNS: 无法解析指定的连接标识符; 里面有步骤