服务器增加内存后无法重启数据库的问题及解决 (36天)

时间:2022-05-04
本文章向大家介绍服务器增加内存后无法重启数据库的问题及解决 (36天),主要内容包括CAUSE、SOLUTION、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

前几天生产环境需要做服务器的扩容,把原本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给激活一下。 再重启数据库就没有问题了。