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


你可能感兴趣的:(RAC连接时的2种方式Connect Time Failver和taf)