《【TAF】使用Oracle RAC的TAF技术实现不间断查询》(http://space.itpub.net/519536/viewspace-676654)文中谈到当FAILOVER_MODE类型为SELECT时可以实现查询语句不间断的返回结果。另外一种类型是SESSION,看一看SESSION类型会给我们带来什么样的效果。
1.在tnsnames.ora文件中添加测试连接串
RACDB1@rac1 /home/oracle$ vi $ORACLE_HOME/network/admin/tnsnames.ora
testractafsession =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(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”。
2.使用testractaf连接串连接到数据库
RACDB1@rac1 /home/oracle$ sqlplus sec/sec@testractafsession
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Oct 25 21:16:47 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
RACDB1
可见,此时sqlplus连接到了RAC的第一个实例RACDB1上。
3.手工停止RACDB1实例
[root@rac2 ~]# srvctl stop instance -d RACDB -i RACDB1
4.重新确认查询语句所在实例
SQL> select instance_name from v$instance;
select instance_name from v$instance
*
ERROR at line 1:
ORA-25408: can not safely replay call
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
RACDB2
此时在原sqlplus界面下提交查询SQL语句后立即收到“ORA-25408: can not safely replay call”错误,但是,再次提交同样的查询便会得到结果,结果表明此时已经切换到另外一个实例RACDB2上。
这里的报错和不使用TAF技术的报错是有本质区别的,这里最重要的优势是:不需要重新发起连接。
5.恢复实例RACDB1,继续
[root@rac2 ~]# srvctl start instance -d RACDB -i RACDB1
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
RACDB2
6.此处我们模拟一个长时间无法返回全部信息的查询语句
SQL> select * from all_objects a,all_objects b,all_objects c where a.object_id=b.object_id and a.object_id=c.object_id;
…… 此处省略输出信息 ……
7.手工停止RACDB2实例
[root@rac2 ~]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.inst application ONLINE ONLINE rac1
ora....B2.inst application ONLINE ONLINE rac2
ora.RACDB.db application ONLINE ONLINE rac2
ora....DB1.srv application ONLINE ONLINE rac1
ora....DB2.srv application ONLINE ONLINE rac2
ora.....taf.cs application ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
[root@rac2 ~]# srvctl stop instance -d RACDB -i RACDB2
[root@rac2 ~]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.inst application ONLINE ONLINE rac1
ora....B2.inst application OFFLINE OFFLINE
ora.RACDB.db application ONLINE ONLINE rac2
ora....DB1.srv application ONLINE ONLINE rac1
ora....DB2.srv application ONLINE OFFLINE
ora.....taf.cs application ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
8.结论
当RACDB2实例终止后,持续返回的结果信息被中断,紧随其后的是报错信息“ORA-25401: can not continue fetches”,在报错的同时该连接已经重新连接到其他可用的数据库实例上,后续的SQL语句不受影响。
错误提示信息如下:
…… 省略输出信息 ……
…… 省略输出信息 ……
ERROR:
ORA-25401: can not continue fetches
2085 rows selected.
SQL>
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
RACDB1
9.小结
本文给出了当故障来临时在FAILOVER_MODE中TYPE选择“SESSION”时的应对特点,此时与“SELECT”类型有一些区别。实例故障出现时,这里选择了报错并终止。在这种配置下可以结合具体应用来应对这些报错。在具体应用设计的过程中需要充分考虑Failover不同模式下的应对方案。
Good luck.
secooler
10.10.25
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994093/
,如需转载,请注明出处,否则将追究法律责任。