oracle ORA-00845的解决方法(MEMORY_TARGET not supported on this system)

今天晚上新装一台Oracle 11g的数据库,打算将SGA设大一点,知道 11g 中有一个新特新 MEMORY_TARGET,于是尝一下鲜,谁知报了个 ORA-00845,报错比较容易迷惑人,不借助Google真得想半天:

SQL> alter system set memory_max_target=3G scope=spfile ; 
System altered.
SQL> alter system set memory_target=2G scope=spfile ;      
System altered.
SQL> 
SQL> shutdown immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup ; 
ORA-00845: MEMORY_TARGET not supported on this system

来自Oracle的官方解析是:

Starting with Oracle Database 11g, the Automatic Memory Management feature requires more shared memory (/dev/shm)and file descriptors. The size of the shared memory should be at least the greater of MEMORY_MAX_TARGET and MEMORY_TARGET for each Oracle instance on the computer. If MEMORY_MAX_TARGET or MEMORY_TARGET is set to a non zero value, and an incorrect size is assigned to the shared memory, it will result in an ORA-00845 error at startup.

简单来说就是 MEMORY_MAX_TARGET 的设置不能超过 /dev/shm 的大小:

 

解决方法:

  对于这种错误有两种解决方法,一种是扩展/dev/shm的大小并重新挂载。

  1.首先检查当前/dev/shm的大小:

[oracle@linux52]$ df -h | grep shm
shmfs               24G     296M  23G   2% /dev/shm

  可以看出当前挂载的共享内存大小为24G

  2.扩展共享内存大小: 

linux52:~# umount /dev/shm
linux52:~# umount -t tmpfs shmfs -o size=36g /dev/shm

  修改文件/etc/fstab,追加以下内容:

shmfs /dev/shm    tmpfs size=36g        0 0

  修改完之后重新启动数据库,问题解决。

  另一种方法是重新调整数据库参数MEMORY_TARGET的大小,由于数据库实例启动失败,不能直接执行sql来修改数据库参数,可以通过修改pfile文件中的配置来实现:

  1. 登录数据库之后以spfile生成pfile,(注:spfile路径根据实际值填写,当前为双机数据库实例spfile文件路径)

oracle@linux52:~>sqlplus / as sysdba
SQL>create pfile='/opt/oracle/initsdpdb.ora' from spfile='+DG_ORA/sdpdb/spfilesdpdb.ora';

  2.然后直接修改/opt/oracle/initsdpdb.ora文件,将memory_target参数值调小之后再由该pfile文件生成spfile:

oracle@linux52:~>sqlplus / as sysdba
SQL>create spfile='+DG_ORA/sdpdb/spfilesdpdb.ora' from pfile='/opt/oracle/initsdpdb.ora';

  之后重新启动数据库,问题解决。

注:如果当前memory_target参数的大小设置超过单板实际物理内存大小,必须采用方法二即调整数据库参数的问题解决。

posted @ 2016-09-22 20:58  当年亦如是  阅读(4730)  评论(0)    收藏  举报