It is probably because the SGA has become fragmented to the point
that there is not enough contiguous space for the object to be loaded.
As objects are aged out of the SGA, they leave "holes". Objects have to have contigous space in order to be loaded into SGA... You need to
1. reboot the database in order to clear the problem (flushing shared pool doesn't do it)
2. Look at the procs, functions, etc that are loaded into the SGA, their size and the number of executions and the reloads of them ... Find the problem ones and PIN them in SGA...

To determine what large PL/SQL objects are currently loaded in the shared pool
and are not marked 'kept' and therefore may cause a problem, execute the following:


select substr(owner,1,10),substr(name,1,32), sharable_mem,loads,executions
from v$db_object_cache
where sharable_mem > 100
and (type = 'PACKAGE' or type = 'PACKAGE BODY' or type = 'FUNCTION'
or type = 'PROCEDURE')
and kept = 'NO'
order by owner,loads desc;


--- Objects that have been reloaded ---

select substr(owner,1,10),substr(name,1,32), sharable_mem,loads,executions
from v$db_object_cache
where loads > 1
and (type = 'PACKAGE' or type = 'PACKAGE BODY' or type = 'FUNCTION'
or type = 'PROCEDURE')
and kept = 'NO'
order by owner,loads desc;


HTH
Gregg