【ASK_ORACLE】Oracle 12.2 Bug導致網路卡出現故障後RAC庫未向TCP註冊本地VIP監聽
實驗環境
搭建平臺:VMware Workstation
OS:RHEL 7.6
Grid&DB:Oracle 12.2.0.1
問題描述
1. 網路卡NIC發生故障後,發現資料庫註冊不到本地監聽器(監聽使用的VIP):
$ lsnrctl status ##此處省略一部分輸出## Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.xx.xx.165)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.xx.xx.166)(PORT=1521))) The listener supports no services ##沒有服務被註冊
2. 手工強制註冊監聽:
SQL> alter system register;
再次檢查發現任然沒有註冊上
3. 檢查listener相關引數:
SQL> show parameter listener NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ listener_networks string local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST= 192.xx.xx.166)(PORT=1521)) remote_listener string testdb-scan:1521
貌似也沒有什麼問題......
4. 檢查trace日誌跟蹤顯示傳送了正確的註冊資訊,但是監聽器似乎從未接收過服務資訊。
$ vim /oracle/app/oracle/diag/rdbms/testdb/testdb1/trace/testdb1_lreg_3891.trc ##此處省略一部分輸出## Unix process pid: 3891, image: oracle@racdb01 (LREG) ##此處省略一部分輸出## Local listeners: 0 - (ADDRESS=(PROTOCOL=TCP)(HOST=192.xx.xx.166)(PORT=1521)) pdb 1 dci 0 state=2, err=0 nse[0]=0, nse[1]=0, nte[0]=0, nte[1]=0, nte[2]=0 ncre=0 endp=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.xx.xx.166)(PORT=1521))) flg=0x80000000 nse=0 pri=0x101815c75
日誌顯示註冊資訊已經傳送出去了,但是監聽卻收到過服務資訊。
5. 檢查scan的監聽:
$ lsnrctl status listener_scan1
發現scan沒問題,能看見服務註冊上去。
6. 最後再檢查VNCR(Valid Node Checking Registration)設定:
$ lsnrctl show valid_node_checking_registration LSNRCTL for LINUX RISC System/6000: Version 12.2.0.1.0 - Production on 16-AUG-2021 10:25:57 Copyright (c) 1991, 2016, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) LISTENER parameter "valid_node_checking_registration" set to SUBNET ##這裡顯示被設定為SUBNET(一般預設就是這個值)
解決辦法
諮詢了Oracle官方人員,這是一個未公開的 Bug 26739452 引起的,後來我查該Bug編號也確實查不出來。
該Bug與 CRS 自動將 VNCR設定為 SUBNET 值有關,即使在單節點環境中也是如此在這種情況下:當一個節點關閉時,如果沒有子網,資料庫仍在嘗試“SUBNET”安全設定,就會導致LOCAL註冊出現問題。 這個Bug在Oracle 18c修復了。
所以,如果不想升級12c,那麼解決辦法如下:
將LOCAL_LISTENER設定為本地VIP監聽器的IPC地址,不再用TCP地址:
SQL> alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=
IPC)(KEY=LISTENER))' scope=both sid='*';
SQL> alter system register;
注:
1)KEY的值要與 listener.ora 檔案中的KEY的值相同
2) 用於 LOCAL 監聽器註冊的 IPC 地址實際上是首選,因為它更安全(IPC僅是“本地”協議),並且它更快(IPC 不容易發生 TCP 網路流量變化)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2789173/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rac的vip和監聽莫名故障
- 導致 Scan VIP 和 Scan Listener(監聽程式)出現故障的最常見的 5 個問題
- rac監聽動態註冊
- rac監聽不能動態註冊
- Oracle 動態監聽註冊Oracle
- 當心ORACLE 12.2 RAC新特性引入的BUG導致ORA-4031Oracle
- Oracle RAC Database 11.1.0.6監聽故障案例OracleDatabase
- rac 本地監聽問題導致資料斷斷續續連線
- oracle監聽靜態註冊和動態註冊Oracle
- oracle監聽動態註冊與靜態註冊Oracle
- Oracle監聽的靜態註冊和動態註冊Oracle
- Oracle監聽的動態註冊與靜態註冊Oracle
- Oracle 靜態監聽註冊詳解Oracle
- Oracle動態監聽註冊測試Oracle
- oracle監聽動態註冊與靜態註冊[轉帖]Oracle
- ORACLE的歸檔空間滿導致的監聽故障資料庫無法啟動Oracle資料庫
- ORACLE 動態註冊,靜態註冊,多個監聽,一個監聽多個埠配置Oracle
- 【原創】Oracle的動態監聽註冊Oracle
- 監聽動態註冊
- 動態註冊監聽
- 動態監聽註冊
- 網路卡故障導致區域網網路故障原因與解決辦法
- 【監聽】動態註冊和靜態註冊
- oracle監聽器動態註冊於靜態註冊的區別Oracle
- oracle監聽之動態和靜態註冊Oracle
- oracle監聽【非1521埠】動態註冊Oracle
- 動態註冊監聽Listener
- 10g VIP網路卡斷開導致漂移,網路正常後一般如何恢復回去
- oracle 10g rac當監聽程式監聽對方vip時啟動監聽報錯TNS-12545Oracle 10g
- Oracle RAC日常運維-NetworkManager導致叢集故障Oracle運維
- 【ASK_ORACLE】因process用盡導致的rac重啟的解決方法Oracle
- Oracle9i中的監聽動態註冊Oracle
- oracle監聽器的靜態和動態註冊Oracle
- 資料庫監聽不定期出現異常故障處理資料庫
- 由於網路卡故障導致DATAGUARD傳輸檔案失敗
- 【RAC】srvctl管理工具新增新監聽和靜態註冊
- grid監聽故障,本地地址不能連線
- Oracle監聽日誌過大導致的問題Oracle