在 Oracle RAC 11.2.0.2~11.2.0.3 環境中,常遇到 crsctl stat res 顯示資料庫實例狀態為 OFFLINE 且附帶 Corrupted Controlfile 訊息,但實際上該實例正常運行 (OPEN 狀態) 的情況。此為已知 Bug 13257122 導致的誤報。
$ crsctl stat res ora.racdb.db -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
ora.racdb.db
1 OFFLINE OFFLINE rachost1 Corrupted Controlfile <-- 誤報
2 ONLINE ONLINE rachost2 Open
3 ONLINE ONLINE rachost3 Open
$ srvctl status database -d racdb
Instance racdb1 is not running on node rachost1 <-- CRS 誤判
Instance racdb2 is running on node rachost2
Instance racdb3 is running on node rachost3
SQL> select instance_name, status from gv$instance;
INSTANCE_NAME STATUS
------------- ------
racdb1 OPEN <-- 實際正常
racdb2 OPEN
racdb3 OPEN
Alert Log 可能記錄控制檔讀取錯誤,但實際上控制檔完好無損。
Bug 13257122:CRSD Agent 在固定表查詢過程中發生並發控制檔寫入導致的讀取錯誤,誤判為控制檔損壞 (Corrupted Controlfile),進而將實例標記為 OFFLINE。實際上並非真實的控制檔損壞,資料庫運作正常。
srvctl 重啟受影響實例,重置 CRS 狀態:
$ srvctl start instance -d racdb -i racdb1
重啟後 CRS 狀態通常恢復正常顯示 ONLINE。gv$instance, alert log 無實際錯誤)。crsctl 與 gv$instance 狀態,自動偵測不一致並告警。