RealApplication Testing options
SQL> showparameter instance_name
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
instance_name string FRAC2
SQL> create tablebig_a as select * from dba_objects;
SQL>insert intobig_a select * from big_a;
为了保证数据的充足性,多执行几次上面insert语句,由于磁盘空间限制,我在此执行了4次,共1203888条记录。
由以上信息可知用户连接到frac2实例,此时可以执行一些DML操作:
SQL> selectOBJECT_TYPE,count(*) from big_a group by object_type;
在查询未完成之前,把frac2实例进行宕机,会返回如下错误:
SQL> shutdownabort;
ORACLE instance shutdown.
SQL> selectOBJECT_TYPE,count(*) from dba_objects group by object_type;
selectOBJECT_TYPE,count(*) from dba_objects group by object_type
*
ERROR at line 1:
ORA-25408: can notsafely replay call
再次查看的是时候发现已经把会话自动切换到frac1实例:
SQL> /
OBJECT_TYPE COUNT(*)
------------------------------------------------
EDITION 1
INDEX PARTITION 302
TABLESUBPARTITION 32
CONSUMER GROUP 25
SEQUENCE 229
TABLE 2936
INDEX 5266
SYNONYM 28152
VIEW 5186
FUNCTION 305
JAVA CLASS 23165
JAVA SOURCE 2
INDEXTYPE 9
CLUSTER 10
TYPE 2913
RESOURCE PLAN 10
JOB 14
eva lUATIONCONTEXT 15
45 rows selected.
SQL> showparameter instance_name;
NAME TYPE VALUE
---------------------------------------------------------------------------- ------
instance_name string FRAC1
SQL> !hostname
frac1
Server-Side TAF
第三种方式是Server-Side TAF,但从名字上就可以猜出这种方式和之前的TAF有一定的关系。事实上也是这样,可以把Server-Side TAF看做是TAF的一个变种。首先Server-Side TAF也是TAF,所有TAF的特点他都具有;其次,这种TAF是在服务器上配置,而不像TAF是在客户端配置的。
前面介绍的Client-Side TAF,配置过程需要修改客户端tnsnames.ora文件,如果有很多客户端使用这个数据库,那么每次微小的参数调整都要把书友计算机更改一遍,即低效又易出错。而Server-Side TAF通过结合Service,在数据库里保存FAIL_MODE的配置,把所有的TAF配置保存在数据字典里,从而省去了客户端的配置工作,现在客户端的TNS文件就不需要任何TAF的配置选项。
从配置参数而言,Service-Side TAF相比多了一个Instance Role(实力角色)的概念。所谓实力角色,就是当有多个Instance参与一个Service时,可以配置有限使用哪一个Instance为用户提供服务。用户总共有两种可选角色。
a. PREFERRED:首选实例,会优先选择拥有这个角色的实例提供服务。
b. AVILABLE:后备实例,用户会优先连接PREFERRD的Instance,当PREFERRED的Instance不可用时,才会被转移到AVILABLE的实例上。
要想使用Server-Side TAF必须配置Server。Server可以在创建数据库时创建,也可以在数据库创建之后修改;既可以通过配置向导也可以通过命令行方式配置。下面分别演示用DBCA和手工两种方式配置Service的过程。