1. 程式人生 > >HP-UX平臺Oracle啟動實例遭遇:ORA-27154,ORA-27300,ORA-27301,ORA-27302

HP-UX平臺Oracle啟動實例遭遇:ORA-27154,ORA-27300,ORA-27301,ORA-27302

遭遇 stat 操作 roc bubuko key 分享圖片 IT 期望

環境:HP-UX 11.31 + Oracle 11.2.0.4
現象:在hpux安裝Oracle,按業務需求配置參數後,無法啟動實例。
報錯如下:

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
  • 1.初步定位
  • 2.驗證猜想
  • 3.深入分析

1.初步定位

快速判定這是實例就無法啟動,也就是nomount這一階段就無法成功,首先想到的是參數配置不合理。
經過嘗試,最終發現是processes參數設置過高,導致無法啟動實例,當前期望設置8000,測試調整為7000就可以成功啟動。

去MOS搜索hpux平臺這個錯誤沒有找到結果,但是卻有其他平臺的匹配結果:

  • Database Startup Fails with ORA-27300: OS system dependent operation:semget failed with status: 28 (文檔 ID 949468.1)
  • Instance Startup Fails With Error ORA-27154,ORA-27300,ORA-27301,ORA-27302 (文檔 ID 314179.1)

而這些文檔的原因基本定位在sem相關的內核參數調整上。

2.驗證猜想

找到HPUX關於sem內核參數的當前設置:

kctune -h -B semmni=4096
kctune -h -B semmns=8192
kctune -h -B semmnu=4092
kctune -h -B semvmx=32767

這些都是Oracle官方文檔建議的設置值,但現在看來,目前這些內核參數的設置不能滿足此時用戶業務所要求的processes值。

網上搜索到這些內核參數值的說明:
技術分享圖片
種種跡象都表明和sem參數有關,那麽嘗試將semmni和semmns參數都修改為2倍值,即8192和16384。

kctune -h -B semmni=8192
kctune -h -B semmns=16384

--重啟操作系統生效:
shutdown -ry 0

之後再次將processes設置為8000,已經可以正常啟動實例,問題解決。

3.深入分析

當semmni和semmns參數值是官方文檔默認值時,按業務要求設置process為8000,無法啟動實例。將semmni和semmns參數值都設置為二倍值之後,再測試將process設置為16000時,同樣無法啟動實例。
可以看到的確這個sem信號量和processes有著某種關聯,而且此時啟動到nomount狀態,實際並沒有用戶連接,說明信號量是預先分配的,下面來具體驗證。
以下所有測試都是啟動數據庫到nomount:

3.1 設置processes值為默認值150
此時ipcs觀察到的結果:

Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun  1 16:57:15 2018
T                   ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NSEMS   OTIME    CTIME 
Semaphores:
s                    0 0x4f1c06da --ra-------      root      root      root      root     1 11:44:05 11:44:05
s                    1 0x411c01b6 --ra-ra-ra-      root      root      root      root     1 11:44:07 11:44:05
s                    2 0x4e0c0002 --ra-ra-ra-      root      root      root      root     2 11:44:07 11:44:05
s                    3 0x41203bb5 --ra-ra-ra-      root      root      root      root     2 no-entry 11:44:05
s                    4 0x01090522 --ra-r--r--      root      root      root      root     1 no-entry 11:44:11
s                 8197 0x00a5c581 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8198 0x00a5c582 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8199 0x00a5c583 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8200 0x00a5c584 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8201 0x00a5c585 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8202 0x00a5c586 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8203 0x00a5c587 --ra-------     sfmdb     users     sfmdb     users    17 16:32:32 11:44:13
s                   12 0x4914942f --ra-r--r--      root      root      root      root     1 11:44:32 11:44:32
s                   13 0x410c030b --ra-ra-ra-      root      root      root      root     1 11:44:33 11:44:33
s               196622 0x5c23a1bc --ra-r-----    oracle       dba    oracle       dba   154 no-entry 16:47:46

可以看到NSEMS的數值是154,此時可以滿足150的processes。

