1. 程式人生 > >Oracle啟動報錯:ORA-27154 ORA-27300 ORA-27301 ORA-27302

Oracle啟動報錯:ORA-27154 ORA-27300 ORA-27301 ORA-27302

Oracle啟動報錯:ORA-27154 ORA-27300 ORA-27301 ORA-27302

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

這個錯誤是由核心引數kernel.sem設定錯誤造成,可用sysctl -p檢視當前設定值:

[[email protected] oracle]# /sbin/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
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
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
fs.aio-max-nr = 1048576
kernel.sem = 250  100

kernel.sem引數應有4部分組成:SEMMSL、SEMMNS、SEMOPM、SEMMNI,分別是:
SEMMSL: 每個訊號集的最大訊號數量
資料庫最大 PROCESS 例項引數的設定值再加上 10 。
Oracle 建議將 SEMMSL 的值設定為不少於 100 。
SEMMNS: 用於控制整個 Linux 系統中訊號(而不是訊號集)的最大數。
Oracle 建議將 SEMMNS 設定為:系統中每個資料庫的 PROCESSES 例項引數設定值的總和,加上最大 PROCESSES 值的兩倍,最後根據系統中 Oracle 資料庫的數量,每個加 10 。
使用以下計算式來確定在 Linux 系統中可以分配的訊號的最大數量。它將是以下兩者中較小的一個值:SEMMNS 或 (SEMMSL * SEMMNI)
SEMOPM:

核心引數用於控制每個 semop 系統呼叫可以執行的訊號操作的數量。semop 系統呼叫(函式)提供了利用一個 semop 系統呼叫完成多項訊號操作的功能。一個訊號集能夠擁有每個訊號集中最大數量的SEMMSL 訊號,因此建議設定 SEMOPM 等於SEMMSL 。
Oracle 建議將 SEMOPM 的值設定為不少於 100 。
SEMMNI: 核心引數用於控制整個 Linux 系統中訊號集的最大數量。
Oracle 建議將 SEMMNI 的值設定為不少於 100 。

所以修改正確的設定值後使用sysctl -p命令使新值生效就可以去啟動Oracle了。

[[email protected] oracle]# vi /etc/sysctl.conf
#使用root賬號,vi編輯配置檔案,修改引數值後,使用sysctl-p使生效。
[email protected] oracle]# 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
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
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
fs.aio-max-nr = 1048576
kernel.sem = 250 32000 100 128

切換回Oracle使用者,啟動資料庫順利完成。

[[email protected] oradata]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 29 18:28:59 2018

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size		    1339824 bytes
Variable Size		  620760656 bytes
Database Buffers	  222298112 bytes
Redo Buffers		    5132288 bytes
Database mounted.
Database opened.