Chinaunix首页 | 论坛 | 博客
  • 博客访问: 649400
  • 博文数量: 70
  • 博客积分: 145
  • 博客等级: 入伍新兵
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-11 08:15
个人简介

没有简介就是最好的简介

文章分类

全部博文(70)

文章存档

2020年(1)

2018年(2)

2017年(3)

2016年(11)

2015年(12)

2014年(16)

2013年(19)

2012年(6)

我的朋友

分类: Oracle

2014-02-14 15:34:15

TAF就是在连接建立以后、应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他的健康的实例上。对于应用程序而言,这个迁移过程是透明的,不需要用户的介入,当然在迁移过程中,未提交的事物会回滚。

在配置TAF的时候需要用到下面参数
1. METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值。
       BASIC: 是指在感知到节点故障时才创建到其他实例的连接。
       PRECONNECT: 是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
两种方法比较: BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源,两者就是是用时间换资源和用资源换时间的区别。
2. TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session 和select.
这2种方式对于未提交的事务都会自动回滚,区别在于对select 语句的处理,对于select,用户正在执行的select语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。
假设用户正在节点1上执行查询,整个结果集共有100条记录,现在已从节点1上返回10条记录,这时节点1宕机,用户连接被转移到节点2上,如果是session模式,则需要重新执行查询语句;如果是select方式,会从节点2上继续返回剩下的90天记录,而已经从节点1返回的10条记录不会重复返回给用户,对于用户而言,感受不到这种切换。
显然为了实现select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。
3. DELAY 和 RETRIES: 这2个参数分别代表重试间隔时间和重试次数。
具体配置方式就是在客户端的tnsnames.ora的文件中添加类似下面的选项
hnzz =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hnzz)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 180)
        (DELAY = 5)
      )
    )
  )
查看服务端的监听状态及service
[oracle@node1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 14-FEB-2014 15:27:33

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date                14-FEB-2014 14:43:13
Uptime                    0 days 0 hr. 44 min. 20 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /oracle/app/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "hnzz" has 1 instance(s).
  Instance "hnzz1", status READY, has 2 handler(s) for this service...
Service "hnzzXDB" has 1 instance(s).
  Instance "hnzz1", status READY, has 1 handler(s) for this service...
Service "hnzz_XPT" has 1 instance(s).
  Instance "hnzz1", status READY, has 2 handler(s) for this service...
The command completed successfully

SQL> show parameter service ;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      hnzz

客户端测试
C:\Documents and Settings\zzu>sqlplus system/oracle@hnzz

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 2月 14 15:23:12 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> show parameter instance_name;

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
instance_name                        string
hnzz2

在服务端将实例2关闭,
$ srvctl stop instance -d hnzz -i hnzz2
在客户端查看
SQL> select status from v$instance;

STATUS
------------------------
OPEN       ##########链接没有断掉

SQL> show parameter instance_name;

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
instance_name                        string
hnzz1    ###########链接自动漂移到另外一个实例中
SQL>
小结:
  1.   客户端TAF方式实现了Oracle客户端到服务器透明故障转移  
  2.   主要在客户端tnsnames.ora配置FAILOVER_MODE来实现基于客户端的TAF  
  3.   FAILOVER_MODE中基于连接方式(METHOD)可以分为BASIC与PRECONNECT两种方式,后者开销更大,延迟小,与前者相反  
  4.   FAILOVER_MODE中TYPE可以分为select与session两种方式,两者所有未提交的事务全部回滚,select方式会failover查询session方式不会。select方式多用在OLAP类型数据库,而session多用在OLTP类型数据库  
  5.  一旦所在的实例发生故障,会自动failover,无需手动重新连接,这就是与连接时故障转移所不同的。 

阅读(1227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~