關於oracle11g RAC 監聽器使用中出現的no services以及no listener分析
首先,我們必須知道在oracle11g中,官方推薦GI和oracle 資料庫軟體分開管理,在這種情況下,我們會發現資料庫監聽器其實是位於GI的管理賬號下,即通常我們所建立的grid賬號。在該grid賬號的$ORACLE_HOME/network/admin目錄下我們會發現我們的listener.ORA檔案。同時監聽器的啟動與關閉都是由該grid賬號來控制,若使用oracle賬號此時就會發現報錯如下:
TNS-01190: The user is not authorized to execute the requested listener command
當然我們仍然可以透過oracle賬號用netca命令建立監聽器,此時的監聽器位於oracle賬號的$ORACLE_HOME/network/admin目錄下。
此外,預設情況下我們的tnsnames.ora檔案仍然存在於oracle賬號下的相關位置。
下面我們就監聽器的具體配置分析下:
首先我們必須清楚地明白在RAC環境下都有哪些例項,各個例項是否都需要監聽呢,針對該問題我們測試一把:
[grid@RAC01 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 03-JAN-2014 08:33:35
…………………………
Copyright (c) 1991, 2009, Oracle. All rights reserved.
………………
Listener Parameter File /u/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /u/app/grid/diag/tnslsnr/RAC01/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.134.30.27)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.134.30.47)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM2", status READY, has 1 handler(s) for this service...
The command completed successfully
觀察我們的監聽器狀態,此時可以發現只有ASM例項的監聽服務,但是資料庫例項的監聽去哪兒呢?關於該問題我的推薦關注兩個引數:local_listener、remote_listener。我們再次只需要引數local_listener就ok了。
其實上面所說的no listener、no services都是與該引數有關的。我們看看現在伺服器上該引數的配置:
首先觀察的是ASM例項:
SQL> show parameter local_l
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
local_listener string
(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=RAC0
1-vip)(PORT=1521))))
SQL> select instance_name,status from v$instance;
INSTANCE_N STATUS
---------- ------------------------------------
+ASM2 STARTED
可以看到asm例項的local_listener引數實際上使用的是vip。
再看看我們的資料庫例項:
SQL> show parameter local_li
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string (DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=RACS
CAN.localdomain.)(PORT=1521)))
)
SQL> select instance_name,status from v$instance;
INSTANCE_N STATUS
---------- ------------
RACDB2 OPEN
我們觀察到資料庫例項使用的是scan-ip。
那是不是就是應為使用的ip情況的不同,listener監聽器中的監聽服務不同呢?
我們來測試一把:
此處我們只測試asm例項的引數local_listener即可,其他服務的雷同。
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=RACSCAN.localdomain.)(PORT=1521))))';
System altered.
SQL> host lsnrctl status
Listener Parameter File /u/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /u/app/grid/diag/tnslsnr/RAC01/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.134.30.27)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.134.30.47)(PORT=1521)))
The listener supports no services
The command completed successfully
我們觀察到監聽還是那個監聽,但是服務卻不是那個服務了,此時no services了。
此時我們在透過tnsnames.ora檔案的配置從客戶端登陸資料庫時就會出現如下錯誤:
ORA-12520: TNS:listener could not find available handler for requested type of
server
Enter user-name:
無論是vip還是透過scan-ip都是不行的。從此處我們可以得出結論:ASM例項的監聽地址必須是VIP而不能是scan-ip。否側會出現上述報錯。
將ASM例項的監聽器修改回來。
alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL= TCP)(HOST=RAC01-vip)(PORT=1521))))';
那麼資料庫例項應該使用那個型別的ip呢,是scan-ip還是vip呢,其實這兩個ip都行,就看你怎麼用了。如果local_listener引數配置為指向vip,此時客戶端只能透過vip訪問資料庫,如果local_listener引數配置為scan-ip此時客戶端必須透過scan-ip訪問,否則登陸同樣報錯如下:
ORA-12520: TNS:listener could not find available handler for requested type of
server
Enter user-name:
總結:
在oracle11g RAC環境中,監聽器是由grid賬號來維護的,此外ASM例項使用的一定是vip,資料庫例項vip、scan-ip均可使用。如果資料庫引數local_listener配置了vip,此時客戶端只能透過vip訪問資料庫,如果資料庫引數local_listener引數設定為scan-ip此時客戶端只能透過scan-ip訪問資料庫。建議使用scan-ip,這樣資料庫在增刪節點的時候就不會影響到客戶端的使用,客戶端也無需也節點的變化而修改配置。Oracle官方建議在使用scan-ip時最少配置3個scan-ip。這樣透過冗餘可防止某個scan-ip不可用導致客戶端無法訪問資料庫。
以上測試僅為個人測試分析,若有不對請各位及時指出,鄙人自當萬分感謝。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28612416/viewspace-1066678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於RAC的remote_listenerREM
- day25-Listener監聽器
- 7、listener監聽
- 使用 TypeScript 自定義裝飾器給類的方法增添監聽器 ListenerTypeScript
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- 使用 TypeScript 自定義裝飾器給類的屬性增添監聽器 ListenerTypeScript
- 【LISTENER】Oracle通過監聽連線緩慢分析Oracle
- 2.5.2. 監聽程式(listener)配置——2.5.2.3. 手工編輯監聽器配置檔案
- listener_scan1.log、listener.log監聽日誌清理
- java EE開發之Servlet第四課:監聽器(Listener)JavaServlet
- python使用裝飾器實現的事件中心(監聽器)Python事件
- 關於EditText焦點監聽
- ORACLE之手動註冊監聽listener。alter system set local_listener="XXX"Oracle
- TNS問題排查 The listener supports no services
- 2.5.2. 監聽程式(listener)配置——2.5.2.1. netca
- 2.5.2. 監聽程式(listener)配置——2.5.2.2. netmgr
- 監聽發現區域網dropbox客戶端broadcast-dropbox-listener客戶端AST
- rac監聽不能動態註冊
- oracle rac scan監聽更改埠號Oracle
- 12C RAC 修改監聽埠
- 11g rac監聽配置解析
- SpringBoot事件監聽器原始碼分析Spring Boot事件原始碼
- 【LISTENER】Oracle分析連線監聽情況,判斷客戶端IP分佈Oracle客戶端
- flutter原始碼系列 PageView原始碼分析以及監聽事件Flutter原始碼View事件
- JAVA單元測試框架-13-TestNG中的Listener監聽Java框架
- oracle rac的scan監聽狀態Not All Endpoints RegisteredOracle
- 如何在rac環境中增加監聽
- Oracle 11g RAC 監聽日常管理Oracle
- 安卓使用物理鍵監聽器安卓
- 在duplicate時,出現監聽BLOCKED的情況,導致監聽自動關閉BloC
- 關於瀏覽器裡事件的捕獲和冒泡及監聽器執行的順序瀏覽器事件
- javaWeb中的監聽器JavaWeb
- Spring中如何優雅的使用監聽器模式Spring模式
- java鍵盤監聽之視窗監聽的實現Java
- oracle監聽檔案listener.ora for 10g/11gOracle
- Oracle11g RAC啟動關閉情況大概總結Oracle
- 記錄springboot專案裡關於session的一個問題(session監聽器失效)Spring BootSession
- oracle11g RAC新增節點Oracle
- 【經典】連線oracle的總結(關於tnsname和監聽)Oracle