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参数的大小设置超过单板实际物理内存大小,必须采用方法二即调整数据库参数的问题解决。

浙公网安备 33010602011771号