首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

RAC 環境 CRS 顯示實例 OFFLINE 但實際運行:Bug 13257122 分析與解決

     編輯:Oracle 教學

RAC 環境 CRS 顯示實例 OFFLINE 但實際運行:Bug 13257122 分析與解決

在 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。實際上並非真實的控制檔損壞,資料庫運作正常。

解決方案

  1. 根治:升級至 11.2.0.4 或 12.1 以上版本 (已修復此 Bug)。
  2. 臨時規避:使用 srvctl 重啟受影響實例,重置 CRS 狀態:
    $ srvctl start instance -d racdb -i racdb1
    
    重啟後 CRS 狀態通常恢復正常顯示 ONLINE。

運維建議

  • 遇到此誤報時,**勿恐慌執行控制檔恢復操作**,先確認實例實際狀態 (gv$instance, alert log 無實際錯誤)。
  • 規劃升級至 11.2.0.4+ 或 19c/21c 長期支援版本,徹底解決此類誤判。
  • 建立監控腳本對比 crsctl 與 gv$instance 狀態,自動偵測不一致並告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved