Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
实例:
jdbc:oracle:thin:@ (DESCRIPTION =
(LOAD_BALANCE = OFF)
(FAILOVER = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.8.130)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.8.131)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cwdb)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
load_blance=on/off
on在最初建立连接的时候会随机选择一个节点进行连接,由于是随机的所以可以起到负载均衡的作用。如果此时连接的节点出现故障,在开启failover的情况下会自动随机连接另外一个节点,如果所有节点都无法建立连接则返回错误。
off从第一个节点开始建立连接,如果第一个节点不能建立连接则在开启failover的情况下继续连接下一个节点,直到最后一个节点也无法建立连接则返回错误。
Default
on for DESCRIPTION_LIST
Values
yes | on | true
no | off | false
failover=on/off
为多个协议地址启用或禁用连接时间故障切换。如果将参数设置为 on、yes 或 true,则在连接时,如果第一个协议地址失败,Oracle Net 将故障转到另一个地址。将参数设置为 off、no 或 false 时,Oracle Net 将尝试一个协议地址。
将此参数置于 DESCRIPTION_LIST 参数、描述参数或 ADDRESS_LIST 参数下.
默认 在DESCRIPTION_LIST,DESCRIPTION,and ADDRESS_LIST下是on
Values
yes | on | true
no | off | false
type=session/select/none
用于定义发生故障时对完成的sql 语句如何处理,其中有2种类型:session 和select.
这2种方式对于未提交的事务都会自动回滚,区别在于对select 语句的处理,对于select,用户正在执行的select语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。
假设用户正在节点1上执行查询,整个结果集共有100条记录,现在已从节点1上返回10条记录,这时节点1宕机,用户连接被转移到节点2上,如果是session模式,则需要重新执行查询语句;如果是select方式,会从节点2上继续返回剩下的90天记录,而已经从节点1返回的10条记录不会重复返回给用户,对于用户而言,感受不到这种切换。
显然为了实现select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。
TYPE=select一定的。选session可能会丢失部分查询结果。
method=perconnect/basic
basic:只有当感知到当前节点发生故障时才连接到其他节点
perconnect:在最初建立连接的时候就建立到所有实例的连接,当前节点发生故障可以快速切换到其他实例上。
两个参数的设置区别就在于当前节点出现错误,转换到其他节点上所花的时间的长短,perconnect固然速度会很快,但是也会消耗一定的额外资源,换句话说就是拿资源换速度。如何取舍可根据实际情况自己确定。
METHOD=PRECONNECT最保险的方式。basic也行,参考目前数据库服务器的剩余资源选择。
RETRIES:当前节点失败后,失败切换功能会尝试连接备用节点,这个值确定了尝试的次数,如果仅DELAY被指定,RETRIES默认为5
DELAY:两次尝试之间等待的秒数,如果仅指定RETRIES,DELAY默认为1秒
BACKUP:指定另外一个用于备份连接的网络服务名,当RAC设置为主次模式时,使用此参数,并且METHOD应该设为preconnect