开启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