上次介绍了client-side TAF配置,但是client-side TAF配置也存在它的局限性,就是需要在每台客户端tnsnames.ora上都要进行配置,如果配置上有修改就要修改每一台客户端上的配置,十分麻烦。而server-side TAF设置在服务器端设置,随时修改即可生效,而不用修改客户端设置。
在server-side TAF设置中多出了一个概念那就是instance_role,
PREFERRED:首选实例,连接这个服务的时候会优先连接PREFERRED的实例,当然PREFERRED可以不止有一个。
AVAILABLE:备选实例,当连接PREFERRED中所有的实例都失败时会连接AVILABLE中的实例。
在客户端设置Service的基本命令是:
srvctl add service
后边有这几个参数设置
-s:服务名
-r:首选实例名
-a:备用实例名
-p:TAF策略,有none,basic,preconnect三个值可选
同时Server-Side TAF设置不止能用来failover切换也能用于业务分割,把数据库的实例分成几个服务,不同的业务切割之后连接到不同的服务上,减少节点间的通信,消除cache fusion带来的负面影响。
下面我们以业务分割的使用来示范Server-Side TAF的配置。
首先我们来查看当前数据库所拥有的实例:
SYS@RACDB1> select instance_name from gv$instance order by 1;
INSTANCE_NAME
----------------
RACDB1
RACDB2
RACDB3
RACDB4
下面我们通过设置两个服务data_load和data_query,通过两个服务来分开处理数据加载和数据查询的任务。
[oracle@rac1 ~]$ srvctl add service -d RACDB-s data_load -r "RACDB1,RACDB2"
[oracle@rac1 ~]$ srvctl add service -d RACDB -s data_query -r "RACDB3,RACDB3"
此时服务配置完毕,启动两个服务
[oracle@rac1 ~]$ srvctl start service -d RACDB -s data_load
[oracle@rac1 ~]$ srvctl start service -d RACDB -s data_query
查看服务运行情况:
[oracle@rac1 ~]$ crs_stat-t
Name Type Target State Host
---------------- --------------- -------- -------- -------
...略
ora....load.cs application ONLINE ONLINE rac1
ora....DB1.srv application ONLINE ONLINE rac1
ora....DB2.srv application ONLINE ONLINE rac2
ora....uery.cs application ONLINE ONLINE rac3
ora....DB3.srv application ONLINE ONLINE rac3
ora....DB4.srv application ONLINE ONLINE rac4
...略
可以看到此时服务已经完全运行起来了,此时将不同的业务分别连接到不同的服务上即可。
下面附上一些其他会用到的命令:
设置服务开机启动
[oracle@rac1 ~]srvctl enable service -d RACDB -s data_load
删除该服务
[oracle@rac1 ~] srvctl stop service -d RACDB -s data_load 停止服务
[oracle@rac1 ~] srvctl disable service -d RACDB -s data_load 禁止开机启动
[oracle@rac1 ~] srvctl remove service -d RACDB -s data_load 删除服务
这时候在OCR中的内容已经删除了,但数据字典还保留着service的内容,继续清除数据字典
SYS@RACDB1> begin
2 dbms_service.delete_service(service_name=>'data_load');
3 end;
4 /
PL/SQL procedure successfully completed.
然后show parameter看一下
SYS@RACDB1> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string RACDB
最后附上client-side TAF配置的链接:
Client-Side TAF配置