1. 程式人生 > >Oracle RAC一節點宕機導致另一節點HANG的問題分析

Oracle RAC一節點宕機導致另一節點HANG的問題分析

        正所謂“福無雙至,禍不單行”,生產上有套2節點Oracle 11.2.0.4資料庫,其中2節點因硬體故障宕機,1節點去HANG住了。我們一起來分析這起故障。

        凌晨4點半,值班同時電話說一套生產庫節點2宕機了,機房的同事看機器正在啟動,估計是硬體原因導致的。心想節點2宕了還有一個節點1在跑,應該問題不大,於是繼續睡覺,離公司近的另一位DBA同事趕往現場支援。可是沒有過多長時間,到現場的DBA反饋資訊:活著的另一節點也出問題了。在宕掉的那個節點2上部署了ogg,由於宕機,自動切換到了節點1,但ogg的複製程序延遲一直的增長,感覺像是一直沒有應用。

        嘗試用sqlplus進入庫結果卻報了ORA-00020超過最大程序數,無法登入資料庫,無法分析資料庫當前的狀況。

image.png

        於是分析哪個應用伺服器連線這套資料庫,是不是由於應用問題造成的。

image.png

        找到連線數最多的那個ip上的應用,與相關業務人員確認,可以封堵其連線資料庫的埠,減少資料庫的外部連線。可是把這個ip禁掉之後,別的ip連線數又漲上來了。開始想到,是不是由於資料庫的問題導致應用處理慢,進而導致連線數過多呢。現在無法登入資料庫也無法進行驗證。

        與業務部門溝通是否可以嘗試kill部分會話,讓DBA可以連線到資料庫後臺,進行一些管理操作,和效能分析。得到業務部分同事的肯定答覆之後,kill了部分LOCAL=NO的會話。以sysdba登入資料庫後臺,執行效能分析語句,剛查完session的等待事件,查第二個sql的時候,sql執行卡住了。從新的視窗登入資料庫依然報ORA-00020。這裡進一步確定了是由於資料庫的效能問題導致了ogg及應用的問題。

        資料庫都HANG住了,如何分析呢?

        想到了以前看別人分享的一個hanganalyze在資料庫HANG住時可以用於分析HANG的原因,於是找到命令ORADEBUG hanganalyze 3。分析trace檔案,看到hang chain如下圖

image.png

        再往下看,SMON程序在等待parallel recovery coord wait for reply,等待時間已經有289min,正是故障出現到hanganalyze的時間,而且他阻塞了1465個session。

image.png

        從trace中看到等待事件為parallel recover coord wait for reply 、gc domain validation。沒見過這個等待事件,於是查詢MOS,關於這兩個等待事件的文件不是很多,找到一篇

image.png

        不知是否觸發了ORACLE的BUG。

        由於時間緊迫,只能選擇把節點1的資料庫例項進行重啟,重啟後資料庫恢復正常。

        事後找大神幫忙分析原因,看SMON程序的trace資訊 image.png

        發現正在做並行恢復,檢視OSW中的SMON程序監控,沒有發現效能問題。 image.png

        檢視到有大量的p00xx的程序,說明是在並行進行恢復,也沒有看出有什麼問題。

image.png

        大神建議使用TFA檢視日誌進行詳細,結果沒有時間分析就給擱置了。

        總結故障就是:節點2宕機,節點1要接管節點2的資料,結果節點1也因為接管HANG住了。