【RAC】儲存陣列電源故障導致RAC資料庫異常掛起

secooler發表於2011-03-29
將曾經經歷過的一起RAC故障總結在此,希望引起大家的思考和總結。

1.故障現象
故障現象非常的明顯,無論使用何種手段均無法啟動RAC對應的服務。

在嘗試啟動資料庫例項的過程中alert記錄瞭如下資訊。
Wed Feb  9 09:32:33 2011
This instance was first to mount
Wed Feb  9 09:32:33 2011
ORA-00202: control file: '+ORADATA/racdb/controlfile/current.256.668238016'
ORA-17503: ksfdopn:2 Failed to open file +ORADATA/racdb/controlfile/current.256.668238016
ORA-15001: diskgroup "ORADATA" does not exist or is not mounted
ORA-15077: could not locate ASM instance serving a required diskgroup
ORA-205 signalled during: ALTER DATABASE   MOUNT...
Wed Feb  9 09:35:13 2011
Reconfiguration started (old inc 2, new inc 4)
List of nodes:
 0 1
 Global Resource Directory frozen
 Communication channels reestablished
 Master broadcasted resource hash value bitmaps
 Non-local Process blocks cleaned out

這裡提示磁碟組ORADATA未掛載成功,無法開啟對應的控制檔案。

2.故障分析
單純從alert日誌之中進行分析,很難直接定位是由於儲存陣列的故障引發的這次資料庫問題。
進一步追溯故障的根源。

1)檢視裸裝置的配置檔案
cat /etc/udev/rules.d/60-raw.rules
# block devices with O_DIRECT.
#
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="/dev/sda1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="/dev/sdb1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", KERNEL=="/dev/sdc1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="33", RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", KERNEL=="/dev/sdd1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="49", RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add", KERNEL=="/dev/sdc2", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="34", RUN+="/bin/raw /dev/raw/raw5 %M %m"
KERNEL=="raw1", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw2", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw3", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw4", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw5", WNER="oracle", GROUP="oinstall", MODE="0600"

2)檢視作業系統中與之對應的裝置資訊
racdb1@racdb1 /dev$ ls -l | grep sd
brw-r-----  1 root disk   8,     0 2011-02-09 sda
brw-r-----  1 root disk   8,     1 02-09 09:26 sda1
brw-r-----  1 root disk   8,     2 02-09 09:26 sda2
brw-r-----  1 root disk   8,    16 2011-02-09 sdb
brw-r-----  1 root disk   8,    17 02-09 09:26 sdb1
brw-r-----  1 root disk   8,    18 02-09 09:26 sdb2
brw-r-----  1 root disk   8,    32 2011-02-09 sdc
brw-r-----  1 root disk   8,    33 02-09 09:26 sdc1
brw-r-----  1 root disk   8,    34 02-09 09:26 sdc2

故障的根本原因浮出水面,此時系統中並未識別到sdd相關裝置!

這裡的sdd相關裝置便是磁碟組ORADATA需要的資源!

3)檢視RAC所需磁碟資訊
[root@racdb2 dev]# /etc/init.d/oracleasm listdisks
[root@racdb2 dev]#

返回結果為空,表明無可用儲存。

3.故障處理
既然定位了故障出處,處理起來也便有的放矢。
最終確認了是由於儲存陣列的電源故障引發的此次問題。

恢復故障後再次檢查裝置資訊
racdb1@racdb1 /dev$ ls -l | grep sd
brw-r-----  1 root disk   8,     0 2011-02-09 sda
brw-r-----  1 root disk   8,     1 02-09 11:22 sda1
brw-r-----  1 root disk   8,     2 02-09 11:22 sda2
brw-r-----  1 root disk   8,    16 2011-02-09 sdb
brw-r-----  1 root disk   8,    17 02-09 11:22 sdb1
brw-r-----  1 root disk   8,    18 02-09 11:22 sdb2
brw-r-----  1 root disk   8,    32 2011-02-09 sdc
brw-r-----  1 root disk   8,    33 02-09 11:22 sdc1
brw-r-----  1 root disk   8,    34 02-09 11:22 sdc2
brw-r-----  1 root disk   8,    48 2011-02-09 sdd
brw-r-----  1 root disk   8,    49 02-09 11:22 sdd1
brw-r-----  1 root disk   8,    64 2011-02-09 sde
brw-r-----  1 root disk   8,    65 02-09 11:22 sde1
brw-r-----  1 root disk   8,    66 02-09 11:22 sde2
brw-r-----  1 root disk   8,    67 02-09 11:22 sde3

可見,儲存上的裝置已一一被識別。

racdb1@racdb1 /dev/raw$ ls -tlr
crw------- 1 oracle oinstall 162, 3 02-09 11:22 raw3
crw------- 1 oracle oinstall 162, 5 02-09 11:22 raw5
crw------- 1 oracle oinstall 162, 1 02-09 11:31 raw1
crw------- 1 oracle oinstall 162, 4 02-09 11:31 raw4
crw------- 1 oracle oinstall 162, 2 02-09 11:31 raw2

故障得到比較圓滿的處理。

4.小結
RAC技術可以說是Oracle在高可用上的佳作和絕技,但是對於RAC的維護需要格外的細心,稍有不慎便會在細枝末節上出現紕漏,後果很嚴重!
謹以此文提醒RAC DBA朋友們:定期全面的健康檢查不是例行公事,而是保障資料庫高效穩定執行的前提!

Good luck.

secooler
11.03.29

-- The End --

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

相關文章