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

In this solution let us see how to increase the value of the semaphore in Linux for increasing the processes while we try to start the Oracle multi-instances. It will come under the tuning and optimizing category of Oracle databases.

When this issue occurred?

After creating a new database on an existing production database server. This guide will help to resolve the semaphore issue or if you are looking for

How to Change Kernel Semaphore Limits in RHEL and CentOS Linux Servers?

Solution for following Errors

This is the actual error we are getting while trying to bring up the newly created database.

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

Check current Value

The current value can be checked in two ways or more ways.

[root@gateway ~]# sysctl -a | grep -i "kernel.sem"
kernel.sem = 32000	1024000000	500	32000
kernel.sem_next_id = -1
[root@gateway ~]#

Are cat the /proc filesystem

[root@gateway ~]# cat /proc/sys/kernel/sem
 32000    1024000000  500 32000
[root@gateway ~]#

Else we can use the ipcs command to list the same.

[root@gateway ~]# ipcs -l

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509481980
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767

[root@gateway ~]# 

Making temporary changes

We can make some changes without adding into sysctl.conf. It can be done by, enable writing a value to variable.

# echo 250 32000 100 428 > /proc/sys/kernel/sem 
# sysctl -w kernel.sem="250 32000 100 428"

Making Permanent Changes

To change the value of the semaphore we can perform by editing the below file.

# vi /etc/sysctl.conf
kernel.sem = 250 32000 100 428

semaphores Value has been configured to take effect we need to run

# sysctl -p

That’s it we can now start the Oracle Database instances by avoiding above error.