天天看点

11g RAC环境下客户端配置TAF

TAF是Transparent Application Failover的英文缩写,顾名思义就是对应用透明的故障转移,举个例子,当应用连接某个oracle数据库的执行查询操作的时候,数据库服务器网络中断或者实例崩溃,在经过delay参数设置的值之后,将自动连接到其他可用的实例,继续进行查询。(前提是执行计划,输出结果集和输出的顺序不能发生变化)

TAF的特性:

1:TAF是ORACLE客户端提供的一项特性,使用TAF,对客户端的环境有一定的要求,比如JAVA的JDBC驱动、Oracle客户端的版本等(8i开始支持TAF);

2:大致上TAF可以分为2种,连接时的TAF和会话建立后TAF;

3:TAF本身与是否RAC环境无关,但一般都用在RAC环境,最小程度的减少最应用的影响,单实例环境下也可以使用TAF,这样使用PL/SQL developer连接数据库,即使数据库实例重启,也不需要重新连接;

4:RAC环境下,还可以把TAF配置在服务器端;

5:配置listener.ora文件的GLOBAL_DBNAME参数后将会禁用TAF。

配置如下:

1、查看服务端的service_name 和 RAC SCAN地址:

[[email protected] tnslsnr]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

#Public
10.1.252.121            rac121
10.1.252.122            rac122
#Private
192.168.123.1           rac121-priv
192.168.123.2           rac122-priv

#Virtual IP
10.1.252.75             rac121-vip
10.1.252.76             rac122-vip
10.1.252.68             rac-scan
[[email protected] tnslsnr]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Tue Jun 26 15:33:29 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      racdb
SQL> 
      

2、在客户端tnsnames.ora文件中添加如下内容:

racdb =  
  (DESCRIPTION =  
    (ADDRESS_LIST =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.252.68)(PORT = 1521))  
    )  
    (CONNECT_DATA =  
      (SERVICE_NAME = racdb)  
      (FAILOVER_MODE =  
       (TYPE = SELECT)  
       (METHOD = BASIC)  
       (RETRIES = 180)  
       (DELAY = 5))  
    )  
  )       

    属性说明 :

            TYPE    type属性描述了故障转移的类型,可能的值如下:

                         SESSION  指定发生故障转换时,TAF应创建会话,不执行其他任何操作。

                         SELECT   指定执行故障转换时,除了创建会话,TAF 也应该重新启动故障转移期间运行的任何SELECT语句,

                                            当SELECT 语句执行时,ORACLE Net 将返回故障转移前没有返回给用户的行。

                          NONE     不执行TAF故障转移

             METHOD  method特征确定何时创建会话,可能的值如下 :

                         BASIC      在故障转移期间创建会话

                         PRECONNECT 与数据库的初始连接建立后,采用由BACKUP 特性指定的ORACLE Net别名创建故障转移会话。

             RETRIES retries特性指Oracle Net 返回ADDRESS_LIST 并尝试连接到幸存实例的次数。

             DELAY   delay特性指定每次重试之间等待的次数       

3、用客户端登录作如下操作:

C:\Documents and Settings\```>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 6月 26 15:00:56 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn sys/[email protected] as sysdba
已连接。
SQL> show parameter instance_name

NAME                      TYPE                    VALUE
------------------------- ----------------------  ---------------
instance_name             string                   racdb2
SQL> select sid from v$mystat where rownum=1;
       SID
----------
       163
SQL> select machine,failover_type,failover_method,failed_over from v$session where sid=163;
MACHINE           FAILOVER_TYPE       FAILOVER_METHOD       FAILED
----------------  ----------          --------------------  ------
AILK\TANWEI       SELECT              BASIC                 NO

SQL> create table taf_client_test(id int,vname varchar2(10));
表已创建。
SQL> insert into taf_client_test values(1,'taf');
已创建 1 行。
SQL> update taf_client_test set id=5;
已更新 1 行。
SQL> select * from taf_client_test;
        ID VNAME
---------- --------------------
         5 taf
      

4、更新完毕不commit,停掉racdb2实例:

[[email protected] tnslsnr]$ srvctl status instance -d racdb -i racdb2
Instance racdb2 is running on node rac122
[[email protected] tnslsnr]$ srvctl stop instance -d racdb -i racdb2 -o abort
[or[email protected] tnslsnr]$ srvctl status instance -d racdb -i racdb2
Instance racdb2 is not running on node rac122
[or[email protected] tnslsnr]$ srvctl status instance -d racdb -i racdb1
Instance racdb1 is running on node rac121 --还有一个节点在工作      

5、回到客户端作如下操作:

SQL> select * from taf_client_test;
select * from taf_client_test
*
第 1 行出现错误:
ORA-25402: 事务处理必须重新运行


SQL> rollback;


回退已完成。


SQL> select instance_name from v$instance;


INSTANCE_NAME
--------------------------------
racdb1


SQL> show parameter instance_name




NAME                TYPE            VALUE
----------------    -------------   -----------
instance_name       string          racdb1 --发现自动切换到节点1,
SQL> select * from taf_client_test;
未选定行
SQL> select * from v$mystat where rownum=1;


       SID STATISTIC#      VALUE
---------- ---------- ----------
       166          0          0


SQL> select failover_type,failover_method,failed_over from v$session where sid=166;

FAILOVER_TYPE              FAILOVER_METHOD      FAILED
-------------------------- -------------------- ------
SELECT                     BASIC                YES
      

到此,完成了TAF的配置与验证。