1. 程式人生 > >資料庫啟動報錯ORA-27154,27300,27301,27302

資料庫啟動報錯ORA-27154,27300,27301,27302

今天因為oracle 連結數設定的是150 ,報錯超過最大porcess限額了。
所以修改了:

alter system set processes=300 scope=spfile;

然後重啟資料庫,好了,開始報錯:

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

磁碟空間是充足的,報錯最後一行 sskgp。因為資料庫設定的process超過了root設定的系統平臺引數。

/sbin/sysctl -a |grep sem

看到系統的核心訊號量引數設定(預設配置)
kernel.sem = 250 32000 100 128
從左到右分別為SEMMSL、SEMMNS、SEMOPM和SEMMNI。
1)SEMMSL:設定每個訊號燈組中訊號燈最大數量,推薦的最小值是250。
對於系統中存在大量併發連線的系統,推薦將這個值設定為 PROCESSES初始化引數加10。

2)SEMMNS:設定系統中訊號燈的最大數量。作業系統在分配訊號燈時不會超過LEAST(SEMMNS,SEMMSL*SEMMNI)。事實上,如果SEMMNS的值超過了SEMMSL*SEMMNI是非法的,因此推薦SEMMNS的值就設定為SEMMSL*SEMMNI。Oracle推薦SEMMNS的設定不小於32000,假如資料庫的PROCESSES引數設定為600,則SEMMNS的設定應為:

SQL> select (250+10)*128 from dual;
(250+10)*142
33280

3)SEMOPM:設定每次系統呼叫可以同時執行的最大訊號燈操作的數量。
由於一個訊號燈組最多擁有SEMMSL個訊號燈,因此有推薦將SEMOPM設定為SEMMSL的值。
Oracle驗證的10.2和11.1的SEMOPM的配置為100。

4)SEMMNI:設定系統中訊號燈組的最大數量。Oracle10g和11g的推薦值為142。

開始修改:

vi /etc/sysctl.cnf
kernel.sem= 310 46020 100 142
/sbin/sysctl -p

然後重啟資料庫,正常。