FCF和TAF是Oracle实现高可用的两种方式。请问他们的具体区别是什么?应用场景各是什么?
先谢谢各位!

解决方案 »

  1.   


    google 结果:
    http://www.easyora.net/blog/rac_10g_study_catalog_4.html
    RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance.
    (1)Failover
    在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover).
    TAF以及实现:
    TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略.
    <1> client端taf配置
    以下是一个简单的具有taf功能的tnsnames.ora 内容demo =
    (DESCRIPTION =
    (FAILOVER=ON)
    (ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
    (CONNECT_DATA =
    (SERVICE_NAME = demo)
    (SERVER=DEDICATED)
    (FAILOVER_MODE=(TYPE=SELECT)
    (METHOD=BASIC)
    (RETRIES=50)
    (DELAY=5)
    )
    ))
    控制TAF策略的参数说明:参数
     描述
     
    FAILOVER
     Failover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止
     
    TYPE
     两种类型:session /selectSession: 提供session级别的故障切换。Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作
     
    METHOD
     两种类型:basic/preconnectBasic:client同时只连接一个节点,故障切换时跳转到另外节点Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点 
    BACKUP 
     采用Preconnect模式的备用连接配置
     
    RETRIES
     故障切换时重试次数
     
    DELAY
     故障切换时重试间隔时间
     <2> Server端TAF配置
    10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。SQL> exec dbms_service.modify_service(service_name => ‘DEMO’,failover_method => ‘BASIC’,failover_type => ‘SELECT’,failover_retries => 180,failover_delay => 5); 客户端连接字符串修改成如下即可:demo =
    (DESCRIPTION =
    (ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
    (CONNECT_DATA =
    (SERVICE_NAME = demo)
    (SERVER=DEDICATED)
    )
    ) FCF及实现
    FCF是10g引进的一种新的failover机制,它依靠各节点的ons进程,通过广播FAN事件来获得各节点的运行情况,是一种前摄性的判断,支持JDBC/OCI/ODP.NET
    (1).ons配置
    onsctl工具配置各节点的local /remote节点以及端口.配置文件路径:$ORACLE_HOME/opmn/ons.config.
    使用 onsctl debug 跟踪ons进程是否正常运行。
    (2).配置连接池(以jdbc为例)
    需要连接池支持Implicit Connection Cache,设置FastConnectionFailoverEnabled=true.
    将ojdbc14.jar / ons.jar等加入CLASSPATH.具体代码可以参见联机文档或metalink相关文档.
    ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    Q Q 群:62697716 
      

  2.   

    这样的问题建议楼主先去百度GOOGLE
    看了搜索的结果以后有什么具体的疑问在来论坛上问
    这样效果会好很多
      

  3.   

    根据2楼的回复。我感觉它们的区别在于切换方式不同:一种是主动切换即有一套机制维护节点状态可以在数据库操作前提前切换到状态好的节点上;一种是被动切换即在数据库操作时发现节点失效后,根据配置切换到另一节点。还有FCF的机制是不是灵活性更大,但节点间通讯压力要比TAF大?呵呵,2楼的文章提问前我也搜到过,但还是不太了解两者应用区别。所以来此请教看有没有高人接触过,能够提点一二。谢谢楼上诸位的回复!
      

  4.   

       ORACLE,在F10G后推出了FCF, 就是为了弥补TAF在应用级别产生的不足。
       基本原理不说了, 各位都了解了。
       可以从ORACLE的版本看出,10G前的RAC只有client-side time failover和TAF以及Server TAF, 那Server TAF是SERVER端的,先不考虑。 
       TAF的想法当然这个愿景很完美, 但是只能支持select 情况下的cursor续传, 这样的话只能对read-only application有左右了. 这还不是最糟糕的。最关键的是切玩以后, 如果使用JAVA的话PrepareStatement会被kill, 原来的ResultSet也无法保证仍然是可用并且存在的. 个人认为这才是最关键的。 如果, 透明切换以后产生的数据和原来仍旧完全一样那还没问题,如果会带来新的问题, 情愿提示给用户ORA-17008错误然后快速重连. 
    这样至少保证了结果的完整和一致性.
       而且FCF是 driver indepentent的.ORACLE 交流群: 30182689