开启oracle数据库出现:

ORA-27154: post/wait create failed

ORA-27300: OS system dependent operation:semget failed with status: 28

这是由于/etc/sysctl.conf 中kernel.sem配置更改所致。

    无法获得操作系统的信号量。信号量相当于OS的内存锁,类似于oracle中的latch,每个进程要获取操作系统内存时(不是PGA或SGA),需要先获取到信号量才能申请内存。为了能保证每个进程不被阻塞,所以最好每个进程能分配到2个信号量。由于我们修改了oracle的processes参数,oracle安装建议这个参数一般设置为processes*2+15是比较保险的。检查该参数发现为300多,调整该参数为set semsys:seminfo_semmns=1024,数据库正常启动。

ORA-27301: OS failure message: No space left on device

ORA-27302: failure occurred at: sskgpcreates

诊断:由于processed过大造成信号量不够

解决:

sem其实是semaphores的缩写,查看当前设置

[oracle@ebsse oracle]$ cat /proc/sys/kernel/sem

250 32000 100 128

4个数据分别对应

SEMMSL SEMMNS SEMOPM SEMMNI

如当oracle DB初始化参数文件中PROCESSES参数设置较大时,需要调整SEMAPHORES设置

SEMMSL应该设置为服务器中各个实例中最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。

SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNS参数应为(5010*128)=641280。

SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010

更改当前SEMAPHORES参数设置:

[root@ebsse oracle]# echo "5010 641280 5010 128" > /proc/sys/kernel/sem

--echo "810 103680 810 128" > /proc/sys/kernel/sem

[root@ebsse oracle]# cat /proc/sys/kernel/sem

5010 641280 5010 128

如需启动时自动应用,可在/etc/sysctl.conf增加:

kernel.sem =5010 641280 5010 128

 sysctl -p