Oracle 10g RAC系列之 FAILOVER(故障转移)

本文详细介绍了Oracle 10g RAC的两种故障转移方式:客户端连接时的故障转移(client-side connect time failover)和透明应用故障转移(TAF)。通过示例展示了如何配置TNSNames.ora以实现故障转移,并解释了不同故障转移模式的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器配置:

机器名称ip地址vip地址备注
RAC1192.168.1.10192.168.1.110rac集群节点1
RAC2192.168.1.11192.168.1.111rac集群节点2
BOSS192.168.1.220-------------共享存储节点、客户端机器

一.客户端连接时故障转移(client-side connect time failover)
在Tnsnames.ora中设置failover=on(failover=on是默认选项),用户首先选择地址列表中的第一个节点连接,如果不成功的话,会选择地址列表的第二个地址,以此类推。正如名称定义,一旦建立连接,当连接节点发生故障时,是不会故障转移的,需要用户重新建立连接。

客户端BOSS(192.168.1.220)tnsnames.ora中配置如下:
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
)
)

[oracle@boss admin]$ sqlplus /nolog
SQL> conn system/oracle@rac
Connected.
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
rac1

由于所有节点都是正常状态,所以连接会到节点1,也就是地址列表中的第一个IP地址,关闭节点rac1
[oracle@rac1 ~]$ srvctl stop instance -d rac -i rac1 -o abort


再次回到BOSS,执行查询报错,等待一段时间执行,还是报错,如果用户想要操作,需要重新建立连接,再连接时会连接到rac2
SQL> select instance_name from v$instance;
select instance_name from v$instance
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


SQL> select instance_name from v$instance;
ERROR:
ORA-03114: not connected to ORACLE


SQL> select instance_name from v$instance;
ERROR:
ORA-03114: not connected to ORACLE


SQL> conn system/oracle@rac
Connected.
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
rac2

 

二.透明应用故障转移TAF(transparent application failover)
客户端连接故障切换最大的问题是,建立连接后如果节点发生故障,是不能做到故障转移的,这样数据库的可用性就会大打折扣,所以oracle又提供了TAF的方法来解决连接时的故障切换,TAF分为客户端的TAF和服务器端的TAF,在这个章节当中,我们简要说明客户端的TAF。既然叫客户端的TAF,就需要在客户端的tnsnames.ora文件中添加FAILOVER_MODE配置,其中的属性主要有四个:
METHOD
BASIC--->感知到节点故障时才创建到其他实例的连接
PRECONNECT--->同时建立多个连接,发生故障时可以立即切换到其他的连接上,比较消耗资源
TYPE
不管TYPE取什么样的值,对于没有提交的事物都要自动回滚
SESSION当执行查询时,所连接节点出现故障,oracle会自动切换到其他节点,查询需要重新执行
SELECT当执行查询时,所连接节点出现故障,oracle会自动切换到其他节点,查询会继续返回剩

下的没有返回的结果,给用户的感觉是操作没有中断,当然oracle要保留游标,上下文等

信息所以比较消耗资源
DELAY 重试时间间隔
RETRIES 重试次数
客户端tnsnames.ora中配置如下:
1.如果METHOD选择BASIC
RAC=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(FAILOVER_MODE =
(TYPE =SELECT)
(METHOD =BASIC)
(RETRIES =180)
(DELAY = 5)
)
)
)
2.如果METHOD选择PRECONNECT

TESTRAC_PRE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =rac2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(FAILOVER_MODE=(TYPE=SELECT)
(METHOD= PRECONNECT)
(BACKUP= TESTRAC_PRE2)
)
)
)

TESTRAC_PRE2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =rac2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(FAILOVER_MODE=(TYPE=SELECT)
(METHOD= PRECONNECT)
(BACKUP= TESTRAC_PRE1)
)
)
)

 

2、服务器端的TAF

客户端的TAF实现起来并不麻烦,配置也很简单,但如果客户端机器很多,如果failover_mode配置需要做出改动,那所有的机器就要维护,基于这样的考虑,Oracle引入了服务器端TAF,通过和service配合使用,把failovermode的配置信息保存在数据库的数据字典中,这样就减少了维护的成本。

关于service,他的作用不仅仅是为了实现failover,但在这个章节中我们只讨论failover的部分。
可以使用DBCA工具创建和管理service,配置完成后,service信息会加入到OCR和数据库的数据字典,并且service会自动启动,由于DBCA是完全图形的操作,比较简单,这里不再介绍。当然也可以使用srvctl工具添加service。无论使用DBCA工具还是使用srvctl命令来管理service,都无法配置TAF的TYPE、DELAY、RETRIES属性,必须使用dbms_service包来修改这些属性

通过数据字典信息确认数据库中应经存在的服务(service)
SQL> @/home/oracle/workshop/service#service.sql的语句在最后

NAMEFAILOVER_MFAILOVER_T GOALCLB_G
-----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值