Oracle10g RAC - 客戶端,Server端tnsnames.ora及監聽設定

tolywang發表於2009-12-17
Oracle 10g  RAC
Linux AS 5.3




SQL> show parameter listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      LOCAL_MXDELL
remote_listener                   string      LISTENERS_MXDELL




3 個 Server中的tnsnames.ora檔案:  

LISTENERS_MXDELL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip01)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip02)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip03)(PORT = 1521))   
  )



------------------------------------



Ap程式 客戶端連線 (181,182對應1,2節點)  
MXRAC =
  (DESCRIPTION =
    (FAILOVER=ON)
    (LOAD_BALANCE = OFF)
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.13.67.181)(PORT = 1521))  
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.13.67.182)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = mxdell)
      (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))
    )
  )



Web Report客戶端連線(只是連線節點3,  173是對應節點3的實體IP) :


MX_RAC3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.13.67.173)(PORT = 1521))   
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mxdell)
      (INSTANCE_NAME = mxdell3)
    )
  )




這種情況下AP程式客戶端也會連線到節點3 上, Web訪問導致負荷很高,影響到ap的執行, 雖然AP客戶端只是設定了1,2 節點的vip ,  可能由於
Server端的 remote_listener  = LISTENERS_MXDELL  中包含了節點3的vip,   所以ap 還是會連線到第 3 個節點 。



問題 :
想徹底分開AP程式及WEB程式, 讓AP 訪問前兩個節點,還能負載均衡,並不能連線到節點3 , 讓Web單獨訪問節點3 ,不影響AP的執行。  



我的做法是 :

將 3 個DB Server中的tnsnames.ora檔案修改為 (註釋掉節點3):  

LISTENERS_MXDELL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip01)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip03)(PORT = 1521))
    # (ADDRESS = (PROTOCOL = TCP)(HOST = mxvip03)(PORT = 1521))   
  )


由於不能關閉資料庫, 而remote_listener 又是spfile中的引數, 所以想知道這樣修改後是否馬上生效了,是否Ap介面程式就連線不到節點3了 ?  
還是說需要  alter system set  remote_listener = LISTENERS_MXDELL ;  讓引數refresh一下 ?  


衍生一個問題 : remote_listener = LISTENERS_MXDELL , 而 LISTENERS_MXDELL 是在tnsnames.ora 中設定的, 那麼開啟資料庫的
時候, 讀入記憶體的應該是  LISTENERS_MXDELL  這個字元, 而不會是 LISTENERS_MXDELL 在tnsnames.ora 中對應的ip,port等實質的內容 ?

[ 本帖最後由 tolywang 於 2009-12-16 12:01 編輯 ]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-622662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章