Implementation of Oracle 11g parameter MEMORY_TARGET on UNIX
I am trying to understand how MEMORY_TARGET is implemented on UNIX platform. The manuals indicate that Oracle dynamically re-sizes SGA and PGA as needed. However on UNIX SGA is implemented as a shared memory segment, and as fas as I know existing implementations of shared memory on major platforms (AIX 5.3, Solaris 10, HP-UX 11.23) don't allow shared memory segment to be re-sized. In other words if a shared memory segment is created with a certain size it will have this size until it is deleted. So it appears that dynamic SGA resizing is impossible.
There may be a way around this limitation if Oracle creates multiple shared memory segments per instance and then deleted/added them as needed thus achieving dynamic SGA resizing. Traditionally Oracle recommended setting SHMMAX parameter to a value bigger that SGA size. However it is known that instance still starts when SHMMAX < SGA size, but it may cause problems like ORA-00600 errors.