【引言】
项目组今天来找,反馈应用程序日志记录了一连接在昨晚发生连接中断现象,让查一查数据库端有何异常 。
对应昨晚异常发生时间点,在库
日志中找到相应时间段的报错信息,报错信息如下:
【报错信息】
!!"#$% &&'() %*+,(, ,
-./0'! +1!23%45!1%
!6788658658#"!89#89#889#..:;266<(==,3
>' ?(,,= 1 1" /0'! +1!23% % &&'() %
*+,(, ,% !!"#$%%
>' ?,11!6@A
ORA-01000: maximum open cursors exceeded
6 6! 6
88658658#"!89#89#866866.(==,89#..:.6(==,;
B! &'+1/#9/5966;
,;C>1D/5656!;
问题现象也很明显:见上述
日志报错“
>' ?"6"1"1!!
”
。
原因分析
>
使用
>*.+B'>'
参数指定一个
session
会话一次最多可打开的游标数。超过此数量时,
>
将报
>' ?
错误。当此错误反应在
#A56
时,显示为抛出
@A
。
之前的一篇微信推文
《排故篇:
ADG
实例被
LGWR
进程宕掉?!》介绍过
1!
。
【分析过程】
;
查询数据库定义的单个
session
可以打开游标的最大数
EF9#G!9H".1!!
CIE*
?????????????????????????????????????????????????????????????????????
AB
??????????????????????????????
.1!!65
Oracle
的
OPEN_CURSORS 缺省值为 50
。
将 OPEN_CURSORS 的值设置得足够大,以避免应用程序
用尽所有打开的游标。
注意:
应用程序不同,
调用
cursor
数也不同
。
单个
session
实际打开的
游标数未达 OPEN_CURSORS 指定的数
量,也不会增加
内存
开销。
评论