在一次将SGA从3GB调整到100GB后,重启数据库遇到ORA-27102 out of memory错误:
SQL> startup nomount
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
操作系统版本为64位CentOS 6.5,数据库版本为11.2.0.1.0,物理内存380GB,调整后已配置大页内存。这个错误并不是因为物理内存不足,而是内核参数中配置的共享内存太小导致。
查看内核参数中共享内存的配置,可以直接查看sysctl.conf文件,也可以通过查看/proc/sys/kernel/shmall文件开查看。
[root@oracle01 ~]# cat /proc/sys/kernel/shmall
2097152
[root@oracle01 ~]# cat /etc/sysctl.conf | grep kernel.shmall
kernel.shmall = 2097152
这个值是内存页的个数,不受大页内存的影响,使用的是小内存页,每个页4K,也就是8GB。
SQL> select 2097152*4/1024/1024 as GB from dual;
GB
----------
8
调整这个内核参数值为120G,也就是31457280。
调整这个内核参数值为120G,也就是31457280。
[root@oracle01 ~]# vi /etc/sysctl.conf
--修改以下参数
kernel.shmall = 31457280
修改后使用sysctl –p命令使之生效。
[root@oracle01 ~]# sysctl -p
然后重启数据库,问题即可解决。