一次RAC節點當機的解決過程

StudyCow發表於2009-12-08

1. 情況介紹

海哥反饋大連某院的Oracle 10g RAC平均每個月都要當機一次,一個節點自動重啟,奇怪的是故障的時間沒有規律,有時還發生在基本上沒有業務的凌晨。醫院目前使用的Windows 2003 Server(32 Bit),資料庫版本是10.2.0.3。另外海哥還反映系統還伴有Ora-04031錯誤。

2. 問題的診斷過程。

由於同時出現了down機和ora-04031錯誤,首先判斷是不是由於記憶體耗盡,導致的一個節點down機,之前在32bit系統中遇到過類似錯誤;但由於down機也可能發生在系統壓力很小的凌晨,這一判斷首先被推翻。

向海哥索取了兩個節點的alertSID.log日誌和CRS日誌,開始了分析。

節點1:

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

IPC Send timeout detected. Receiver ospid 5012

Tue Sep 29 06:18:31 2009 --這個時間檢測到2號節點的IPC超時

Errors in file d:oracleproduct10.2.0adminora10bdumpora101_lms3_5012.trc:

Tue Sep 29 06:19:28 2009

Restarting dead background process DIAG  --重啟檢測程式進行檢測

DIAG started with pid=3, OS id=68680

Tue Sep 29 06:20:13 2009

Waiting for clusterware split-brain resolution  --等待“腦裂”方案實施

Tue Sep 29 06:24:26 2009

IPC Send timeout detected. Receiver ospid 4768

Tue Sep 29 06:24:26 2009

Errors in file d:oracleproduct10.2.0adminora10bdumpora101_lmd0_4768.trc:

Tue Sep 29 06:25:29 2009

Restarting dead background process DIAG

DIAG started with pid=3, OS id=71060

Tue Sep 29 06:30:13 2009

Evicting instance 2 from cluster --1號節點將2號節點驅逐出叢集,開始重新配置

Tue Sep 29 06:30:29 2009

Reconfiguration started (old inc 56, new inc 60)

………………省略部分日誌……………………….

Tue Sep 29 07:26:30 2009

Submitted all GCS remote-cache requests

Post SMON to start 1st pass IR

Fix write in gcs resources

Reconfiguration complete --重新配置完成

節點2

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

Tue Sep 29 06:18:30 2009

IPC Send timeout detected.Sender: ospid 2112 --檢測到發生了IPC超時

Receiver: inst 1 binc 86089 ospid 5012

Tue Sep 29 06:18:32 2009

Errors in file d:oracleproduct10.2.0adminora10bdumpora102_lms1_2112.trc:

ORA-27508: 傳送資訊時發生 IPC 錯誤

ORA-27300: OS 系統相關操作: IPCSOCK_Send 失敗, 狀態為: 10055

ORA-27301: OS 故障訊息: 由於系統緩衝區空間不足或佇列已滿,不能執行套接字上的操作。

ORA-27302: 錯誤發生在: send_3

Tue Sep 29 06:18:32 2009

IPC Send timeout to 0.4 inc 56 for msg type 65521 from opid 8

Tue Sep 29 06:18:32 2009

Communications reconfiguration: instance_number 1

Tue Sep 29 06:18:32 2009

Trace dumping is performing id=[cdmp_20090929061832]

Tue Sep 29 06:20:13 2009

Waiting for clusterware split-brain resolution --等待“腦裂”方案實施

Tue Sep 29 06:24:25 2009

IPC Send timeout detected.Sender: ospid 2116

Receiver: inst 1 binc 86087 ospid 4768

Tue Sep 29 06:24:27 2009

Errors in file d:oracleproduct10.2.0adminora10bdumpora102_lmd0_2116.trc: --這裡是具體的IPC錯誤原因

ORA-27508: 傳送資訊時發生 IPC 錯誤

ORA-27300: OS 系統相關操作: IPCSOCK_Send 失敗, 狀態為: 10055

ORA-27301: OS 故障訊息: 由於系統緩衝區空間不足或佇列已滿,不能執行套接字上的操作。

ORA-27302: 錯誤發生在: send_3

Tue Sep 29 06:24:27 2009

IPC Send timeout to 0.0 inc 56 for msg type 65521 from opid 6

Tue Sep 29 06:30:13 2009

Errors in file d:oracleproduct10.2.0adminora10bdumpora102_lmon_4008.trc:

ORA-29740: 已被成員 1 逐出, 組原型 58 --檢測到自已經被節點1驅逐

Tue Sep 29 06:30:13 2009

LMON: terminating instance due to error 29740

Tue Sep 29 06:30:13 2009

Errors in file d:oracleproduct10.2.0adminora10bdumpora102_lms0_4284.trc:

ORA-29740: 已被成員 逐出, 組原型

分析完了日誌,基本可以確定是由於IPC包傳送失敗導致CRS認為心跳失敗,為了避免“腦裂”現象,節點1主動驅逐了節點2;另外的幾次down情況類似。在一個共享儲存的叢集中,當叢集中hearbeat丟失時,如果各節點還是同時對共享儲存去進行操作,那麼在這種情況下所引發的情況是災難的。ORACLE RAC採用投票演算法來解決這個問題,思想是這樣的:每個節點都有一票,考慮有ABC三個節點的叢集情形,當A節點由於各種原因不能與BC節點通訊時,那麼這叢集分成了兩個DOMAIN,A節點成為一個DOMAIN,擁有一票;B,C節點成為一個DOMAIN擁有兩票,那麼這種情況BC節點擁有對叢集的控制權,從而把A節點踢出叢集,對要是通IO FENCING來實現。如果是兩節點叢集,則引入了仲裁磁碟,當兩個節點不能通訊時,請求最先到達仲裁磁碟的節點擁用對叢集的控制權。

在網路正常的情況下,IPC包傳送超時,首先想到是不是遇到了bug Metalink上查了查,發現一個bug與我們的現象吻合。Bug編號為: 6782276,在10.2.0.4中得到了修復。接下來就是按部就班的打補丁了。

[@more@]

Bug 6782276 Win: ORA-27508 from RAC IPC

This note gives a brief overview of bug 6782276.
The content was last updated on: 03-APR-2009
Click
for details of each of the sections below.

Affects:

Product (Component)

Oracle Server (Rdbms)

Range of versions believed to be affected

Versions < 11.2

Versions confirmed as being affected

Platforms affected

  • Windows/NT/XP

Fixed:

This issue is fixed in

Symptoms:

Related To:

  • (None Specified)
  • /

Description

RAC instance on Windows may get failures such as:

ORA-27508: IPC error sending a message

ORA-27300: OS system dependent operation:IPCSOCK_Send failed with status: 10055

ORA-27301: OS failure message: An operation on a socket could not be performed ...

ORA-27302: failure occurred at: send_3

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

相關文章