oracle rac 監聽配置

一、總體概述

    Oracle RAC 監聽器的配置與單實例稍有不同,但原理和實現方法基本上是相同的。在Oracle服務端中 tns進程用於爲指定網絡地址上的一個或多個Oracle 實例提供服務註冊,並響應來自客戶端對該服務提出的連接請求。一旦連接請求到達,並派生出一個服務器進程建立服務器與用戶端之間的連接(專有服務器dedicated server)或轉發服務請求(共享服務器模式shared server)。如果監聽器知道多於一個實例提供所請求的服務,則可能會根據客戶端與服務器端相關配置將請求定位到較低負載的實例爲其提供服務。因此合理正確配置監聽器以及tnsnames是Oracle RAC實現負載均衡以及failover的前提,本文將描述基於 CentOS 6.5 + Oracle 10g RAC 下監聽器的配置。

一、節點上監聽信息

1、兩個節點及主機配置信息(racdbp,racdbs)  
    oracle@racdbp:/u01/oracle/db/network/admin> cat /etc/hosts  
      
    127.0.0.1       localhost.yeung.com   localhost  
    # Public   
    192.168.7.51   racdbp.yeung.com        racdbp
    192.168.7.52   racdbs.yeung.com        racdbs
    #Private   
    10.10.7.51   racdbp-priv.yeung.com   racdbp-priv  
    10.10.7.52   racdbs-priv.yeung.com   racdbs-priv  
    #Virtual   
    192.168.7.61   racdbp-vip.yeung.com    racdbp-vip  
    192.168.7.62   racdbs-vip.yeung.com    racdbs-vip  
  
2、節點racdbp上的listener.ora  
    oracle@racdbp:/u01/oracle/db/network/admin> more listener.ora  
    # listener.ora.racdbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.racdbp   
    # Generated by Oracle configuration tools.   
      
    LISTENER_RACDBP =  
      (DESCRIPTION_LIST =  
        (DESCRIPTION =  
          (ADDRESS = (PROTOCOL = TCP)(HOST = racdbp-vip.yeung.com)(PORT = 1521)(IP = FIRST))  
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1521)(IP = FIRST))  
        )  
      )  
      
    SID_LIST_LISTENER_RACDBP =  
      (SID_LIST =  
        (SID_DESC =  
          (SID_NAME = PLSExtProc)  
          (ORACLE_HOME = /u01/oracle/db)  
          (PROGRAM = extproc)  
        )  
      )  
  
3、節點racdbp上的tnsnames.ora  
    oracle@bo2dbp:/u01/oracle/db/network/admin> more tnsnames.ora  
    #對於連接字符串RAC1A,RAC1B,RAC1在此處可以省略   
    #這些字符串通常用於客戶端連接到數據庫   
    RAC1B =  
      (DESCRIPTION =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))  
        (CONNECT_DATA =  
          (SERVER = DEDICATED)  
          (SERVICE_NAME = RAC1)  
          (INSTANCE_NAME = RAC1B)  
        )  
      )  
      
    RAC1A =  
      (DESCRIPTION =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))  
        (CONNECT_DATA =  
          (SERVER = DEDICATED)  
          (SERVICE_NAME = RAC1)  
          (INSTANCE_NAME = RAC1A)  
        )  
      )  
      
    RAC1 =  
      (DESCRIPTION =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))  
        (LOAD_BALANCE = yes)  
        (CONNECT_DATA =  
          (SERVER = DEDICATED)  
          (SERVICE_NAME = RAC1)  
        )  
      )  
      
    #下面是幾個重要的用於設置local_listener 以及remote_listener參數的定義信息   
    LISTENER_RACDB =  
      (ADDRESS_LIST =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))  
      )  
      
    LISTENER_RACDBP =  
      (ADDRESS_LIST =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))  
      )  
      
    LISTENER_RACDBS =  
      (ADDRESS_LIST =  
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))  
      )    
 
  
4、節點racdbp上監聽器的信息  
    #可以看出只有實例 RAC1A 註冊到監聽器 LISTENER_RACDBP   
    oracle@racdbp:/u01/oracle/db/network/admin> lsnrctl status LISTENER_RACDBP  
      
    LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-FER-2016 21:12:04  二月
      
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.  
      
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdbp-vip.yeung.com)(PORT=1521)(IP=FIRST)))  
    STATUS of the LISTENER  
    ------------------------  
    ..............  
    Listener Parameter File   /u01/oracle/db/network/admin/listener.ora  
    Listener Log File         /u01/oracle/db/network/log/listener_racdbp.log  
    Listening Endpoints Summary...  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))  
    Services Summary...  
    Service "+ASM" has 1 instance(s).  
      Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...  
    Service "+ASM_XPT" has 1 instance(s).  
      Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...  
    Service "RAC1" has 1 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
    Service "RAC1XDB" has 1 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
    Service "RAC1_XPT" has 1 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
    Service "PLSExtProc" has 1 instance(s).  
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
    The command completed successfully  
  
5、節點racdbs上的listener.ora  
    oracle@racdbs:/u01/oracle/db/network/admin> more listener.ora  
    # listener.ora.racdbs Network Configuration File: /u01/oracle/db/network/admin/listener.ora.racdbs   
    # Generated by Oracle configuration tools.   
      
    LISTENER_RACDBS =  
      (DESCRIPTION_LIST =  
        (DESCRIPTION =  
          (ADDRESS = (PROTOCOL = TCP)(HOST = racdbs-vip.yeung.com)(PORT = 1521)(IP = FIRST))  
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.52)(PORT = 1521)(IP = FIRST))  
        )  
      )  
      
    SID_LIST_LISTENER_RACDBS =  
      (SID_LIST =  
        (SID_DESC =  
          (SID_NAME = PLSExtProc)  
          (ORACLE_HOME = /u01/oracle/db)  
          (PROGRAM = extproc)  
        )  
      )    
    #由於節點racdbs上的tnsnames.ora與節點racdbp內容相同,不再列出   
  
