本文标题:Rac环境下正确配置LISTENER和TNS【本站如从外站转载,会注明出处】
本文链接:http://www.validba.net/2009/07/rac%e7%8e%af%e5%a2%83%e4%b8%8b%e6%ad%a3%e7%a1%ae%e9%85%8d%e7%bd%aelistener%e5%92%8ctns/

RAC环境下配置LISTENER,TNS必须考虑负载均衡,故障切换等因素.这里用一个四节点的RAC环境为例:

node1:rac1
node2:rac2
node3:rac3
node4:rac4
  • 服务器端的配置

listener.ora的配置:

配置每个实例本地的监听器:

node1:<listener.ora>

LISTENER_RAC1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = TCP)(HOST = node1-priv)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
      )
    )
  )

node2:<listener.ora>

LISTENER_RAC2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = TCP)(HOST = node2-priv)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
      )
    )
  )

node3:<listener.ora>

LISTENER_RAC3 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = TCP)(HOST = node3-priv)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
      )
    )
  )

node4:<listener.ora>

LISTENER_RAC4 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = TCP)(HOST = node4-priv)(PORT = 1421)(IP = FIRST))
        (ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
      )
    )
  )

tnsnames.ora的配置:

在每个实例的tnsnames.ora文件中加入以下信息:

LISTENER_RAC =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1421)(IP = FIRST))
  )
LISTENER_RAC1 =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1421)(IP = FIRST))
  )
LISTENER_RAC2 =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1421)(IP = FIRST))
  )
LISTENER_RAC3 =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1421)(IP = FIRST))
  )
LISTENER_RAC4 =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1421)(IP = FIRST))
  )
      

设置LOCAL_LISTENER和REMOTE_LISTENER参数

前面我们讲过,设置LOCAL_LISTENER参数是由于LISTENER使用了非TCP协议或非1521端口的情况下,那么在RAC环境下不管是使用了默认的TCP和1521还是其他协议都建议配置LOCAL_LISTENER.REMOTE_LISTENER参数在RAC环境下非常重要,是服务器使用load_balance的一个工具,在服务器端的连接中,Oracle NET通过remote_listener确定当前RAC中的远程监听和实例,以便分发连接.

执行下面的语句设置LOCAL_LISTENER和REMOTE_LISTENER参数:

ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC1' SCOPE=BOTH SID='RAC1';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC2' SCOPE=BOTH SID='RAC2';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC3' SCOPE=BOTH SID='RAC3';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC4' SCOPE=BOTH SID='RAC4';
...................
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC1';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC2';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC3';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC4';


  • 客户端TNS的配置:

RAC环境下Client端TNS的配置和非RAC环境下,多IP的配置情况一样,都要配置load_balance 和TAF:


rac =
(DESCRIPTION =
   (ADDRESS_LIST =
     (LOAD_BALANCE=ON)
     (FAILOVER=ON)
     (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1421)(IP = FIRST))
     (ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1421)(IP = FIRST))
   )
   (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RAC)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
      )
   )
)
  • 连接测试

开启多个连接测试, 并查询gv$session视图看看是否连接达到负载均衡.