Oracle RAC如何实现TAF failover切换配置与验证

来源:AI社区作者:小宵头衔:网络博主
导读:本期聚焦于小伙伴创作的《Oracle RAC如何实现TAF failover切换配置与验证》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Oracle RAC如何实现TAF failover切换配置与验证》有用,将其分享出去将是对创作者最好的鼓励。

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

Oracle RAC如何实现TAF failover切换配置与验证

TAF的核心概念

TAF主要包含两个关键配置参数,这两个参数决定了故障转移的行为:

  • failover_type:故障转移的类型,可选值为SESSIONSELECTSESSION表示仅转移会话,正在执行的事务会回滚;SELECT表示不仅会转移会话,还会重新执行未完成的查询语句。
  • failover_method:故障转移的方法,可选值为BASICPRECONNECTBASIC表示在故障发生时才建立到新实例的连接;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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。