Rac环境下正确配置LISTENER和TNS
RAC环境下配置LISTENER,TNS必须考虑负载均衡,故障切换等因素。这里用一个四节点的RAC环境为例:
node1:rac1
node2:rac2
node3:rac3
node4:rac4
1、服务器端的配置
listener.ora的配置:
配置每个实例本地的监听器:
node1:
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_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_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_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';
2、客户端TNS的配置
RAC环境下Client端TNS的配置和非RAC环境下,多IP的配置情况一样,都要配置load_balance 和TAF:
rac =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = IP1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = IP2)(PORT = 1521))
(LOAD_BALANCE = YES)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ?) //注意:这里指的不是数据库SID
)
)
或
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视图看看是否连接达到负载均衡.
3、客户端HOSTS配置
Hosts文件添加
4、连接串解释
ADDRESS后面就是连接的IP和端口号;LOAD_BALANCE=YES表示是否负载均衡;SERVER = DEDICATIED表示专用服务器模式,感觉可以去掉;SERVICE_NAME=ORCL要操作数据库的服务名;TYPE = SELECT表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话在执行的SQL 需要重新执行;METHOD = BASIC表示初始连接就连接一个接点,他还有个选项是PRECONNECT,表示初始连接所有的接点;RETRIES重试次数;DELAY重试时延迟(以秒为单位)。
5、oci与thin的区别
jdbc:oracle:thin:@server ip:端口:service
jdbc:oracle:oci:@service
这下基本明白了
1)从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因。
2)原理上来看,thin是纯java实现tcp/ip的c/s通讯;而oci方式,客户端通过native java method调用c library访问服务端,而这个c library就是oci(oracle called interface),因此这个oci总是需要随着oracle客户端安装(从oracle10.1.0开始,单独提供OCI Instant Client,不用再完整的安装client)
3)它们分别是不同的驱动类别,oci是二类驱动, thin是四类驱动,但它们在功能上并无差异。
4)虽然很多人说oci的速度快于thin,但找了半天没有找到相关的测试报告。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27042095/viewspace-773505/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/27042095/viewspace-773505/