RAC连接时的2种方式Connect Time Failver和taf
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