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

配置过程

  1. 查看服务器端/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。

  2. 查看服务端的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
    
  3. 客户端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
plsql1

服务器上关闭节点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数据库故障时能自动转移至正常节点,
plsql2

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.


版权声明:本文为weixin_36065860原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。