儲存壞道造成資料庫hang住

yezhibin發表於2009-12-02
 一、現象描述: 

      在測試環境HP-UX 11.2平臺上oracle 10.2.0.4,突然資料庫hang住,使用SQLPLUS登入,登入介面hang住,沒有顯示任何出錯資訊,無法訪問bdump下目錄,使得不能讀取alert.log日誌檔案。

 二、分析:

       1、最先懷疑是作業系統問題,機器重啟後,問題依然存在

       2、檢視系統日誌,出現如下錯誤
             vmunix: SCSI: Write error -- dev: b 31 0x1b6300, errno: 126, resid: 8192
   
       3、使用exportvg和importvg後發現,原先的用於資料庫資料檔案的邏輯卷全部變成了lvol??的卷組名。

       4、初步診斷是EMC DMX800儲存盤出問題,反饋廠家檢查,發現同一個RAID5磁碟組中的兩個磁碟出現了壞道。

      5、需要對資料庫重新進行遷移到新的磁碟。

 三、資料庫遷移
 
      1、mount 檔案系統(包含udump等目錄)出現如下錯誤
     
          $ mount /dev/xxxxx/lvol1 /home/xxxx
             system error "UX:vxfs mount: ERROR: V-3-21268: /dev/xxxxx/lvol1 is 
                                      corrupted. needs checking"
    
       2、修復該檔案系統
        
         $fsck -F vxfs -o full, nolog /dev/xxxxxx/lvol1
         $mount /dev/xxxxx/lvol1 /home/xxxx

       3、因為lv的卷名已發生了變化,需要通過strings命令檢視lv資訊,確認邏輯卷是否可讀,並定位該邏輯卷名可能屬於的資料庫表空間

       4、先恢復控制檔案,匯出控制檔案資訊,讀取控制檔案中資料檔案資訊
          SQL>alter database backup controlfile to trace

       5、將每個資料檔案中的邏輯卷硬dd命令拷貝到新的磁碟中所建立的lv
         dd  if=/dev/xxxx/rlvolxx  f=/dev/xxx/rnewxxlv bs=4k

       6、dd完成後,重新按照控制檔案中資料檔案所指定的目錄進行ln -s命令操作

       7、重新開啟資料庫成功

四、其他

 在檢視alert.log檔案中發現資料庫損壞前出現如下錯誤:
 ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1,
                        osid 7789'
該問題解決可參看metelink 779552.1
從文件中知道與 Bug 7692631和Bug 7914003相關,解決辦法如下:

1、If you want to avoid the kill of the blocker (background or 
   non-background process) you can set
   _kill_controlfile_enqueue_blocker=false.

2、In order to prevent a background blocker from being killed, you can
   set the following init.ora parameter to 1 (default is 3).
   _kill_enqueue_blocker=1


        
       

 

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

相關文章