6、節點racdbs上的監聽器狀態  
    #同樣可以看到只有一個 instance,即RAC1B註冊到了監聽器 LISTENER_RACDBS   
    oracle@racdbs:/u01/oracle/db/network/admin> lsnrctl status LISTENER_RACDBS  
      
    LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-fFER-2012 19:24:37 
      
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.  
      
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdbs-vip.yeung.com)(PORT=1521)(IP=FIRST)))  
    STATUS of the LISTENER  
    ------------------------  
    .......................  
    Listening Endpoints Summary...  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))  
    Services Summary...  
    Service "+ASM" has 1 instance(s).  
      Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...  
    Service "+ASM_XPT" has 1 instance(s).  
      Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...  
    Service "RAC1" has 1 instance(s).  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1XDB" has 1 instance(s).  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1_XPT" has 1 instance(s).  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "PLSExtProc" has 1 instance(s).  
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
    The command completed successfully    
      
    #通過上面的觀察可知,當前的兩個實例都是在各自所在主機上的監聽器進行了註冊。

二、設置remote_listener參數

1、在節點racdbp上執行下列的命令  
    SQL> show parameter instance_name  
      
    NAME                                 TYPE        VALUE  
    ------------------------------------ ----------- ------------------------------  
    instance_name                        string      RAC1A  
      
    -->爲節點racdbp設置遠程監聽器  
    -->這意味着可以將實例RAC1A上提供的服務可以註冊到LISTENER_RACDBS定義的監聽器中  
    SQL> alter system set remote_listener='LISTENER_RACDBS' sid='RAC1A';  
      
    System altered.  
      
    -->執行 register 實現註冊  
    SQL> alter system register;  
      
    System altered.  
      
    #再次查看節點racdbs監聽器狀態,實例RAC1A已經註冊到racdbs節點   
    Oracle@racdbs:/u01/oracle/db/network/admin> lsnrctl status LISTENER_RACDBS  
      
    LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-FER-2016 20:11:06  
      
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.  
      
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdbs-vip.yeung.com)(PORT=1521)(IP=FIRST)))  
    STATUS of the LISTENER  
    ------------------------  
    ..............  
    Listener Parameter File   /u01/oracle/db/network/admin/listener.ora  
    Listener Log File         /u01/oracle/db/network/log/listener_racdbs.log  
    Listening Endpoints Summary...  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))  
    Services Summary...  
    Service "+ASM" has 1 instance(s).  
      Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...  
    Service "+ASM_XPT" has 1 instance(s).  
      Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...  
    Service "RAC1" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1XDB" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1_XPT" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "PLSExtProc" has 1 instance(s).  
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
    The command completed successfully  
  
2、節點racdbs上設置local_listener,remote_listener  
    SQL> select instance_name from v$instance;  
      
    INSTANCE_NAME  
    ----------------  
    RAC1B  
      
    SQL> show parameter listener  
      
    NAME                                 TYPE        VALUE  
    ------------------------------------ ----------- ------------------------------  
    local_listener                       string  
    remote_listener                      string  
      
    -->按照節點racdbp上的操作方式將節點racdbs上的remote_listener只向節點racdbp  
    SQL> alter system set remote_listener='LISTENER_RACDBP' sid='RAC1B';  
      
    System altered.  
      
    SQL> alter system register;  
      
    System altered.  
      
    -->在racdbp節點上也可以看到實例RAC1B也註冊到了第一個節點上  
    oracle@racdbp:/u01/oracle/db/network/admin> lsnrctl status LISTENER_RACDBP  
      
    LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-FER-2016 21:37:11 
      
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.  
      
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdbp-vip.yeung.com)(PORT=1521)(IP=FIRST)))  
    STATUS of the LISTENER  
    ------------------------  
    ............  
    Listener Parameter File   /u01/oracle/db/network/admin/listener.ora  
    Listener Log File         /u01/oracle/db/network/log/listener_racdbp.log  
    Listening Endpoints Summary...  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))  
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))  
    Services Summary...  
    Service "+ASM" has 1 instance(s).  
      Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...  
    Service "+ASM_XPT" has 1 instance(s).  
      Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...  
    Service "RAC1" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1XDB" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "RAC1_XPT" has 2 instance(s).  
      Instance "RAC1A", status READY, has 1 handler(s) for this service...  
      Instance "RAC1B", status READY, has 1 handler(s) for this service...  
    Service "PLSExtProc" has 1 instance(s).  
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
    The command completed successfully  
三、總結(缺省1521端口)
1、RAC 監聽的配置當使用缺省的監聽器時則監聽器名字爲 LISTENER_${NODE}
2、如未設置remote_listener,本地實例只在本地的監聽器註冊。而當設置了正確的remote_listener,則本地實例可以實現遠程註冊
3、缺省情況下,PMON進程自動將instance_name和service_names等信息註冊到已啓動的缺省偵聽器
4、可以使用alter system register 實現快速註冊

Important:

Do not set the GLOBAL_DBNAME parameter in the SID_LIST_listener_name section of the listener.ora.
A statically configured global database name disables connect-time failover.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章