Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> Re: 4031 - errors
It is quite possible that the 'cursor_space_for_time' setting is relevant. When set to true, this pins cursor run-time memory into the library cache (faking the situation of every cursor in the cache being open and active. Since this memory can no longer be freed, you can easily run out of memory if you have made a small error in your estimate of number of sessions and number of different sql statements.
Bringing a new module into the system, adding a new user to the system, allowing someone to run ad hoc SQL, adding a monitoring tool - anything which increases the number of SQL statements, or number of sessions executing shared sql statements, could take you into 4031.
On the other hand, is could just be a bug where Oracle is generating lots of copies of cursors that should be shared but aren't. I've just come back from a site where there were several hundred copies of some cursors visible in v$sql - after only a handful of invalidations or reloads - and only a few dozen active sessions.
Regards
Jonathan Lewis
http://www.jlcomp.demon.co.uk/faq/ind_faq.html The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/seminar.html Optimising Oracle Seminar - schedule updated May 1st
Had a strange problems on Friday afternoon. We are on 8.1.7.4 Solaris
Had a ton of Bam - ora_04031 errors.
Tried to flush the shared pool and it would release some space but a large chuck was not being released and this was strange since we have only acouple of objects pinned.
When I tried to pin an object that was failing right after I would flush the shared_pool I couldn't get space.
Nothing new was put in that week as far as I know.
Put in a tar with Oracle and they suggested to bounce the database - which I did later, increased the shared_pool and session_cached_cursors We have pinned some more objects that are being loaded alot.
I looked at the sql area and nothing looked horrible, all the same normal stuff. In fact there was really no load on the database or machine, no swapping or paging.
It was very strange. It looked like "something" had memory and wasn't releasing it.
![]() |
![]() |