现在的位置: 首页 > 综合 > 正文

Local listener&Romote listener

2013年10月30日 ⁄ 综合 ⁄ 共 2786字 ⁄ 字号 评论关闭

一, LOCAL_LISTENER 和 REMOTE_LISTENER
本篇文章主要來說明這兩個參數在Failover和Loadbalance中的作用,順便說一下靜態註冊和动态注册。
注册的大致含义是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以连接数据库。
动态注册中的实例值来源于参数文件中instance_name,此值在rac环境中每个节点都有一个不同的值。
服务名来自于service_name,如果该参数没有设定值,数据库将结合参数文件中的 db_name和db_domain的值来注册。

10g RAC中默认端口的Listener.ora文件如下:
SID_LIST_LISTENER_node01 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (PROGRAM = extproc)
    )
  )
LISTENER_node01 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.200.31)(PORT = 1521)(IP = FIRST))
    )
  )
如上是默认端口的监听配置,pmon会动态注册默认port为1521的监听,如果需要向非默认监听注册,则需要配置local_listener参数,并且需要在Tnsnames.ora中加入监听的信息:
10g RAC中非默认端口的Listener.ora文件如下:
SID_LIST_LISTENER_node01 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = rac1)
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
    )
  )
LISTENER_NODE01 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1525)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = node01)(PORT = 1525)(IP = FIRST))
    )
  )
参数值如下:
NAME              TYPE         VALUE
---------------- ------------- ---------------
local_listener   string        LISTENER_node011

tnsnames.ora文件中包含如下:
LISTENER_node01 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1525))
  )
 )
LISTENER_node02 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = node02-vip)(PORT = 1525))
  )
 )
静态注册也就是实例启动时读取Listener.ora中配置,将实例和服务注册到监听程序。
例子如下:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = lichaodg)
      (ORACLE_HOME = /oracle2/product/11.2.0/dbhome_1)
      (SID_NAME = lichaodg)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = lichaodg_DGMGRL)
      (ORACLE_HOME = /oracle2/product/11.2.0/dbhome_1)
      (SID_NAME = lichaodg)
  )
  )
下面看看这两个参数在基于Server-Side Load Balance中的使用。
11.2及以上版本中,出现了SCAN的概念,那么应用连接通过Scan Listener来路由到某个合适(负载相对其它节点低)的节点,那么如果能够达到这样的目的,每个节点就需要能够接收到数据库实例的负载信息。oracle通过local_listener、remote_listener,oralce分别向这两个参数指向的listener进行注册来实现此需求。
11gR2默认参数如下:
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                 DRESS=(PROTOCOL=TCP)(HOST=10.7
                                                 0.236.133)(PORT=1521))))
remote_listener                      string      zjddesp12-scanip:1521

其中host=10.70.236.133为VIP.
它使用EZConnect,要enable的话,需要在sqlnet.ora添加names.directory_path=(ezconnect,tnsnames,ldap)
11gR2之前的话,需要在每个节点tnsnames.ora添加:
LISTENERS_CB =
  (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = cb11-vip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = cb12-vip)(PORT = 1521))
            )
修改remote_listener参数为TNS别名:
SQL> alter system set remote_listener='listeners_cb' scope=both sid='*';

抱歉!评论已关闭.