Oracle Failover - TAF 透明应用切换

failover = 

(DESCRIPTION =

(enable=broken)

(LOAD_BALANCE = yes)

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = rac)

(failover_mode=(type=select)(method=basic))

)

)


对于已有连接的失败切换,首先要求FAILOVER = ON,并且设置了FAILOVER_MODE

FAILOVER_MODE的子参数含义:

TYPE:1)session---如果用户连接丢失,将创建一个新的会话连接到备用节点,用户的所有未提交的操作必须回滚,然后再次执行,SELECT操作也被中止.

2)select---如果用户连接丢失,将使用游标和之前的快照继续执行SELECT操作,叫做SQL接管,SQL接管能够无缝接管理的事务类型只有SELECT语句.其它的操作也必须要回滚然后再次执行.

3)none---客户端默认值,禁止SQL接管功能,主要用于测试的目地,在实际应用中TYPE应指定为session 或者select


METHOD:1)basic---仅仅在FAILOVER发生时才连接备用节点

2)preconnect---在用户连接到主节点时同时也在备用节点产生一个连接会话,设置预连接模式,能够快速接管SQL


RETRIES:当前节点失败后,失败切换功能会尝试连接备用节点,这个值确定了尝试的次数,如果仅DELAY被指定,RETRIES默认为5


DELAY:两次尝试之间等待的秒数,如果仅指定RETRIES,DELAY默认为1秒


BACKUP:指定另外一个用于备份连接的网络服务名,当RAC设置为主次模式时,使用此参数,并且METHOD应该设为preconnect


如果要使用预连接,就不能使用客户端负载均衡和服务器端负载均衡,否则没有意义!!!


具有客户端负载均衡及透明应用切换无预连接的tnsnames配置


RAC9I =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = ON)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(FAILOVER_MODE =

(TYPE = select)

(METHOD = basic)

(RETRIES = 10)

(DELAY = 1)

)

)

)

 

无客户端负载均衡有透明应用切换且有预连接的tnsnames配置


RAC9I1 =

(DEscrīptION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_NAME = rac9i1)

(FAILOVER_MODE =

(BACKUP=RAC9I2)

(TYPE = select)

(METHOD = preconnect)

)

)

)

 

RAC9I2 =

(DEscrīptION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_NAME = rac9i2)

(FAILOVER_MODE =

(BACKUP=RAC9I1)

(TYPE = select)

(METHOD = preconnect)

)

)

)


RAC设置为主次模式时的tnsnames配置

无客户端负载均衡(主次模式就不要客户端负载均衡了),有透明应用切换且有预连接的tnsnames配置

RAC9I1 =

(DEscrīptION =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_ROLE = PRIMARY)

(INSTANCE_NAME = rac9i1)

(FAILOVER_MODE =

(BACKUP=RAC9I2)

(TYPE = select)

(METHOD = preconnect)

)

)

)


RAC9I2 =

(DEscrīptION =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_ROLE = SECONDARY)

(INSTANCE_NAME = rac9i2)

(FAILOVER_MODE =

(BACKUP=RAC9I1)

(TYPE = select)

(METHOD = preconnect)

)

)

)


也可以设置为有透明应用切换但无预连接的模式,只要把上面的设置中的METHOD设置为basic。


与双主模式时的配置相比,多了INSTANCE_ROLE这样一个参数,当这个参数为SECONDARY时,这个本地服务命名不直接接收连接,只在主节点失败后才会接收连接。不直接接收连接,并不是指在客户端不能连通这个服务命名,只不过这个连接会被路由到主节点,次要次点并不真正有连接连上去。


自动切换特性是OCI8的内在特性,以下表格列出对TAF的support status

Application or Tool
 Earliest release with TAF Support
 
Oracle Call Interface (Oracle Call Interface)
Release 8
 Release 8
 
ODBC driver
 Release 8.0.5
 
JDBC driver
 Release 8.1.5 (thick driver only)
 
Pro* Pre-compilers
 Release 8.0.6 for transparent reconnect
Release 8.1.5 for full transparent functionality
 
SQL*Plus
 Release 8.0.4
 
Oracle Objects™ for OLE
 Release 8i
 

 

测试


> sqlplus su/su@failover


SQL*Plus: Release 9.0.1.3.0 - Production on Thu Jun 6 19:44:57 2002

(c) Copyright 2001 Oracle Corporation. All rights reserved.


Connected to:

Oracle9i Enterprise Edition Release 9.0.1.3.0 - 64bit Production

With the Partitioning and Real Application Clusters options

JServer Release 9.0.1.3.0 - Production


SQL> col sid format 999

SQL> col serial# format 9999999

SQL> col failover_type format a13

SQL> col failover_method format a15

SQL> col failed_over format a11

SQL> select sid, serial#, failover_type, failover_method, failed_over

from v$session where username = 'SU';


SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

---------- ---------- ------------- --------------- -----------

13 8 SELECT BASIC NO


If you see NONE under failover_type and failover_method, STOP!! You need

to fix your tnsnames.ora file, it does not make sense to continue to test

'shutdown abort' or reboot server.


SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

rac4


*** Due to the load balancing, we need to find out which instance it currently connects to. Now, we can continue our TAF testing.


SQL> select count(*) from

(select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source)

/


*** At this point, I ‘shutdown abort’ rac4 from another window. The query

did not stop and the result should be back.


COUNT(*)

----------

60221


*** The query results is back without any error.


SQL> col sid format 999

SQL> col serial# format 9999999

SQL> col failover_type format a13

SQL> col failover_method format a15

SQL> col failed_over format a11

SQL> select sid, serial#, failover_type, failover_method, failed_over

from v$session where username = 'SU';


SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

---------- ---------- ------------- --------------- -----------

13 5 SELECT BASIC YES


SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

rac1


*** Note here, it failed over to rac1 with different serial# and

failed_over flag was set.


Restarted rac4, make this database back to 4 instances database.


SQL> select count(*) from

(select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source)

/


*** At this point, I ‘shutdown abort’ rac1 from another window. The query

did not stop and the result should be back.

 

COUNT(*)

----------

60221

The query results is back without any error.


SQL>

SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

---------- ---------- ------------- --------------- -----------

14 20 SELECT BASIC YES


SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

rac2


*** Note here, it failed over to rac2 with different sid, serial# and

failed_over flag was set.

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-659989/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-659989/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值