ORA-04031的产生原因及解决方法

 我来答
温屿17
2022-07-09 · TA获得超过1.2万个赞
知道小有建树答主
回答量:827
采纳率:0%
帮助的人:94.6万
展开全部
现象: ORA-04031: unable to allocate 4096 bytes of shared memory

在查询一大的视图时出现的这个错误,视图里面套视图,效率很低,在采用了下面的第一种方法后解决,把 shared_pool_size 增大为150M,以前是40M.

具体原因及解决:

ORA-04031出现的问题有以下几个可能性:

1. 没有绑定编量造成shared_pool碎片过多,同时shared_pool_size太小

(1)这个情况是比较常见的。

(2)第二种情况通常会建议使用绑定变量,或者用简单的加大shared_pool,临时的解决方法就是alter system flush shared_pool。

2. Large_pool,Java_pool太小造成的

(1)这个通过错误 信息 的提示很容易判断(Ora-04031 cannot allocate .. memeory in [large_pool])

(2)解决方法就是简单的加大 Large_pool or Java_pool

3. 过度的开CURSOR而不关闭。

目前,此问题发生的越来越多,特别是在JAVA的运行环境中,屡见不鲜。加大Shared_pool或者flush shared_pool往往只能延迟问题出现的时间,而无法避免此问题。

判断方法:

假如出来的值特大(以万为单位)时,基本就可以确定是这个原因了。

解决这个问题的方法就是检查程序,看是否没有正常的关闭cursor(对于JAVA来说,就是没有关闭Statement)。或者select sql_text from v $open_cursor,看看都是哪些cursor没关闭,再去检查车程序。

也有的程序使用了保持一定量的cursor一直open,从而避免cursor过多次的开启,来提高。对于这种情况,则应该选择适当的shared_pool_size和控制keep_opening的cursor的量。

另外,Oracle参数session_cached_cursors也有可能过大,解决的方法就是把它降低到适当的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式