您的位置:首页 > 其它

ORA-00845: MEMORY_TARGET not supported on this system

2012-05-30 17:44 465 查看
今天晚上新装一台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 的大小:
[oracle@FWDB FWDB]$ df -h | grep shm

tmpfs 2.0G 0 2.0G 0% /dev/shm
还真是撞到这个枪口上了:
马上把它加大:
[root@FWDB ~]# cat /etc/fstab | grep tmpfs

tmpfs /dev/shm tmpfs defaults,size=4G 0 0
现在可以通过重启使这个配置生效,也可以通过重新挂载来修改其大小:
[root@FWDB ~]# mount -o remount,size=4G /dev/shm

[root@FWDB ~]# df -h | grep shm

tmpfs 4.0G 0 4.0G 0% /dev/shm
再次启动数据库,没有报错了。

ORA-00845: MEMORY_TARGET not supported on this system 失败的解决方案

在RHL4的Oralce11:startup时报错:
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
官方解释:
ORA-00845: MEMORY_TARGET not supported on this system
Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux.
<!-- class="msgexplan" -->

Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.
意思是oracle SGA的大小超过了系统shm的大小,有两种解决方案:1.修改shm的大小 .2 修改SGA_MAX_SIZE的大小。
建议修改shm,shm类似于Windows平台的虚拟内存,shm默认自动调节大小,大约是内存的一半。我的内存是1G,查看shm的大小是508M,而oralce默认的SGA大小是422M.因为shm的剩余空间是随着应用程序的变化而调节的,当shm小于SAG,启动oracle就会出现此问题。
解决方案是自定义shm的大小,需要修改/etc/fstab文件:

[oracle@oracle11g ~]$ vi /etc/fstab
把文件中:
none /dev/shm tmpfs defaults 0 0
修改为:
none /dev/shm tmpfs defaults,size=1G 0 0
然后保存退出,重新挂载shm
[oracle@oracle11g ~]$ umount /dev/shm
[oracle@oracle11g ~]$ mount /dev/shm
查看shm大小
[oracle@oracle11g ~]$ df -h |grep shm
none 1.0G 308M 200M 30% /dev/shm
重新启动oracle,OK!

也可以是以下:
Oracle 11g
的Linux
版本在修改了MEMORY_TARGET
或者SGA_TARGET
后启动可能会报错:

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORA-00845: MEMORY_TARGET not supported on this system
这个问题是由于设置SGA
的大小超过了操作系统/dev/shm
的大小:

[root@enterprice64 ~]# df -k /dev/shm

Filesystem 1K-blocks Used Available Use% Mounted on

tmpfs 4089416 0 4089416 0% /dev/shm
Oracle
在metalink
的文档:Doc ID: Note:460506.1
中进行了说明。解决这个问题只有两个方法,一种是修改初始化参数,使得初始化参数中SGA
的设置小于/dev/shm
的大小,另一种方法就是调整/dev/shm
的大小。

修改/dev/shm
的大小可以通过修改/etc/fstab
来实现:

[root@enterprice64 ~]# vi /etc/fstab

LABEL=/ / ext3 defaults 1 1

LABEL=/boot /boot ext3 defaults 1 2

LABEL=/data /data ext3 defaults 1 2

devpts /dev/pts devpts gid=5,mode=620 0 0

#tmpfs /dev/shm tmpfs defaults 0 0

tmpfs /dev/shm tmpfs defaults,size=10240M 0 0

LABEL=/home /home ext3 defaults 1 2

LABEL=/opt /opt ext3 defaults 1 2

proc /proc proc defaults 0 0

sysfs /sys sysfs defaults 0 0

LABEL=/usr /usr ext3 defaults 1 2

LABEL=/var /var ext3 defaults 1 2

LABEL=SWAP-sda8 swap swap defaults 0 0

~

"/etc/fstab" 13L, 965C written

[root@enterprice64 ~]# umount /dev/shm

[root@enterprice64 ~]# mount /dev/shm

[root@enterprice64 ~]# df -k /dev/shm

Filesystem 1K-blocks Used Available Use% Mounted on

tmpfs 10485760 0 10485760 0% /dev/shm
也可以使用如下命令修改

# umount tmpfs

# mount -t tmpfs shmfs -o size=1500m /dev/shm

这个命令之是临时修改SWQP分区大小而已,建议使用上面的命令进行永久性修改
测试是否能正常启动

[root@enterprice64 ~]# su - oracle

[oracle@enterprice64 ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Oct 23 15:42:42 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 4743446528 bytes

Fixed Size 2143824 bytes

Variable Size 3892316592 bytes

Database Buffers 805306368 bytes

Redo Buffers 43679744 bytes

Database mounted.

Database opened.
修改/etc/fstab
,重新mount /dev/shm
,然后就可以启动数据库了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: