博客统计信息

51cto博客之星
用户名:ylw6006
文章数:154
评论数:217
访问量:175671
无忧币:12444
博客积分:3954
博客等级:7
注册日期:2008-09-05

RAC环境下配置TAF
2012-01-31 09:23:53
版权声明:原创作品,谢绝转载!否则将追究法律责任。

TAF是Transparent Application Failover的英文缩写,顾名思义就是对应用透明的故障转移,举个例子,当应用连接某个oracle数据库的执行查询操作的时候,数据库服务器网络中断或者实例崩溃,在经过delay参数设置的值之后,将自动连接到其他可用的实例,继续进行查询。(前提是执行计划,输出结果集和输出的顺序不能发生变化)

TAF的特性:
1:TAF是ORACLE客户端提供的一项特性,使用TAF,对客户端的环境有一定的要求,比如JAVA的JDBC驱动、Oracle客户端的版本等(8i开始支持TAF);
2:大致上TAF可以分为2种,连接时的TAF和会话建立后TAF;
3:TAF本身与是否RAC环境无关,但一般都用在RAC环境,最小程度的减少最应用的影响,单实例环境下也可以使用TAF,这样使用PL/SQL developer连接数据库,即使数据库实例重启,也不需要重新连接;
4:RAC环境下,还可以把TAF配置在服务器端;
5:配置listener.ora文件的GLOBAL_DBNAME参数后将会禁用TAF

扩展阅读:
http://www.laoxiong.net/taf_part1.html

http://www.laoxiong.net/taf_part2.html

http://www.laoxiong.net/taf_part3.html

一:RAC环境下配置连接时的TAF,客户端为rhel6,当节点2关闭后,新建立的连接会连接到节点1

  1. [root@rhel6 ~]# su - oracle  
  2. [oracle@rhel6 ~]$ cd $ORACLE_HOME/network/admin  
  3. [oracle@rhel6 admin]$ tail  tnsnames.ora   
  4. RAC4 =  
  5.   (DESCRIPTION =  
  6.     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.yang.com)(PORT = 1521))  
  7.     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.yang.com)(PORT = 1521))  
  8.     (LOAD_BALANCE = yes)  
  9.     (FAILOVER = yes)  
  10.     (CONNECT_DATA =  
  11.       (SERVER = DEDICATED)  
  12.       (SERVICE_NAME = rac.yang.com)  
  13.     )  
  14. )  
  15.  
  16. [oracle@rhel6 admin]$ sqlplus sys/123456@rac4 as sysdba  
  17. SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jan 29 13:26:19 2012  
  18. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  19.  
  20. Connected to:  
  21. Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production  
  22. With the Partitioning, Real Application Clusters, OLAP, Data Mining  
  23. and Real Application Testing options  
  24.  
  25. SQL> col instance_name for a20  
  26. SQL> col host_name for a40  
  27. SQL> select instance_name,host_name from v$instance;  
  28.  
  29. INSTANCE_NAME        HOST_NAME  
  30. -------------------- ----------------------------------------  
  31. rac1                 rac1.yang.com  
  32.  
  33. SQL> conn sys/123456@rac4 as sysdba  
  34. Connected.  
  35. SQL> select instance_name,host_name from v$instance;  
  36.  
  37. INSTANCE_NAME        HOST_NAME  
  38. -------------------- ----------------------------------------  
  39. rac2                 rac2.yang.com  
  40.  
  41. [oracle@rac2 ~]$ srvctl stop instance -d rac -i rac2 -o immediate  
  42. [oracle@rac2 ~]$ srvctl status database -d rac  
  43. Instance rac1 is running on node rac1  
  44. Instance rac2 is not running on node rac2  
  45.  
  46. [oracle@rhel6 ~]$ sqlplus sys/123456@rac4 as sysdba  
  47. SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jan 29 14:00:17 2012  
  48. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  49.  
  50. Connected to:  
  51. Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production  
  52. With the Partitioning, Real Application Clusters, OLAP, Data Mining  
  53. and Real Application Testing options  
  54.  
  55. SQL> col instance_name for a20  
  56. SQL> col host_name for a40  
  57. SQL> select instance_name,host_name from v$instance;  
  58.  
  59. INSTANCE_NAME        HOST_NAME  
  60. -------------------- ----------------------------------------  
  61. rac1                 rac1.yang.com  
  62.  
  63. SQL> conn sys/123456@rac4 as sysdba  
  64. Connected.  
  65. SQL> select instance_name,host_name from v$instance;  
  66.  
  67. INSTANCE_NAME        HOST_NAME  
  68. -------------------- ----------------------------------------  
  69. rac1                 rac1.yang.com  
  70.  
  71. SQL> conn sys/123456@rac4 as sysdba  
  72. Connected.  
  73. SQL> select instance_name,host_name from v$instance;  
  74.  
  75. INSTANCE_NAME        HOST_NAME  
  76. -------------------- ----------------------------------------  
  77. rac1                 rac1.yang.com 

