1. Client-side Connect Time Failover
在客户端的tnsname中配置多个地址,当用户连接时会按照次序尝试各个地址,直到连接成功,连接号以后,不在检测地址是否可用,如果连接到的节点失败,则此session断开,必须用户重新连接。
2. TAF(Transparent Application Failover)
在客户端指定该方式后,连接会自己检查,如果节点失败,会自己切换,用户无感觉,具体需要在tnsname设置failover_mode,如下
LACA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 109.115.101.136)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 109.115.101.137)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = RACDB)
(FAILOVER_MODE =
(TYPE= session)
(METHOD=basic)
(RETRIES=180)
(DELAY =5)
)
)
)
failover_mode几个参数:
type :session和select,前者select时节点失败后断开,后者即使select进行时,也会无缝切换,例如用户查询100条记录在节点一,当返回10条记录后,节点一失败,则会自动切换到节点2,并返回剩下的90条记录,这样,采用select方式的话,要求session记录更多的信息,可能比较消耗资源
METHOD :basic :仅在节点故障时在转移,preconnect: 建立连接时就在各个节点各建立一个连接,实现无缝,但是这样会更耗资源
retries和delays表示重试的次数,和间隔时间
另外,可以在Server中设置taf,这样客户端的tnsname就不必设置failovermode了,甚至连tnsname文件都不需要了,
sqlplus
其中109.115.101.136是一个节点的vip, server_taf是server端taf的service名
为了设置Server的taf,在dbca中选择service management,然后选择add新建一个service,名字任意,然后指定主要节点和备用节点,选择method(在下面)。然后让它自动配置
另外还需要利用dbms_service设置type,retires,delay等参数,其使用方法如下:
exec dbms_service.modify_service(
service_name => 'PSOUG_SOA',
goal => DBMS_SERVICE.GOAL_THROUGHPUT,
aq_ha_notifications => TRUE,
failover_method => DBMS_SERVICE.FAILOVER_METHOD_BASIC,
failover_type => DBMS_SERVICE.FAILOVER_TYPE_SELECT,
failover_retries => 10,
failover_delay => 1,
clb_goal => DBMS_SERVICE.CLB_GOAL_LONG);
另外,在show parameter service中可以看到新建立的service:
SQL> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string RACDB, server_taf
这里我设置的时server_taf