ORA-04031: unable to allocate nn bytes of shared memory

Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
  • User AvatarKiran Dalvi
  • 08 Nov, 2021
  • 0 Comments
  • 1 Min Read

ORA-04031: unable to allocate nn bytes of shared memory

ORA-04031: unable to allocate nn bytes of shared memory

Question: I am getting the error ORA-04031 Cannot allocate shared memory. I've tried increasing my init.ora shared_pool_size, but to no avail. What are some causes for the ORA-04031 error, and how do I fix it?

Answer: The ORA-04031 error has many root causes. Also, see MOSC notes 146599.1 and 396940.1 for more details for resolving the ORA-04031 error:

1.Heavy fragmentation of the shared pool - This can be fixed by increasing the shared_pool_size or doing a "alter system flush shared pool" or bouncing the instance.

2.Too many pinned packages - If you have pinned lots of packages with dbms_shared_pool.keep, they have not leave enough room for new work.

Ultimately the solution to a ORA-04031 error is adding RAM to shared_pool_size and/or shared_pool_reserved_size. In 11g and beyond , if using AMM, increase memory_max_size to resolve the ORA-04031 error.

The Oracle documentation has these notes on the ORA-04031 error:

ORA-04031: unable to allocate nn bytes of shared memory

Cause: More shared memory is needed than was allocated in the shared pool

Action: If the shared pool is out of memory, either use the dbms_shared_pool package to pin large packages, reduce your use of shared memory, or increase the amount of available shared memory by increasing the value of the INIT.ORA parameters "shared_pool_reserved_size" and "shared_pool_size". If the large pool is out of memory, increase the INIT.ORA parameter "large_pool_size".

The ORA-04031 error also happens when you are using automatic memory management (sga_max_size), and the memory specific is too small.