ASM無法啟動的問題分析(一)

kunlunzhiying發表於2016-12-19

最近碰到了一個關於ASM無法啟動的案例,當然這個案例比較長,準備分兩篇來寫。

問題的背景如下:

目前存在一套standalone的環境,採用了ASM作為儲存管理,業務屬於實時統計,在某一天下班的時候開發的同事突然聯絡我說,資料庫感覺有些問題,因為部分應用開始報錯了,然後他們問我在這段時間做過什麼操作沒有,從我的印象來看下午4點只對部分分割槽做了例行維護,其它什麼都沒調整。問題是在6點開始發現,所以應該沒有什麼關聯。

當然口說無憑,開發的同學也反饋了報錯的資訊。

反饋錯誤資訊1Your database connection has timed out, either due to network problems or due to Oracle reaching the IDLE_TIME profile limit.

反饋錯誤資訊2Request processing failed; nested exception is java.sql.SQLException: No more data to read from socket

所以馬上檢視資料庫連線數,發現只有80多個,排查了profile的情況,沒有發現什麼問題。

這個時候腦海中開始閃現各種可能性,目前發現只有兩種可能,一種是例行維護的操作。另外一種是另外一個毫不相關的機房網路調整。對於例行維護,可以基本斷定出現問題的機率較小,因為是truncate了部分的分割槽,而且分割槽數也不多,應該沒有什麼問題,除非出現了意料之外的bug。而目前的情況是更多傾向於網路層面,因為看開發提供的報錯資訊,似乎出現了網路的問題,所以也協調IT的同學幫忙看看是不是機房調整不小心影響到了另外一個機房的伺服器。

但是反饋的情況還是沒有關聯,所以這個網路的問題似乎是排除了,當然這個確認也花了些時間。而且這個時候我已經在地鐵上了,聯絡同事,他反饋資料庫裡面有一個ORA的錯誤是一個297開頭的錯誤,這個聽起來還是有些陌生,而且同事反饋似乎資料庫是有種hang的感覺,這個時候嘗試shutdown immediate都會卡住,沒有反應。這個時候感覺應該不是簡單的網路問題了,最後為了業務的使用,同事幫忙先做了failover的操作,主庫的這個問題先保留現場,等我回去馬上檢視。

發現這個時候ASM例項是無法啟動的了。

$ sqlplus  / as sysasm

SQL*Plus: Release 11.2.0.3.0 Production on Sat Jan 21 20:34:31 2016

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

Connected to an idle instance.

SQL> startup

ORA-01078: failure in processing system parameters

ORA-29701: unable to connect to Cluster Synchronization Service

資料庫中的錯誤日誌類似下面的形式:

unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 7303

Thu Jan 21 06:58:27 2016

ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 7593

Thu Jan 21 07:00:22 2016

ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 7644

Thu Jan 21 07:00:51 2016

ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 7659

對於這個錯誤,檢查了CSSHAS的服務情況,發現都是Online狀態。

$ crsctl check css

CRS-4529: Cluster Synchronization Services is online

 

$ crsctl check has 

CRS-4638: Oracle High Availability Services is online

這個時候的問題是這臺伺服器也沒有重啟過,出現了這個奇怪的問題。而且上一次重啟ASM是自動啟動的。

檢視服務的情況,發現db的服務顯示是UNKNOWN

$  crs_stat -t 

Name           Type           Target    State     Host       

------------------------------------------------------------

ora.DATA01.dg  ora....up.type ONLINE    ONLINE    rolequery  

ora.FLASH01.dg ora....up.type ONLINE    ONLINE    rolequery  

ora....ER.lsnr ora....er.type ONLINE    ONLINE    rolequery  

ora.asm        ora.asm.type   ONLINE    ONLINE    rolequery  

ora.cssd       ora.cssd.type  ONLINE    ONLINE    rolequery  

ora.testbi.db  ora....se.type ONLINE    UNKNOWN   rolequery  

ora.diskmon    ora....on.type OFFLINE   OFFLINE              

