今天修改oracle数据库内存时,
alter system set memory_max_target=10240M scope=spfile;语句正确修改;
但重启时却报错 :
SQL> alter system set memory_max_target=10240M scope=spfile; System altered. SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
SQL>
百度了一下,发现是/dev/shm过小:
[root@db1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 7.8G 88K 7.8G 1% /dev/shm
/dev/sda1 485M 38M 422M 9% /boot
查找资料后发现问题如下,见metalinikID 460506.1
在oracle 11g中新增的内存自动管理的参数MEMORY_TARGET,它能自动调整SGA和PGA,这个特性需要用到/dev/shm共享文件系统,而且要求/dev/shm必须大于MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就会报错
解决方案
1.初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存(/dev/shm),为了解决这个问题,可以增大/dev/shm
如:
# mount -t tmpfs shmfs -o size=7g /dev/shm
2.为了确保操作系统重启之后能生效,需要修改/etc/fstab文件 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-12/76976.htm
修改/dev/shm大小:
1.Vim /etc/fstab
原来是这样:
tmpfs /dev/shm tmpfs defaults 0 0
修改成如下,也就是20G
tmpfs /dev/shm tmpfs defaults,size=20000M 0 0
2.重新mount /dev/shm后生效
# mount -o remount /dev/shm
或者umount /dev/shm
mount /dev/shm
通过df –Th查看是否生效
也可以用下面的方式
# mkdir /mnt/tmp
# mount -t tmpfs -o size=256m,mode=1777 tmpfs /mnt/tmp
问题解决:
有时会遇到/dev/shm 卸载不掉的情况
# umount /dev/shm
umount: /dev/shm: device is busy.
用fuser处理
# fuser -km /dev/shm
# umount /dev/shm
# mount /dev/shm
fuser命令
-k:kill processes accessing the named file(杀死所有正在访问指定文件的进程
)
-m 表示指定文件所在的文件系统或者块设备(处于 mount 状态)。所有访问该文件系统的进程都被列出。
参考:
http://www.xifenfei.com/1605.html
http://space.itpub.net/10640532/viewspace-680426
http://blog.csdn.net/tianlesoftware/article/details/7256984
http://www.linuxidc.com/Linux/2012-12/76976.htm
http://blog.chinaunix.net/uid-23284114-id-3232508.html