oracleRACclient-sideTAF&&server-sideTAF(一)

2014-11-24 12:53:24 · 作者: · 浏览: 3

今天是2014-03-19,对oracle TAF技术整理一下学习笔记,记录如下:

####################################################################################
failover_mode 参数 描述
####################################################################################
backup 指定用于创建备份连接的本地服务名,当使用preconnect预创建连接
的时候应该指明这个参数值
method TAF的配置包含如下两种failover切换方式
preconnect:创建到切换实例的预连接,提供快速failover的能力
basic:在发生failover的时候创建连接
retries failover发生后尝试连接的次数,如果指明了delay参数,那么retries默认为5
type Taf的配置包含如下三种failover的类型:
session:如果用户连接丢失,新的会话将自动被创建。这种类型的failover不能
尝试恢复select操作
select:如果用户连接丢失,新创建的会话将继续之前失败之后的select操作
none 这是默认值,不具备failover能力。这个能被明确的指明用于防止failover
的发生。

注意:这些参数只能手动设置,不能在listener.ora文件中SID_LIST_条目中设置global_dbname参数,静态配置的全局数据

库名称不能使用TAF功能。另外jdbc thin驱动方式无法使用TAF技术。
实现TAF有两种方式一种为client-side TAF 另一种为server-side TAF ,下面先介绍第一种client-side TAF:

RAC =
  (DESCRIPTION =
      (FAILOVER=ON)
    (LOAD_BALANCE=ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-one)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-two)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Rac2)
      (FAILOVER_MODE=
      (TYPE=SELECT)
      (METHOD=BASIC))
    )
  )

该方式使用了连接时failover、client-side TAF 和客户端负载均衡,当该客户端尝试连接数据库的时候会在address中随即挑选一个用于连接数据库,假如选择rac-one如果连接失败,那么就会使用rac-two进行连接,如果都失败那么将提出连接错误。当客户端已经连接到数据库的时候,突然rac-one实例关闭,那么该客户端随即创建与rac-two的会话连接这个过程报错select的操作。例外我们可以使用retries和delay参数来指定重新连接次数和延迟重新连接的秒数。如下是重试连接rac-one5次每次120秒。
eg:

RAC =
  (DESCRIPTION =
    (FAILOVER=ON)
    (LOAD_BALANCE=OFF)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-one-vip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-two-vip)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Rac2)
      (FAILOVER_MODE=
      (TYPE=SELECT)
      (METHOD=BASIC)
      (RETRIES=5)
      (DELAY=120)
      )
    )
  )


另外在failover_mode中的method中有preconnect(预连接),该说明在client-side TAF中分配一个主连接的同时预先分配备用连接。
eg:

RAC1 =
  (DESCRIPTION =
      (FAILOVER=ON)
    (LOAD_BALANCE=OFF)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-one)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Rac2)
      (FAILOVER_MODE=
      (METHOD=PRECONNECT)
      (BACKUP=RAC2)
      (TYPE=SELECT)
      (RETRIES=5)
      (DELAY=30)
      )
    )
  )
RAC2 =
  (DESCRIPTION =
      (FAILOVER=ON)
    (LOAD_BALANCE=OFF)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-two)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Rac2)
      (FAILOVER_MODE=
      (METHOD=PRECONNECT)
      (BACKUP=RAC1)
      (TYPE=SELECT)
      (RETRIES=5)
      (DELAY=30)
      )      
    )
  )


验证client-side TAF:
首先确认/etc/hosts文件如下:

[root@rac-one ~]# more /etc/hosts
127.0.0.1     localhost localhost.localdomain
192.168.2.11  openfiler1
192.168.1.112 rac-two-priv
192.168.1.111 rac-one-priv
192.168.4.111 rac-one rac-one.localdomain
192.168.4.112 rac-two rac-two.localdomain
192.168.4.113 rac-one-vip
192.168.4.114 rac-two-vip
[root@rac-one ~]# 


查看客户端tnsname.ora配置:

RAC =
  (DESCRIPTION =
      (FAILOVER=ON)
    (LOAD_BALANCE=ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-two-vip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-one-vip)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Rac)
      (FAILEOVER_MODE=
      (METHOD=BASIC)
      (TYPE=SELECT)
      (RETRIES=5)
      (DELAY=60))
      
    )
  )


用户连接数据库,然后查看数据库会话信息,(注意还需要修改windows的hosts名称否则无法识别rac-two-vip或是rac-one-vip):
rac-one节点:

SQL> r
  1    select inst_id,username,failover_type,failover_method,failed_over from gv$session where username in ('SYSTEM','SY