ora.evmd       ora.evm.type   ONLINE    ONLINE    rolequery  

ora.ons        ora.ons.type   OFFLINE   OFFLINE              

ora....rydb.db ora....se.type ONLINE    ONLINE    rolequery

這個時候感覺是CSS的部分出了問題,但是還沒有定位到,使用crs_stat  -p檢視更明細的資訊。

$ crs_stat -p ora.cssd 

NAME=ora.cssd

TYPE=ora.cssd.type

ACTION_SCRIPT=

ACTIVE_PLACEMENT=0

AUTO_START=1

CHECK_INTERVAL=30

DESCRIPTION="Resource type for CSSD"

FAILOVER_DELAY=0

FAILURE_INTERVAL=3

FAILURE_THRESHOLD=5

HOSTING_MEMBERS=

PLACEMENT=balanced

RESTART_ATTEMPTS=5

SCRIPT_TIMEOUT=600

START_TIMEOUT=600

STOP_TIMEOUT=900

UPTIME_THRESHOLD=1m

當然嘗試重啟CSS的服務,停服務是成功了。

$ crsctl start resource ora.cssd 

CRS-5702: Resource 'ora.cssd' is already running on 'rolequery'

CRS-4000: Command Start failed, or completed with errors.   

$ crs_stop ora.testbi.db

Attempting to stop `ora.testbi.db` on member `rolequery`

Stop of `ora.testbi.db` on member `rolequery` succeeded.

但是重啟報錯了,嘗試透過crs_start啟動資料庫例項的服務還是報錯。

$ crs_start ora.testbi.db

Attempting to start `ora.asm` on member `rolequery`

CRS-5017: The resource action "ora.asm start" encountered the following error:

ORA-01078: failure in processing system parameters

ORA-29701: unable to connect to Cluster Synchronization Service

. For details refer to "(:CLSN00107:)" in "/home/U01/app/grid/11.2.3/log/testbi/agent/ohasd/oraagent_grid/oraagent_grid.log".

Start of `ora.asm` on member `rolequery` failed.

Attempting to stop `ora.asm` on member `rolequery`

Stop of `ora.asm` on member `rolequery` succeeded.

CRS-0215: Could not start resource 'ora.testbi.db'.

檢視GI中的日誌如下:

[  clsdmc][1431308032]Fail to connect (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD)) with status 9

2016-01-22 00:11:22.811: [ora.evmd][1431308032] {0:10:5} [start] Error = error 9 encountered when connecting to EVMD

2016-01-22 00:11:23.811: [ora.evmd][1431308032] {0:10:5} [start] without returnbuf

2016-01-22 00:11:23.811: [ COMMCRS][1433937664]clsc_connect: (0x7f251403a630) no listener at (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD))

 

[  clsdmc][1431308032]Fail to connect (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD)) with status 9

2016-01-22 00:11:23.812: [ora.evmd][1431308032] {0:10:5} [start] Error = error 9 encountered when connecting to EVMD

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] DgpAgent::getConnxn check 9

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] ConnectionPool::getConnection 160 ERROR sid +ASM pool status 1

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] ConnectionPool::getConnection 260 pConnxn 00000000

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] DgpAgent::getConnxn connection failure 2

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] DgpAgent::getConnxn failed DgpAgent::getConnxn unable to connect

2016-01-22 00:11:24.741: [ora.DATA01.dg][1450747648] {0:10:3} [check] DgpAgent::getConnxn wait then retry

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] DgpAgent::getConnxn check 9

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] ConnectionPool::getConnection 160 ERROR sid +ASM pool status 1

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] ConnectionPool::getConnection 260 pConnxn 00000000

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] DgpAgent::getConnxn connection failure 2

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] DgpAgent::getConnxn failed DgpAgent::getConnxn unable to connect

2016-01-22 00:11:24.751: [ora.FLASH01.dg][1436038912] {0:10:3} [check] DgpAgent::getConnxn wait then retry

2016-01-22 00:11:24.812: [ora.evmd][1431308032] {0:10:5} [start] without returnbuf