3.2 設置processes值為8000
此時ipcs觀察到的結果:

Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun  1 17:00:50 2018
T                   ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NSEMS   OTIME    CTIME 
Semaphores:
s                    0 0x4f1c06da --ra-------      root      root      root      root     1 11:44:05 11:44:05
s                    1 0x411c01b6 --ra-ra-ra-      root      root      root      root     1 11:44:07 11:44:05
s                    2 0x4e0c0002 --ra-ra-ra-      root      root      root      root     2 11:44:07 11:44:05
s                    3 0x41203bb5 --ra-ra-ra-      root      root      root      root     2 no-entry 11:44:05
s                    4 0x01090522 --ra-r--r--      root      root      root      root     1 no-entry 11:44:11
s                 8197 0x00a5c581 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8198 0x00a5c582 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8199 0x00a5c583 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8200 0x00a5c584 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8201 0x00a5c585 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8202 0x00a5c586 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8203 0x00a5c587 --ra-------     sfmdb     users     sfmdb     users    17 16:32:32 11:44:13
s                   12 0x4914942f --ra-r--r--      root      root      root      root     1 11:44:32 11:44:32
s                   13 0x410c030b --ra-ra-ra-      root      root      root      root     1 11:44:33 11:44:33
s               229390 0x5c23a1bc --ra-r-----    oracle       dba    oracle       dba  2001 no-entry 17:00:44
s                49167 0x5c23a1bd --ra-r-----    oracle       dba    oracle       dba  2001 no-entry 17:00:44
s                49168 0x5c23a1be --ra-r-----    oracle       dba    oracle       dba  2001 no-entry 17:00:44
s                49169 0x5c23a1bf --ra-r-----    oracle       dba    oracle       dba  2001 no-entry 17:00:44
s                 8210 0x5c23a1c0 --ra-r-----    oracle       dba    oracle       dba  2001 no-entry 17:00:44

可以看到NSEMS值為2001,一共5組,此時可以滿足8000的processes。

3.3 設置processes值為16000
此時ipcs觀察到的結果:

Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun  1 17:10:22 2018
T                   ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NSEMS   OTIME    CTIME 
Semaphores:
s                    0 0x4f1c06da --ra-------      root      root      root      root     1 11:44:05 11:44:05
s                    1 0x411c01b6 --ra-ra-ra-      root      root      root      root     1 11:44:07 11:44:05
s                    2 0x4e0c0002 --ra-ra-ra-      root      root      root      root     2 11:44:07 11:44:05
s                    3 0x41203bb5 --ra-ra-ra-      root      root      root      root     2 no-entry 11:44:05
s                    4 0x01090522 --ra-r--r--      root      root      root      root     1 no-entry 11:44:11
s                 8197 0x00a5c581 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8198 0x00a5c582 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8199 0x00a5c583 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8200 0x00a5c584 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8201 0x00a5c585 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8202 0x00a5c586 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8203 0x00a5c587 --ra-------     sfmdb     users     sfmdb     users    17 16:32:32 11:44:13
s                   12 0x4914942f --ra-r--r--      root      root      root      root     1 11:44:32 11:44:32
s                   13 0x410c030b --ra-ra-ra-      root      root      root      root     1 11:44:33 11:44:33

可以看到,因為nomount報錯:ORA-27154,ORA-27300,ORA-27301,ORA-27302,實例啟動不成功,所以沒有oracle用戶的任何分配。

3.4 設置processes值為14000
此時ipcs觀察到的結果:

Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun  1 17:11:53 2018
T                   ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NSEMS   OTIME    CTIME 
Semaphores:
s                    0 0x4f1c06da --ra-------      root      root      root      root     1 11:44:05 11:44:05
s                    1 0x411c01b6 --ra-ra-ra-      root      root      root      root     1 11:44:07 11:44:05
s                    2 0x4e0c0002 --ra-ra-ra-      root      root      root      root     2 11:44:07 11:44:05
s                    3 0x41203bb5 --ra-ra-ra-      root      root      root      root     2 no-entry 11:44:05
s                    4 0x01090522 --ra-r--r--      root      root      root      root     1 no-entry 11:44:11
s                 8197 0x00a5c581 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8198 0x00a5c582 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8199 0x00a5c583 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8200 0x00a5c584 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8201 0x00a5c585 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8202 0x00a5c586 --ra-------     sfmdb     users     sfmdb     users    17 11:44:13 11:44:13
s                 8203 0x00a5c587 --ra-------     sfmdb     users     sfmdb     users    17 16:32:32 11:44:13
s                   12 0x4914942f --ra-r--r--      root      root      root      root     1 11:44:32 11:44:32
s                   13 0x410c030b --ra-ra-ra-      root      root      root      root     1 11:44:33 11:44:33
s               294926 0x5c23a1bc --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                65551 0x5c23a1bd --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                65552 0x5c23a1be --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                65553 0x5c23a1bf --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                24594 0x5c23a1c0 --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                 8211 0x5c23a1c1 --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                 8212 0x5c23a1c2 --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                 8213 0x5c23a1c3 --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55
s                   22 0x5c23a1c4 --ra-r-----    oracle       dba    oracle       dba  1750 no-entry 17:10:55

可以看到,NSEMS值為1750,一共9組,此時可以滿足14000的processes。

總結:通過這個案例,可以知道ipcs看的那個信號量和process之間有直接的關聯。咨詢我司專家,這之間還存在某種算法,但從HPUX的實驗來看,並不是都符合推測的算法規則,就不再深究。

HP-UX平臺Oracle啟動實例遭遇:ORA-27154,ORA-27300,ORA-27301,ORA-27302