日期:2014-05-16  浏览次数:20412 次

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

        不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册。与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的。除此之外,还可以对实例进行远程注册,以达到负载均衡的目的。这是通过一个参数remote_listener来实现。

 

有关Oracle 网络配置相关基础以及概念性的问题请参考:
      配置ORACLE 客户端连接到数据库
   配置非默认端口的动态服务注册
  
配置sqlnet.ora限制IP访问Oracle
  
Oracle 监听器日志配置与管理
  
设置 Oracle 监听器密码(LISTENER)

   配置RAC负载均衡与故障转移 

   Oracle RAC 监听配置

 

一、创建非缺省的监听器
 使用netca新建一个非缺省的listener,当然也可以直接修改各节点上的listener.ora
     oracle@bo2dbp:~> export DISPLAY=192.168.7.133:0.0
     oracle@bo2dbp:~> netca
     --选择cluster configuration
     --选择所有的节点
     --选择listener configuration
     --选择add
     --设定一个新的监听器的名字,假定为LISTENER_NEW
     --选择tcp
     --设定非缺省的端口号,此处设定为1314
     --选择no,点击next等待完成
     --如之前已经存在缺省的监听器,此时出现提示选择启动那个监听,选择刚建的LISTENER_NEW
     --next,提示完成, finish

 

二、缺省监听器与非缺省监听器对照

oracle@bo2dbp:~> ps -ef | grep lsnr
oracle   21097     1  0 17:40 ?        00:00:00 /u01/oracle/db/bin/tnslsnr LISTENER_BO2DBP -inherit
oracle   26228     1  0 17:58 ?        00:00:00 /u01/oracle/db/bin/tnslsnr LISTENER_NEW_BO2DBP -inherit
oracle   28842 19468  0 17:58 pts/1    00:00:00 grep lsnr
此时可以看到有两个监听器,一个是原来缺省的,一个是新增加的,注意监听器的命名,RAC环境下是监听器的名字加上hostname
下面的listener.ora的内容已经包含了两个监听器,一个是缺省的,一个是非缺省的。

相应地,listener.ora中也多出了刚刚创建的非缺省监听器
oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/listener.ora
# listener.ora.bo2dbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbp
# Generated by Oracle configuration tools.

LISTENER_NEW_BO2DBP =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1314)(IP = FIRST))
    )
  )

LISTENER_BO2DBP =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1521)(IP = FIRST))
    )
  )

SID_LIST_LISTENER_NEW_BO2DBP =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/oracle/db)
      (PROGRAM = extproc)
    )
  )

SID_LIST_LISTENER_BO2DBP =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/oracle/db)
      (PROGRAM = extproc)
    )
  )

#查看监听器的状态
oracle@bo2dbp:~> ./crs_stat.sh
 Resource name                                Target     State             
--------------                                ------     -----             
ora.GOBO4.GOBO4A.inst                         ONLINE     ONLINE on bo2dbp  
ora.GOBO4.GOBO4B.inst                         ONLINE     ONLINE on bo2dbs  
ora.GOBO4.db                                  ONLINE     ONLINE on bo2dbp  
ora.bo2dbp.ASM1.