TAF定义
Transparent Application Failover(透明应用故障转移)是JDBC和OCI驱动的一个特性。当会话连接的数据库实例发生宕机时TAF允许应用程序自动重新连接到数据库,此时之前未提交的事务将会回滚且保证正在运行的查询操作会话不发生中断。
从而实现客户端应用程序对后台RAC数据库部分实例失败毫无感知,保证业务操作的连续性。
2TAF分类
session:session故障转移在可用实例上重建连接和会话。
select:除了重建会话,select故障转移也允许重新执行正在处理的查询。
TAF重建故障转移的连接有两种方法,basic和preconnect。
basic:仅当实例的第一个连接失败时重建第二个连接。
preconnect:当客户端登录数据库时同时建议两个连接,集群件启动两个服务,一个主服务和另一个影子服务。
TAF可以使用tnsnames.ora文件配置在客户端或者使用srvctl工具配置在数据库服务器端。优先选择配置在服务器端是因为这样更便于把配置信息放在一个地方。
本文描述使用srvctl工具将TAF以数据库服务方式配置在服务器端的步骤和过程。
3srvctl命令详解
srvctl在OCR里定义了所有节点都能访问的服务,命令语法如下:
srvctl add service -d -s
-r ""[-a ""] [-P {BASIC | NONE | PRECONNECT}]
-g [-c {UNIFORM| SINGLETON}]
[-k ]
[-l[PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]]
[-y {AUTOMATIC |MANUAL}]
[-q{TRUE|FALSE}]
[-x{TRUE|FALSE}]
[-j{SHORT|LONG}]
[-B{NONE|SERVICE_TIME|THROUGHPUT}]
[-e{NONE|SESSION|SELECT}]
[-m{NONE|BASIC}]
[-z ]
[-w ]
其中
-r "" [-a ""] [-P{BASIC | NONE | PRECONNECT}]
这个语法仅仅在“Administrator-managed”数据库中是可用的,它支持preconnect方法
-g [-c {UNIFORM | SINGLETON}]
这个语法仅仅在“Policy-managed”数据库中并且当preconnect方法不可用时方可使用
[-e {NONE|SESSION|SELECT}]
这个定义TAF的类型是session还是select
[-m {NONE|BASIC}]
这个定义TAF的方法
[-z ]
这个定义当故障转移时尝试连接的次数
[-w ]
这个定义尝试连接时等待的时间,单位(秒)
4实验步骤
数据库版本:Oracle11.2.0.3RAC
操作系统:RedHat5.6
主机名和IP配置如下:
配置目标:把RAC系统配置为“主-备”模式,即平时所有连接都在rac01这个节点上,当rac01节点出现故障时 利用TAF功能把连接重置到rac02节点上并且保证查询语句的连续执行,会话不发生中断。
1)首先使用srvctl工具添加数据库服务(使用oracle用户执行下面操作)
优先实例是racdb1,备用实例是racdb2
如果想配置成负载均衡模式,即没有“主-备”这个概念,那如下面命令配置,此时没有-a选项
2)接着启动这个新建的服务
3)修改新建服务的属性
主要是设置-z(连接次数)、-w(连接等待)参数
4)检查监听程序是否有新建服务的注册信息
使用lsnrctl status命令检查,可以在rac01节点上看到已经有一个名为“server_taf”的服务(如下图所示)。
此时rac02节点上监听器没有这个服务信息。
5)在客户端创建或编辑tnsnames.ora文件,添加一个网络服务名
此处的192.168.1.56对应的是RAC集群的SCAN IP地址,而service_name为我们新建的server_taf。
6)验证测试
通过DOS窗口下的SQLPLUS环境使用system用户连接RAC环境,检查发现每次连接都是被引导到racdb1实例上,racdb2确实在集群中充当备用节点。
此时通过关闭节点1主机,或者其它模拟racdb1实例宕机的方法来使集群发生主备切换。此处我们使用shutdownimmediate命令关闭racdb1实例。
再次在刚才DOS窗口下连接的SQLPLUS环境中执行查询命令,发现
1. 此时连接的实例已经变成了racdb2,表明连接被成功转移到RAC备用实例。
2. 查询没有出现“通信通道文件结束”之类的报错,表明会话被安全转移没有发生中断。
至此TAF功能测试成功。