Sunday, December 20, 2009

Resolving ORA-7279 or ORA-27146 errors when starting instance

Problem Description

When attempting to start an instance, you receive the following error:

  ORA-7279: spcre: semget error, unable to get first semaphore set

This error may possibly be accompanied by one or more of the following additional errors:

  ORA-600: internal error code, arguments [SKGMBUSY]
  SVR4 error: 28: no space left on device



If you are using version 8.1.5 or 8.1.6, you receive the following error instead of the ora-7279 when attempting to start an instance:

  ORA-27146: post/wait initialization failed

With 8.1.7, instance startup fails with ora-3113.

These errors happen whenever attempting to start an instance, which includes, but is not limited to, creating a new database during an install, creating a new database with an existing install, starting an existing database which had the initSID.ora parameter PROCESSES changed, or starting an existing database which was either shutdown incorrectly or crashed.

Solution Description

The problem is that there are not enough semaphores to start the instance.

This can be resolved based on one of the two scenarios below:

Scenario 1

If no new instances have been created and you are trying to start an   existing database which was shutdown incorrectly or crashed, the semaphores from the crashed instance may still be allocated and will need to be removed.

Step 1) Before removing semaphores, you should be certain that there are no running instances using them.  First check for running instances using the following command:

            % ps -ef | grep -v grep | grep pmon

          If there are no pmon processes running, then there should be no semaphores owned by the oracle user, and any semaphores owned by the oracle user can safely be removed.  See steps 3 and 4 for the commands to list and remove semaphores.

  Step 2) If you have multiple instances running, you will need to either shut them down or determine which semaphores are being used by each instance.  It is recommended that you shut down all of the instances, but if this is not possible, then follow the instructions below.

          A) If the running instances are version 8.1.x or higher, set your environment to that of the running instance, then run the following command:

               % $ORACLE_HOME/bin/sysresv

             This will show you the semaphore ids being used by this instance.
             Make a note of them and repeat the sysresv command for each running instance.

          B) If you are not running version 8.1.x or higher, use the following commands to get a listing of semaphores:

               % svrmgrl
svrmgr> connect internal
svrmgr> oradebug ipc

             Repeat these commands for each running instance making note of the "Semaphore identifiers" for each.

  Step 3) Now get a list of all of the allocated semaphores on the system using the following command:

            % ipcs -sb | grep -v grep | grep

          where is the name of the oracle user.

          Compare the ouput of the ipcs command with the notes you made from the sysresv command or oradebug ipc command , and remove any semaphores that do not belong to a running instance.

  Step 4) You can remove semaphores using the following command:

            % ipcrm -s

          where is the semaphore id shown in the second column of the ipcs ouput titled ID.

  Step 5) Now try to start your instance again.


Scenario 2

You are trying to start a new instance, or an existing instance that had the   initSID.ora parameter PROCESSES changed.  You will need to raise the kernel parameter SEMMNS.

Set the kernel parameter SEMMNS to double the sum of all of the initSID.ora PROCESSES parameters on the system.

For example, if you have 5 instances with the initSID.ora PROCESSES parameter set to 25, 50, 100, 200, and 250, then set the kernel parameter SEMMNS equal to 1250.

    ((25 + 50 + 100 + 200 + 250) * 2) = 1250

After making changes to the kernel parameter SEMMNS, you will be required to reboot the system. Depending on your operating system, you may also be required to rebuild the kernel.  For more information on changing kernel parameters, please consult your OS documentation and/or your OS vendor.

Explanation

When an Oracle instance is started, oracle will attempt to allocate all of the needed semaphores. If it is unable to do so, it will generate either an ora-7279 or ora-27146 error and will fail to start the instance.


References

Note 15566.1

No comments: