TAF(Transparent Application Failover)

本文深入解析Oracle RAC环境中TAF(Transparent Application Failover)配置,阐述了其原理、配置方法及优势,通过设置FAILOVER_MODE来实现自动故障转移,确保应用程序在实例故障时的高可用性和连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓TAF,就是连接建立以后,应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他的健康实例上。对于应用程序而言,这个迁移过程透明,不需要用户的介入,当然这种透明也是有引号的,因为用户的未提交事务会回滚。相对于Client-Side Connect Time Failover的用户程序被中断,抛出连接错误,用户必须重启应用程序,TAF这种方式在提高应用程序HA能力上无疑是前进了一大步。

TAF的配置也很简单,只需要在客户端的tnsname项目中添加FAILOVER_MODE配置项,这个条目有4个子项目需要定义。
   (1)METHOD选项用于定义何时创建到其他实例的连接,有BASICPRECONNECT两个可选值
  •  BASIC是指在感知到节点故障时才创建到其他实例的连接。
  •  PRECONNECT是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
    两种方法的不同很容易比较,BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源,两者就是用时间换      资源和用资源换时间的区别
   (2)Type选项用于定义发生故障时对完成的SQL语句如何处理,其有两种类型:sessionselect
    这两种方式对于未提交事务都自动回滚,区别在于对select语句的处理,对于后一种类型,用户正在执行的select语句也会被转移到新的实例上,在新节点上继续返回后续结果集,而已经返回的记录集抛弃。
    假设用户正在节点1上执行查询,真个结果集共有100条记录,现在已从节点1返回10条记录,这时节点1宕机,用户连接被转移到节点2上,如果是session方式,则需要重新执行查询语句;如果是select方式会从节点2上继续返回剩下的90条记录,而已经从节点1返回的10条记录不会重复返回给用户,对于用户而言感觉不到这种切换。
    很显然为了实现select方式,Oracle必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。   
   (3)DELAYRETRIES这两个参数很简单,代表重试间隔时间重试次数

使用TAF的TNS配置如下,其中粗体部分是TAF内容:

wxxrdb_taf =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbs-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbp-vip)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = wxxrdb)
       (FAILOVER_MODE =
          (TYPE = session)
          (METHOD = basic)
          (RETRIES = 180)
          (DELAY = 5)

       )
    )
  )

 





摘至张晓明的《大话Oracle RAC》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值