2016-01-22 00:11:24.812: [ COMMCRS][1433937664]clsc_connect: (0x7f251403a630) no listener at (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD))

 

[  clsdmc][1431308032]Fail to connect (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD)) with status 9

2016-01-22 00:11:24.812: [ora.evmd][1431308032] {0:10:5} [start] Error = error 9 encountered when connecting to EVMD

2016-01-22 00:11:25.813: [ora.evmd][1431308032] {0:10:5} [start] without returnbuf

2016-01-22 00:11:25.813: [ COMMCRS][1433937664]clsc_connect: (0x7f251403a630) no listener at (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD))

 

[  clsdmc][1431308032]Fail to connect (ADDRESS=(PROTOCOL=ipc)(KEY=testbiDBG_EVMD)) with status 9

2016-01-22 00:11:25.813: [ora.evmd][1431308032] {0:10:5} [start] Error = error 9 encountered when connecting to EVMD 

這個時候cssd的狀態還是ONLINE,db的狀態是offline.

$ crs_stat -t

Name           Type           Target    State     Host       

------------------------------------------------------------

ora.DATA01.dg  ora....up.type ONLINE    ONLINE    rolequery  

ora.FLASH01.dg ora....up.type ONLINE    ONLINE    rolequery  

ora....ER.lsnr ora....er.type ONLINE    ONLINE    rolequery  

ora.asm        ora.asm.type   ONLINE    OFFLINE              

ora.cssd       ora.cssd.type  ONLINE    ONLINE    rolequery  

ora.testbi.db  ora....se.type ONLINE    OFFLINE              

ora.testbi1.db ora....se.type OFFLINE   OFFLINE              

ora.diskmon    ora....on.type OFFLINE   OFFLINE              

ora.evmd       ora.evm.type   ONLINE    OFFLINE              

ora.ons        ora.ons.type   OFFLINE   OFFLINE              

ora....rydb.db ora....se.type ONLINE    OFFLINE 

 

檢視所有的資源狀態:

$  crsctl stat res -t

--------------------------------------------------------------------------------

NAME           TARGET  STATE        SERVER                   STATE_DETAILS      

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.DATA01.dg

               ONLINE  INTERMEDIATE rolequery                CHECK TIMED OUT    

ora.FLASH01.dg

               ONLINE  INTERMEDIATE rolequery                CHECK TIMED OUT    

ora.LISTENER.lsnr

               ONLINE  ONLINE       rolequery                                   

ora.asm

               ONLINE  OFFLINE      rolequery                Instance Shutdown  

ora.ons

               OFFLINE OFFLINE      rolequery                                   

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.cssd

      1        ONLINE  ONLINE       rolequery                                   

ora.testbi.db

      1        ONLINE  OFFLINE                               Instance Shutdown  

ora.testbi1.db

      1        OFFLINE OFFLINE                               Instance Shutdown  

ora.diskmon

      1        OFFLINE OFFLINE                                                   

ora.evmd

      1        ONLINE  OFFLINE                                                  

ora.rolequerydb.db

ONLINE  OFFLINE   

這個時候感覺問題比較奇怪,常規的配置都沒有發現問題,但是CSS感覺還是出現了問題。

再次檢查。

$ crsctl check has

CRS-4638: Oracle High Availability Services is online

$ crsctl check evm

CRS-4534: Cannot communicate with Event Manager

$ crsctl check css

CRS-4529: Cluster Synchronization Services is online

最後使用kfod檢視一下asm配置層面是否有問題。

$ kfod asm_diskstring='/dev/asm-sda9' disk=all

--------------------------------------------------------------------------------

 Disk          Size Path                                     User     Group  

================================================================================

   1:     153605 Mb /dev/asm-sda9                            grid     asmadmin

KFOD-00301: Unable to contact Cluster Synchronization Services (CSS). Return code 2 from kgxgncin.

所以透過這些我更加堅信的問題就是CSS中的問題,所以後續需要花一些功夫從以這個為出發點來分析這個問題。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2130951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章