您的位置:首页 > 其它

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

2012-06-26 15:43 330 查看
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的配置与验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: