The following errors occurred while starting up a 12.2.0.1 Oracle database instance.
SQL> startup ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure occurred at: sskgpcreates
The error “operation:semget failed with status: 28” points out that it could be semaphore resource issue.
Oracle 12.2.0.1 doc recommended minimum value for semaphore are :
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI
SEMMSL - max semaphores per array
SEMMNS - max semaphores system wide
SEMOPM - max ops per semop call
SEMMNI - max number of arrays
semmsl = 250
semmns = 32000
semopm = 100
semmni = 128
Check current system configuration for semaphores:
$ cat /proc/sys/kernel/sem 250 32000 100 200 $ ipcs -ls ------ Semaphore Limits -------- max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 100 max number of arrays = 200 semaphore max value = 32767
We can see SEMMNS is not right. it is supposed to be equal to SEMMSL*SEMMNI =250*200=50000.
If SEMMNS value too small, then we have to increase SEMMNI first, then adjust SEMMNS to SEMMSL*SEMMNI.
Set semaphore kernel parameter dynamically without the need for server reboot:
# sysctl -w kernel.sem="250 50000 100 200" kernel.sem = 250 50000 100 200 -- Put into file cat /etc/sysctl.conf | grep kernel.sem kernel.sem = 250 50000 100 200
Or put into /etc/sysctl.conf file first, then
# sysctl -p
Then verify the current semaphore configurations:
# ipcs -ls ------ Semaphore Limits -------- max number of arrays = 200 max semaphores per array = 250 max semaphores system wide = 50000 max ops per semop call = 100 semaphore max value = 32767
Finally start up instance successfully.
SQL> startup ORACLE instance started. Total System Global Area 4294967296 bytes Fixed Size 8801008 bytes Variable Size 1073743120 bytes Database Buffers 3187671040 bytes Redo Buffers 24752128 bytes Database mounted. Database opened.