Tuesday, January 13, 2009

ORA-00845: MEMORY_TARGET not supported on this system

Problem Description
While creating a startup database using dbca the database creation GUI gives error message in a pop up window,
ORA-00845: MEMORY_TARGET not supported on this system
from where you can ignore the error message.
The similar scenario also occur whenever you try to start your database then startup shows error message like below.

SQL> STARTUP
ORA-00845: MEMORY_TARGET not supported on this system

Cause of the Problem
•Starting from Oracle 11g the automatic memory management feature is now defined with parameter MEMORY_TARGET and MEMMORY_MAX_TARGET.

•On linux file system the shared memory need to be mounted on /dev/shm directory on the operating system.

•And the size of /dev/shm needs to be greater than MEMORY_TARGET or MEMMORY_MAX_TARGET.

•The AMM (Automatic Memory Management) now in 11g manages both SGA and PGA together by MMAN process.

•The MEMORY_TARGET parameter in 11g comes for (SGA_TARGET+PGA_AGGREGATE_TARGET) which was in 10g.

•And MEMORY_MAX_TARGET parameter in 11g comes instead of SGA_MAX_TARGET parameter which was in 10g.

•The ORA-00845:can arises for the following two reasons on linux system.

1)If the shared memory which is mapped to /dev/shm directory is less than the size of MEMORY_TARGET or MEMORY_MAX_TARGET.
or,
2)If the shared memory is not mapped to /dev/shm directory.

Solution of the Problem
Make sure /dev/shm is properly mounted. You can see it by,
#df -h or #df -k command.
The output should be similar like
$ df -k
Filesystem            Size  Used Avail Use% Mounted on
...
shmfs                 1G    512M 512M  50% /dev/shm

We see here for /dev/shm we have assigned 1G memory. Now if you set MEMORY_TARGET more than 1G then above ORA-845 will arise. For example if you have MEMORY_TARGET or MEMORY_MAX_TARGET set to 12G then you can mount shared memory to 13g like below.
As a root user,
# mount -t tmpfs shmfs -o size=13g /dev/shm
In order to make the settings persistence so that it will affect after restarting machine add an entry in /etc/fstab similar to the following:

shmfs /dev/shm tmpfs size=13g 0

10 comments:

Anonymous said...

Great posting. Pointing out how one finds out what the MEMORY_MAX_TARGET is actually set to would make it even better.

Anonymous said...

To previous commenter: that should be known (show parameters). Well 6 months after so it is not much of a comment but I could not resist.

Anonymous said...

thanks a lot. Very well explained, it solved my error

B19 83NO said...

it's work, thank you

Henrik I. said...

To see what MEMORY_TARGET and MEMORY_MAX_TARGET is set to you cannot use the "show parameter" because the database cannot even open in nomount. The values are written in the pfile (initSID.ora). If you do not have a pfile you can create one: SQL> create pfile='/put/here/path/initSID.ora' from spfile='/path/to/spfileSID.ora';

SID=Your database SID

Anonymous said...

i have just ran into this problem, you helped me a lot. thanks a lot

Sakthivel Manickam said...

Thank you. It solved my problem.

Anonymous said...

Great BLOG Many useful postings. Learned a lot
Best regards, Harald

Muhammad Abdul Halim said...

yes great blog for oracle Database. very nice.

regards
Muhammad Abdul Halim

Jacque de Ville said...

Thanks for the tips, helped me out quickly with my low memory problems with Oracle 11g!