当前位置: 首页 > 科技观察

OracleRAC环境下的应用连续性

时间:2023-03-13 13:35:29 科技观察

银行、电信等传统企业的数据库大多采用Oraclerac+dataguard的高可用架构。在rac项目实施过程中,由于业务要求严格,实施和测试工作显得尤为重要。Oracle在新版本12cR2的官方rac文档中单独列出了一个章节名为EnsuringapplicationContinuity,可见其重视程度。在之前的Oracle10g和11g版本中,为了实现RAC故障转移(failover)特性,各个应用程序app和db需要进行各种配置调整。随着新版本Oracle12cR2的到来,这些配置步骤变得更加简化。下面简单总结一下Oracle11gR2环境下的failover配置。首先,客户端连接根据是否使用预先存在的连接(如连接池中的连接)分为ConnectTimeConnectionFailover和RuntimeConnectionFailover。运行时前缀是指连接已经存在的情况,比如使用连接池。1、在ConnectTimeConnectionFailover客户端的tnsnames.ora中配置scanip和service,实现连接数据库时的Failover;2.RuntimeConnectionFailoverOracle通过两种方式实现RuntimeConnectionFailover,分别是TAF(TransparentApplicationFailover)和FCF(FastConnectionFailover)。首先是TAF:它可以在客户端的tnsnames.ora中的连接字符串中定义,也可以在服务器端的服务中定义。TAF仅对使用OCI连接的客户端和连接池有效。这里的OCI连接可以封装在OCI连接上。例如,JDBC-OCI驱动支持TAF,但是JDBC瘦驱动不支持TAF(因为JDBC瘦驱动不是基于OCI的)。第二种是FCF:FastConnectionFailover,其实就是客户端通过订阅FANHA事件来实现的。因为JDBC瘦连接不是基于OCI的,所以这种情况下的RuntimeConnectionFailover无法使用TAF,只能使用FCF。如果想让应用app具有TAF属性,可以进行简单的app改造:首先在app的客户端环境安装Oracle客户端程序,然后将jdbc瘦连接调整为jdbcoci连接方式。在Oracle12cR2版本中,故障转移可以基于事务和replaydml语句。与基于session的11g相比,failover功能有了很大的提升。