2: RAC环境下客户端的taf,10g的rac

  1. [oracle@rhel6 ~]$ cd $ORACLE_HOME/network/admin  
  2. [oracle@rhel6 admin]$ tail -17 tnsnames.ora   
  3. RAC =  
  4.   (DESCRIPTION =  
  5.     (ADDRESS_LIST =  
  6.       (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.yang.com)(PORT = 1521))  
  7.       (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.yang.com)(PORT = 1521))  
  8.     )  
  9.     (LOAD_BALANCE=YES)  
  10.     (FAILOVER=YES)  
  11.     (CONNECT_DATA =  
  12.       (SERVICE_NAME = rac.yang.com)  
  13.       (FAILOVER_MODE =  
  14.        (TYPE = SELECT)  
  15.        (METHOD = BASIC)  
  16.        (RETRIES = 180)  
  17.        (DELAY = 5))  
  18.     )  
  19.   )  
  20.  
  21. [oracle@rhel6 admin]$ sqlplus sys/123456@rac as sysdba  
  22. SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 30 19:14:50 2012  
  23. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  24.  
  25. Connected to:  
  26. Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production  
  27. With the Partitioning, Real Application Clusters, OLAP, Data Mining  
  28. and Real Application Testing options  
  29.  
  30. SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM=1;  
  31.  
  32.        SID  
  33. ----------  
  34.        148  
  35.  
  36. SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER FROM V$SESSION WHERE SID=148;  
  37.  
  38. MACHINE              TYPE       METHOD      FAI  
  39. -------------------- ---------- ----------- ---  
  40. rhel6.yang.com       SELECT     BASIC       NO  
  41.  
  42. SQL> select instance_name from v$instance;  
  43.  
  44. INSTANCE_NAME  
  45. ----------------  
  46. rac1  
  47.  
  48. SQL> select * from dba_source; //构造长查询  
  49.  
  50. [oracle@rac1 ~]$ sqlplus /nolog  
  51. SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jan 30 19:20:18 2012  
  52. Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.  
  53.  
  54. SQL> conn /as sysdba  
  55. Connected.  
  56. SQL> select instance_name from v$instance;  
  57.  
  58. INSTANCE_NAME  
  59. ------------------------------------------------  
  60. rac1  
  61.  
  62. SQL> shutdown abort  
  63. ORACLE instance shut down.  
  64.  
  65. [oracle@rac1 ~]$ srvctl status database -d rac  
  66. Instance rac2 is running on node rac2  
  67. Instance rac1 is not running on node rac1  
  68.  
  69.  
  70. 前面的长查询将会继续,可以看到会话的sid已经改变,连接到了节点2上  
  71. 295528 rows selected.  
  72.  
  73. SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM=1;  
  74.  
  75.        SID  
  76. ----------  
  77.        130  
  78.  
  79. SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER FROM V$SESSION WHERE SID=130;  
  80.  
  81. MACHINE              TYPE       METHOD      FAI  
  82. -------------------- ---------- ----------- ---  
  83. rhel6.yang.com       SELECT     BASIC       YES  
  84.  
  85. SQL> select instance_name from v$instance;  
  86.  
  87. INSTANCE_NAME  
  88. ----------------  
  89. rac2 

3: RAC环境下客户端的taf,11g的rac,11g的rac提供了scan地址的功能,大赞!

  1. [oracle@rhel6 admin]$ tail -14 tnsnames.ora   
  2. NODE =  
  3.   (DESCRIPTION =  
  4.     (ADDRESS_LIST =  
  5.       (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.yang.com)(PORT = 1521))  
  6.     )  
  7.     (CONNECT_DATA =  
  8.       (SERVICE_NAME = rac.yang.com)  
  9.       (FAILOVER_MODE =  
  10.        (TYPE = SELECT)  
  11.        (METHOD = BASIC)  
  12.        (RETRIES = 180)  
  13.        (DELAY = 5))  
  14.     )  
  15.   )  
  16.  
  17. [oracle@rhel6 admin]$ sqlplus sys/Ab123456@node as sysdba  
  18. SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 30 20:41:00 2012  
  19. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  20. Connected to:  
  21. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production  
  22. With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,  
  23. Data Mining and Real Application Testing options  
  24.  
  25. SQL> select instance_name from v$instance;  
  26.  
  27. INSTANCE_NAME  
  28. ----------------  
  29. node2  
  30.  
  31. SQL> select sid from v$mystat where rownum=1;  
  32.  
  33.        SID  
  34. ----------  
  35.        141  
  36.  
  37. SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER FROM V$SESSION WHERE SID=141;  
  38.  
  39. MACHINE              TYPE       METHOD      FAI  
  40. -------------------- ---------- ----------- ---  
  41. rhel6.yang.com       SELECT     BASIC       NO  
  42.  
  43. SQL> create table taf_test(id number,name varchar(20));  
  44. Table created.  
  45.  
  46. SQL> insert into taf_test values (1,'zhangsan');  
  47. 1 row created.  
  48.  
  49. SQL> update taf_test set id=2 where id=1;  
  50. 1 row updated. 

这个时候不提交,使用shutdown abort命令关闭节点2,会话将自动连接到节点1上,但需要输入rollback命令回滚事务,否则不能执行正常的操作!

  1. SQL> select * from taf_test;  
  2.  
  3.         ID NAME  
  4. ---------- ---------------  
  5.          2 zhangsan  
  6.  
  7. [oracle@node2 ~]$ srvctl stop instance -d rac -i node2 -o abort  
  8. [oracle@node2 ~]$ srvctl status database -d rac  
  9. Instance node1 is running on node node1  
  10. Instance node2 is not running on node node2  
  11.  
  12. SQL> select * from dual;  
  13. select * from dual  
  14. *  
  15. ERROR at line 1:  
  16. ORA-25402: transaction must roll back  
  17.  
  18. SQL> rollback;  
  19. Rollback complete.  
  20.  
  21. SQL> select instance_name from v$instance;  
  22.  
  23. INSTANCE_NAME  
  24. ----------------  
  25. node1 

4:服务器端的taf,在我的测试中配置失败,详情http://www.itpub.net/thread-1568414-1-1.html

本文出自 “斩月” 博客,谢绝转载!

分享至
更多
一键收藏,随时查看,分享好友!
yisky
1人
了这篇文章
类别:RAC技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2012-02-15 14:26:10
好东西!
博主回复:
2012-02-15 14:56:13
可惜sever side的taf一直弄不出来,早上查了下,貌似jdbc的thin不支持taf,只能用fcf,一大堆的悲剧…

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: