RAC環境中修改系統時間可能導致SRVCTL命令失敗

yangtingkun發表於2007-07-13

測試環境中netbackup的測試license到期了,為了能繼續測試,將RAC環境的兩個節點的資料庫伺服器系統時間向前調整了兩個月。

這次時間的調整,並沒有導致RAC環境的重啟,不過卻造成了SRVCTL命令的錯誤。


時間調整後,資料庫工作正常,這倒是很出乎意料。在有些環境中,調整時間超過幾秒種,就可能造成RAC環境中的一個節點重啟。

不過雖然節點沒有重啟,但是資料庫還是處於不正常的工作狀態,隨後試圖透過srvctl命令關閉資料庫時發現:

$ srvctl stop db -d testrac
PRKP-1002 : Error stopping instance testrac1 on node racnode1
CRS-0216: ???????????? 'ora.testrac.testrac1.inst'??
PRKP-1002 : Error stopping instance testrac2 on node racnode2
CRS-0216: ???????????? 'ora.testrac.testrac2.inst'??

再次執行上面的命令,沒有報錯,不過資料庫並沒有被關閉。

嘗試用sqlplus直接關閉兩個例項,沒有發現任何問題。

嘗試用srvctl開啟資料庫:

$ srvctl start db -d testrac
PRKP-1001 : Error starting instance testrac1 on node racnode1
CRS-0215: ???????????? 'ora.testrac.testrac1.inst'??
PRKP-1001 : Error starting instance testrac2 on node racnode2
CRS-0215: ???????????? 'ora.testrac.testrac2.inst'??

檢查rac環境的日誌:

2007-05-11 18:34:48.065: [ CRSRES][115097] `ora.testrac.testrac2.inst` is already OFFLINE.
2007-05-11 18:38:59.153: [ CRSRES][115106] startRunnable: setting CLI values
2007-05-11 18:38:59.189: [ CRSRES][115106] Attempting to start `ora.testrac.testrac2.inst` on member `racnode2`
2007-05-11 18:39:00.750: [ OCRSRV][26]th_select_handler: Failed to retrieve procctx from ht. constr = [27904800] retval lht [-27] Signal CV.
2007-05-11 18:39:00.798: [ OCRSRV][26]th_select_handler: Failed to retrieve procctx from ht. constr = [27078112] retval lht [-27] Signal CV.
2007-05-11 18:39:00.899: [ CRSRES][115107] Attempting to start `ora.testrac.testrac1.inst` on member `racnode1`
2007-05-11 18:39:01.938: [ OCRSRV][26]th_select_handler: Failed to retrieve procctx from ht. constr = [27077936] retval lht [-27] Signal CV.
2007-05-11 18:39:23.006: [ OCRSRV][26]th_select_handler: Failed to retrieve procctx from ht. constr = [31377760] retval lht [-27] Signal CV.
2007-05-11 18:44:43.156: [ CRSRES][115155] Attempting to start `ora.testrac.db` on member `racnode1`
2007-05-11 18:44:43.955: [ CRSRES][115155] Start of `ora.testrac.db` on member `racnode1` succeeded.
2007-05-11 18:49:29.680: [ CRSEVT][115106] CAAMonitorHandler :: 0:Action Script /data/oracle/product/10.2/database/bin/racgwrap(start) timed out for ora.testrac.testrac2.inst! (timeout=600)
2007-05-11 18:49:29.681: [ CRSAPP][115106] StartResource error for ora.testrac.testrac2.inst error code = -2
2007-05-11 18:59:59.881: [ CRSEVT][115106] CAAMonitorHandler :: 0:Action Script /data/oracle/product/10.2/database/bin/racgwrap(stop) timed out for ora.testrac.testrac2.inst! (timeout=600)
2007-05-11 18:59:59.882: [ CRSAPP][115106] StopResource error for ora.testrac.testrac2.inst error code = -2
2007-05-11 18:59:59.933: [ CRSRES][115106] X_OP_StopResourceFailed : Stop Resource failed
(File: rti.cpp, line: 1698

發現Oracle在執行racgwrap命令的時候出現了timeout的錯誤。透過ps –ef檢查,發現大量/data/oracle/product/10.2/database/bin/racgmain stop的僵死程式。

嘗試以root執行/etc/init.d/init.crs stop,發現並沒有結束上面的僵死程式,執行/etc/init.d/init.crs start也無法啟動rac環境。

最後將整個作業系統重啟後,問題得以解決。

$ srvctl stop db -d testrac
$ srvctl start db -d testrac

對於產品系統而言,調整時間一定要謹慎,尤其對於RAC環境,即使當時沒有造成節點的重啟,也可能導致系統處於不正常的狀態中。

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

相關文章