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地址:
[oracle@rac122 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 [oracle@rac122 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/system@racdb 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实例:
[oracle@rac122 tnslsnr]$ srvctl status instance -d racdb -i racdb2 Instance racdb2 is running on node rac122 [oracle@rac122 tnslsnr]$ srvctl stop instance -d racdb -i racdb2 -o abort [oracle@rac122 tnslsnr]$ srvctl status instance -d racdb -i racdb2 Instance racdb2 is not running on node rac122 [oracle@rac122 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的配置与验证。