由于问题引起信号ORA-27154无法启动数据库
測(cè)試庫(kù)運(yùn)行startup當(dāng)系統(tǒng)提示(11.2.0.1):
查詢ORA-27154的錯(cuò)誤:
| Error: ORA-27154 Text: post/wait create failed --------------------------------------------------------------------------- Cause: internal error, multiple post/wait creates attempted simultaneously Action: check errno and contact Oracle Support |
df查看磁盤空間還有非常多。不存在占滿的情況。
查看報(bào)錯(cuò)中的semget含義:
提示segmet的含義是get a semaphore set identifier,即獲取一個(gè)信號(hào)量集標(biāo)識(shí)符。說(shuō)明此錯(cuò)誤可能和未獲得信號(hào)量有關(guān),No space left on device不是指存儲(chǔ)空間,而是指信號(hào)量資源。
從MOS的介紹看(949468.1),一系列的報(bào)錯(cuò)出現(xiàn)10.1.0.2到11.2.0.2的范圍內(nèi)。給出了演示樣例:
$ ipcs -ls
------ 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
產(chǎn)生的原因是,從原理上看。32000信號(hào)量可用。一個(gè)信號(hào)量標(biāo)識(shí)符能包括最大250個(gè)信號(hào)量。可是ipcs命令展示每一個(gè)信號(hào)量標(biāo)識(shí)符僅能讓Oracle包括最大156個(gè)信號(hào)量。
$ ipcs << 這個(gè)演示樣例中沒(méi)有啟動(dòng)額外實(shí)例的前提下,大約包括100個(gè)信號(hào)量字符集
..
------ Semaphore Arrays --------
key semid owner perms nsems
0x450e15bd 0 root 666 1
0x0000cace 32769 root 666 1
0x358b172c 327683 oracle 660 104
0x9053d038 11075588 oracle 660 156
0x9053d039 11108357 oracle 660 156
0x9053d03a 11141126 oracle 660 156
0x9053d03b 11173895 oracle 660 156
..
那么可用的最大信號(hào)量就是156*128=19968。不是32000。
解決方法添加可包括的信號(hào)量,這里依據(jù)SEMMNI參數(shù)來(lái)調(diào)整設(shè)置。
1. 查詢當(dāng)前kernel的信號(hào)量參數(shù)值。
# /sbin/sysctl -a | grep sem
2. 改動(dòng)/etc/sysctl.conf文件的SEMMNI參數(shù)。
從kernel.sem = 250 32000 100 128改動(dòng)為kernel.sem = 250 32000 100 200
3. 使用# /sbin/sysctl -p讓改動(dòng)生效。
結(jié)合到我這里的情況。首先查看ipcs的結(jié)果:
數(shù)據(jù)庫(kù)啟動(dòng)后。須要從操作系統(tǒng)上分配共享內(nèi)存和信號(hào)量。信號(hào)量就相當(dāng)于OS的內(nèi)存鎖,類似于Oracle的latch(注意Oracle的鎖和latch的差別)。每一個(gè)進(jìn)程須要獲取操作系統(tǒng)內(nèi)存時(shí),須要先獲得信號(hào)量才干申請(qǐng)內(nèi)存。
從上述指令能夠看到最大可用的信號(hào)量是100。信號(hào)量標(biāo)識(shí)符集最大是128,呃,這里失誤,當(dāng)時(shí)沒(méi)有查看到ipcs實(shí)際的信號(hào)量標(biāo)識(shí)符集。
這里4個(gè)參數(shù)的含義:
The maximum number of sempahores that can be in one semaphore set. It should be same size as maximum number of Oracle processes. 一個(gè)信號(hào)量集中同意的最大信號(hào)量數(shù)。須要和Oracle的process個(gè)數(shù)同樣。
SEMMNS????????100 ??????? Defines the maximum semaphores on the system.
This setting is a minimum recommended value, for initial installation only. The SEMMNS parameter should be set to the sum of the PROCESSES parameterfor each Oracle database, adding the largest one twice, and then adding an additional 10 for each database.
系統(tǒng)同意的最大信號(hào)量數(shù)。SEMMNS參數(shù)應(yīng)設(shè)置為最大的PROCESSES值,再加上額外的10,算出來(lái)的總和。(注意這里說(shuō)明該值是最小的建議值)
SEMOPM????????32????????? Defines the maximum number of operations for each semop call
每次信號(hào)量調(diào)用的最大操作數(shù)。
SEMMNI????????128 ??????? Defines the maximum number of semaphore sets in the entire system
系統(tǒng)中信號(hào)量集的最大值。
能夠猜測(cè)SEMMNS=SEMMSL * SEMMNI。
但上述演示樣例中:100<>100 * 128。SEMMNS最大同意的信號(hào)量(建議最小值)僅僅有100。顯然不能滿足計(jì)算結(jié)果的數(shù)量。并且從Oracle官方文檔看到的對(duì)于這幾個(gè)參數(shù)的推薦值:
Configuring Kernel Parameters
Verify that the kernel parameters shown in the following table are set to values greater than or equal to the recommended value shown. The procedure following the table describes how to verify and set the values.
| semmsl semmns semopm semmni | 250 32000 100 128 | /proc/sys/kernel/sem |
進(jìn)而能夠判斷報(bào)錯(cuò)提示的sskgpcreates可能和process數(shù)量有關(guān),kernel中和該值有關(guān)的參數(shù)是SEMMNS,和上述猜測(cè)的結(jié)論同樣。即PROCESS過(guò)多,但同意的最大信號(hào)量過(guò)少。兩者不匹配,導(dǎo)致No space left on device提示信號(hào)量資源不足。
解決方法如MOS指點(diǎn)的。改動(dòng)信號(hào)量參數(shù)值,能夠用:
這樣的方式僅僅是暫時(shí)改動(dòng),機(jī)器重新啟動(dòng)后失效。若須要持久生效,能夠改動(dòng)/etc/sysctl.conf相應(yīng)的參數(shù)值。
總結(jié):
1. 錯(cuò)誤提示No space left on device未必表示存儲(chǔ)空間不足,本例中就是指的信號(hào)量資源。
2. kernel.sem中四個(gè)參數(shù)的含義,以及SEMMNS(同意的最大信號(hào)量)=SEMMSL(一個(gè)信號(hào)量集同意包括的信號(hào)量) * SEMMNI(系統(tǒng)同意包括的最大信號(hào)量集)的計(jì)算關(guān)系。還有就是SEMMNS定義的是Defines the maximum semaphores on the system. This setting is a minimum recommended value,for initial installation only. 即同意的最大信號(hào)量,但這個(gè)值是用于初始安裝的最小推薦值。
3. 借助baidu或google甚至MOS查找問(wèn)題,可能找到解決方式,但更重要的是可以知道原因。進(jìn)而了解問(wèn)題出現(xiàn)的場(chǎng)景。結(jié)合自己的問(wèn)題。確定是同一類之后,再運(yùn)行操作,一句話:要慎重。
版權(quán)聲明:本文博主原創(chuàng)文章。博客,未經(jīng)同意不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/4851619.html
總結(jié)
以上是生活随笔為你收集整理的由于问题引起信号ORA-27154无法启动数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android代码集EditText只要
- 下一篇: jquery同步请求