Oracle RAC的TAF(Transparent Application Failover)是Oracle提供的一种故障转移机制,当客户端连接到RAC集群的某个实例后,如果该实例出现故障,TAF可以自动将连接转移到集群中的其他可用实例,整个过程对应用程序透明,不需要应用重新发起连接请求。

TAF的核心概念
TAF主要包含两个关键配置参数,这两个参数决定了故障转移的行为:
- failover_type:故障转移的类型,可选值为
SESSION和SELECT。SESSION表示仅转移会话,正在执行的事务会回滚;SELECT表示不仅会转移会话,还会重新执行未完成的查询语句。 - failover_method:故障转移的方法,可选值为
BASIC和PRECONNECT。BASIC表示在故障发生时才建立到新实例的连接;PRECONNECT表示在初始连接时就预先建立到备用实例的连接,故障转移速度更快,但会消耗更多资源。
TAF的配置方式
TAF支持客户端配置和服务端配置两种方式,实际生产中更推荐服务端配置,因为不需要修改每个客户端的连接字符串。
1. 服务端配置TAF
服务端配置通过修改RAC的服务(Service)属性来实现,我们可以使用srvctl命令或者DBMS_SERVICE包来配置。
首先查看当前集群中的服务列表:
-- 查看RAC集群所有服务 srvctl status service -d orcl
如果还没有创建对应服务,可以先创建服务并配置TAF属性:
-- 创建服务orcl_taf,关联数据库orcl,首选实例为orcl1,备用实例为orcl2 srvctl add service -d orcl -s orcl_taf -r orcl1 -a orcl2 -P BASIC -e SELECT -w 5 -z 3
上述命令参数说明:
- -d:数据库名称
- -s:服务名称
- -r:首选实例列表
- -a:备用实例列表
- -P:failover_method,这里配置为BASIC
- -e:failover_type,这里配置为SELECT
- -w:故障转移重试等待时间,单位为秒
- -z:故障转移最大重试次数
创建完成后启动服务:
srvctl start service -d orcl -s orcl_taf
也可以通过DBMS_SERVICE包动态修改已有服务的TAF配置:
BEGIN
DBMS_SERVICE.MODIFY_SERVICE(
service_name => 'orcl_taf',
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 3,
failover_delay => 5
);
END;
/2. 客户端配置TAF
客户端配置需要在tnsnames.ora文件中添加对应的连接描述符,示例如下:
orcl_taf =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = scan-ip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_taf)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 3)
(DELAY = 5)
)
)
)TAF切换验证
配置完成后可以通过以下步骤验证TAF是否生效:
步骤1:客户端连接到RAC服务
使用配置好的tns名称连接数据库,查看当前连接的实例:
-- 查看当前连接的实例名称 SELECT INSTANCE_NAME FROM V$INSTANCE;
步骤2:模拟实例故障
在RAC的其中一个节点上关闭当前连接的实例:
-- 在对应节点的sqlplus中执行关闭实例命令 SHUTDOWN ABORT;
步骤3:验证连接是否转移
回到之前的客户端会话,再次执行查询实例名称的语句,如果返回的是另一个节点的实例名称,说明TAF切换成功:
-- 再次查询实例名称,确认是否切换到其他实例 SELECT INSTANCE_NAME FROM V$INSTANCE;
注意事项
- TAF仅对已经建立的连接生效,新的连接仍然会通过SCAN IP分配到可用的实例。
- 如果配置的是
SELECT类型的failover,仅未完成的查询会被重新执行,已经完成的事务不会受影响。 - 使用
PRECONNECT方式的failover_method时,需要预留足够的连接资源,避免预备连接占用过多资源影响正常业务。 - TAF切换过程中,未提交的事务会被回滚,应用需要有对应的事务重试机制。
Oracle_RACTAFfailover修改时间:2026-06-07 00:25:59