前几天生产环境需要做服务器的扩容,把原本64G的内存扩到了128G.然后调整了一些其他的kernel参数,在此基础上需要调整sga的大小,以便分配更多的缓存。
环境是11gR2的RAC环境,这时候rac有一个明显的优点就显现出来了,就是没有downtime。一个实例一个实例的改动,调整kernel,db参数都很方便管理。
所在的每个服务器只有一个oracle_home,各有两套rac环境在同一个unix账户下。所以我启停数据库的时候也是一套环境一套环境的来。反正节点也不多。
我先是按照要求把sga调整了一下,从20G调整到40G,这样一个服务器两套环境就占用80G,还有68G的空余。
然后保证另一个节点能够正常failover之后,开始改动,很多改动完一套环境,倒也没出什么问题,
开始第二套环境的时候,按照步骤先启停,做检查。
然后准备重启数据库的时候,报了下面的错误。显示内存问题,还有空间的问题,我检查了一把空间情况,没有发现什么问题。
用free -m检查内存使用情况,空余内存还多着呢。
Connected to an idle instance.
SQL> startup nomount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
SQL> !oerr ora 27102
查看metalink(
ID 301830.1),说是内核参数的配置不够。
内核参数的值如下:
Last login: Sun Mar 30 22:42:16 2014 from xxxx
-bash-4.1$ cat /proc/sys/kernel/shmall
16383998
-bash-4.1$ cat /proc/sys/kernel/shmmax
67108855808
CAUSE
shmall is the total amount of shared memory, in pages, that the system can use at one time.
SOLUTION
Set shmall equal to the sum of all the SGAs on the system, divided by the page size.
来做个演算,
shmall应该是
shmmax/page_size=
67108855808/4096=
16383998,这个和当前的设置相等
但是同一个unix账户下有两套环境,需要分配两套sga。所以shmall就远远不够了,需要同时修改shmmax,一般建议为内存的90%左右。
调整后参数值如下:
-bash-4.1$ cat /proc/sys/kernel/shmall
33030178
-bash-4.1$ cat /proc/sys/kernel/shmmax
135291609088
然后需要sysctl给激活一下。
再重启数据库就没有问题了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1137256/,如需转载,请注明出处,否则将追究法律责任。