【Oracle】RAC failover切换之TAF(二)

上次介绍了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:备用实例名
-pTAF策略,有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_loaddata_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配置

 

 

 

 

 

你可能感兴趣的:(【Oracle】RAC failover切换之TAF(二))