DBを落とさずOSを落とすとORA-27154エラーが出てDBが起動しなくなったときの対処法
Oracle DBのインスタンスを落とさずにOSをshutdownすると
次回OS起動時にDBが上がらなくなった。。
セマフォのカーネルパラメータを増やすと解消できたので、対処法をメモ。
[環境]
DB: Oracle DB 11gR2
OS: CentOS6.3
OSシャットダウン後にDBスタートアップしようとすると以下のORA-27154エラー。
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Fri Jan 24 10:24:50 2014 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle 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: sskgpsemsper
セマフォが解放されていないっぽい。
ググると、以下の方法で対処できるよう。
参考: http://kabusobu.blog.so-net.ne.jp/2010-07-29-2
一時的にカーネルパラメータを変更し、セマフォの数を増やす。
/etc/sysctl.confのkernel.semの値を一時的にデフォルトの100から10000に上げる。
[root@localhost ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf.org [root@localhost ~]# vim /etc/sysctl.conf [root@localhost ~]# diff /etc/sysctl.conf /etc/sysctl.conf.org 47c47 < kernel.sem = 250 10000 --- > kernel.sem = 250 100 [root@localhost ~]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_max = 1048576 kernel.sem = 250 10000
そうすると、以下のようにDBインスタンス起動に成功した。
SQL> startup ORACLE instance started. Total System Global Area 784998400 bytes Fixed Size 2217464 bytes Variable Size 591399432 bytes Database Buffers 188743680 bytes Redo Buffers 2637824 bytes Database mounted. Database opened.
なお、正常起動後は上で追加したセマフォの値を10000 -> 100に戻しても
次回は正常に起動できたので、戻しておく。