Oracle 故障转移

孙显鹏,Oracle 十年从业经验,拥有11G ocp认证,精通内部原理,擅长调优,解决疑难问题,致力于帮助客户解决生产过程过出现的性能问题,提高生产效率!爱好书法!

概述:

故障转移分为 connect time connection failover 和 runtime connection failover,connect time connection failover 也就是发起链接时发现节点不可用如何故障转移,10G通过在客户端链接字符串中指定多个ADDRESS添加failover=ON 实现。11G通过DNS指定最多三个SCAN-IP地址。runtime connection failover 就比较复杂,已经链接的session如何在实例或者服务故障时发生故障转移。下面主要讨论运行时的故障转移方式。

runtime connection failover 有以下两种方式 TAF (Transparent Application Failover) 和 FCF (Fast Connection Failover)

TAF:

1: 仅仅对OCI客户端(比如sqlplus)或连接池有效(比如JDBC-OCIdriver)

2: TAF 可实现select级别的断点续传,不包含select-update, 下面我们就要测试该功能

3: TAF 不能实现DML断点续传

FCF :

依赖oracle FAN event 实现,FAN evnet 通过多种方式传播,方式分为:

1:ONS主要有J2EE APP比如JDBC thin,

2:AQ 为.NET APP

3:PMON 通知监听程序,由此也可知道订阅 FAN event事件的客户端基本上全部都支持。

FAN event 分为 HA EVENT 和 LBA EVENT

HA EVENT: service down/up instance down/up

LBA evnet:事件包含percent为负载和service_quality质量。

关于J2EE和.NET客户端配置FCF这里不做讨论,可依据FAN文档进行配置即可。

FCF 不支持断点续传,对于配置好的client接收到FCF event,比如instance down event立刻标记相关的链接失效并且清除,释放连接池中链接到该实例的空闲链接,当前事物立刻回滚,当app捕获事物错误信息要么返回给最终客户,要么重新建立新链接执行该事物。

那么为什么要立刻标记链接为无效呢?这样做的目的就是让该链接不需要等待网络超时操作,立马得到响应!

测试:

下面测试TAF 的select级别的故障转移:

环境为11.2.0.4配置为server pool,如果为admin方式可通过 srvctl add service -h 获取帮助,指定-r -i 参数即可

1:查询server pool

2:添加service并且修改service属性,相关参数意思查看 -h

说明 -P BASIC 为TAF方式 -e SELECT 为级别

3:添加连接串

tnsnames.ora

4:登录实例

sqlplus user_sun/\”sunyunyi@12334QWE\”@fan_conn –在testdb_2实例登录,分配到testdb_1实例

执行select操作,数据较大

其他会话停止testdb_1实例

发现select * from pro_table 操作并没有任何影响继续查询中,证明实现了运行时的故障转移

查询实例名:

已经从testdb_1实例转移到testdb_2实例。

未经允许不得转载:Oracle一体机用户组 » Oracle 故障转移

相关推荐