Oracle RAC客户端tnsnames.ora连接串配置和试验
Oracle RAC客户端tnsnames.ora连接串配置和试验
本次试验是搭建好RAC后使用客户端连接RAC数据库并模拟单节点故障后的连接状态。具体过程记录如下:
TNS简要介绍与应用
Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。
TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC。如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。
Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。
配置文件名一般为:tnsnames.ora,默认路径为:%ORACLE_HOME%\network\admin\tnsnames.ora
配置过程
查看服务器端/etc/hosts文件:
[root@rac1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 #public ip 10.16.35.60 rac1 10.16.35.61 rac2 #virtual ip 10.16.35.62 rac1-vip 10.16.35.63 rac2-vip #scan ip 10.16.35.64 rac19c-scan #private ip 10.10.16.155 rac1-priv 10.10.16.156 rac2-priv
可以看到两节点的虚拟IP分别是10.16.35.62、10.16.35.63。
查看服务端的local _ listener和remote_listener参数
SQL> show parameter listener; //节点1 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ forward_listener string listener_networks string local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST= 10.16.35.62)(PORT=1521)) remote_listener string rac19c-scan:1521 SQL> show parameter listener; //节点2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ forward_listener string listener_networks string local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST= 10.16.35.63)(PORT=1521)) remote_listener string rac19c-scan:1521
客户端tnsnames.ora配置参考
Oracle 10g版本的监听配置需要分别配上各节点的虚拟IP(VIP),配置如下:
racdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.62)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.63)(PORT = 1521)) (LOAD_BALANCE = yes) //开启负载 (CONNECT_DATA = (SERVER = DEDICATED) //专用服务器,一个客户端连接对应一个服务器进程 (SERVICE_NAME = racdb) //对应数据库的服务名 (FAILOVER_MODE = //连接失败后处理的方式 (TYPE = session) //TYPE =SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL 需要重新执行 (METHOD = basic) //表示初始连接就连接一个接点 (RETRIES = 180) //连接失败后重试连接的次数 (DELAY = 5) //连接失败后重试的延迟时间(以秒为单位) ) ) )
Oracle 11g之后的版本的监听配置只需要配上SCAN IP就可以了,不用分别配上各节点的虚拟IP(VIP),配置如下:
racdb_scan = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.64)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = racdb) //对应数据库的服务名 (FAILOVER_MODE = //连接失败后处理的方式 (TYPE = session) //TYPE =SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用 (METHOD = basic) //表示初始连接就连接一个接点 (RETRIES = 180) //连接失败后重试连接的次数 (DELAY = 5) //连接失败后重试的延迟时间(以秒为单位) ) ) )
业务分割,固定连接节点1,只需要配置节点1的虚拟IP,配置如下:
racdb1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.62)(PORT = 1521)) ) (CONNECT_DATA = (SID = racdb1) (SERVER = DEDICATED) ) )
failover故障转移功能测试实验
使用PLSQL登录RAC数据库后,显示登录节点为节点1
服务器上关闭节点1实例:
[grid@rac1 ~]$ srvctl stop instance -d racdb -i racdb1 //关闭节点1
[grid@rac1 ~]$ srvctl status instance -d racdb -i racdb1
Instance racdb1 is not running on node rac1
可以看到连接的状态变为节点2了,状态为正常,测试的结果显示连接RAC数据库故障时能自动转移至正常节点,
rac环境下的JDBC连接的问题
RAC环境下一个实例就对应一个SID,但是service_ name只有一个,如果使用SID的话就达不到双机的效果了,所以必须使用service_name连接数据库。
jdbc连接Oralce有三种方式:
格式一:jdbc:oracle:thin:@//<host>:<port>/<service_name>
格式二:jdbc:oracle:thin:@<host>:<port>:<SID>
格式三:jdbc:oracle:thin:@<TNSName>
RAC环境下使用第一种,这里部署的service_ name是racdb,单节点使用第二种,SID为service_ name1或者service_ name2.