oracle-11gR2 RAC service Side TAF的配置

12 篇文章 0 订阅

现在使用oracle 11gr2 版本的RAC已经越来越多了,这里我们来测试一下服务器端的TAF。

TAF( Transparent Application Failover  allows Oracle clients to reconnect to a surviving instance in the event of a failure of the instance to which it is connected. There are two types of TAF available, SESSION and SELECT. 

TAF允许oracle客户端重新连接到一个可持续的实例,当客户端连接的实例出现失败时。有2中有效的TAF类型,session and select.


SESSION: Session Failover re-creates the connections and sessions to the surviving instance.

session: 会话失败重建连接,会话连接到依然存在的实例
SELECT:  In addition to recreating the session, Select Failover also replays the queries that were in progress. 

select:除重建session之外,在进程中,select failover 回放以前的请求。

There are two methods in which TAF estabilishes the failover connection, BASIC and PRECONNECT.

 有2中模式在TAF建立的故障转移连接,basic 和preconnect.

BASIC: The second connection is re-established only after the first connection to the instance failed.

basic:第二次连接被重新建立 仅仅在第一次连接的实例出现失败以后。
PRECONNECT: Two connections are established when the client logs in to the database. A login to database will create two connection at the same time. For this to work, clusterware actually starts two services. One main service and another shadow service. 

preconnect:2次连接被建立,当客户端连接到数据库。一个登录数据库将创建2个连接在同一时间。在这种模式下,集群通常启动2种service。主服务和另外的影子服务。

TAF can be configured at the Oracle Client side in tnsnames.ora or at the Database Server side using the SRVCTL utility.  Configuring it at the server is preferred as it is convenient to put the configuration in one place i.e. on the server. This article covers the configuration at the server using SRVCTL.  TAF configuration is associated with the database service. 

TAF可以配置在oracle客户端的tnsnames.ora文件中或者在数据库端使用srvctl命令。配置在服务器端是首选,他方便的将配置放在一个地方。这篇文章包括服务器端使用srvctl 配置服务。TAF配置与数据库服务是交织在一起的。

1. Create the service with SRVCTL
SRVCTL defines services in OCR which is accessible across nodes. The service configuration details can be viewed with the SRVCTL config service command.

2. Start the Service with SRVCTL
When the service is started with SRVCTL, it actually creates a service in the database. The service name and the configuration details of the service created at the database can be viewed with DBA_SERVICES view. Then the SERVICE_NAMES database parameter is set, which allows PMON to register this service with the listener.  Once the new service is registered, remote client connections can established through the listener.

NOTE:
The clusterware automatically starts/stops and manages the services in the database according to the configuration of the service. Manually setting the SERVICE_NAMES parameter in RAC is not allowed as clusterware manages setting this parameter.

Let's have a look at the srvctl syntax for creating service. Databases in 11gR2 can be Administrator-managed or Policy-managed. Certain options

创建一个service服务

-->在oracle用户下执行
[oracle@rac-2 ~]$ srvctl add service -d oratest -s ervice1 -r oratest1,oratest2 -P basic -e select -m basic -q true -j long -z 10 -w 2


下面是命令的帮助信息
srvctl add service -d <db_unique_name> -s <service_name> 
-r "<preferred_list>" [-a "<available_list>"] [-P {BASIC | NONE | PRECONNECT}] 
-g <server_pool> [-c {UNIFORM | SINGLETON}] 
[-k <net_num>] 
[-l [PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]] 
[-y {AUTOMATIC | MANUAL}] 
[-q {TRUE|FALSE}] 
[-x {TRUE|FALSE}] 
[-j {SHORT|LONG}] 
[-B {NONE|SERVICE_TIME|THROUGHPUT}] 
[-e {NONE|SESSION|SELECT}] 
[-m {NONE|BASIC}] 
[-z <failover_retries>] 
[-w <failover_delay>]
信息说明:

FAILOVER_MODE项分析  
  FAILOVER_MODE项是实现TAF的主要配置内容,下面对其进行描述.  
    
  METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值  
    BASIC: 客户端通过地址列表成功建立连接后,即仅当客户端感知到节点故障时才创建到其他实例的连接  
    PRECONNECT: 预连接模式,是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上  
      
    上述两种方式各有优劣,前者建立连接的开销相对较小,但failover时会产生延迟,而后者正好与前者相反  
      
  TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session 和select  
    select:使用select方式,Oracle net会跟踪事务期间的所有select语句,并跟踪每一个与当前select相关的游标已返回多少行给客户  
      端。此时,假定select查询已返回500行,客户端当前连接的节点出现故障,Oracle Net自动建立连接到幸存的实例上并继续返回  
      剩余的行数给客户端。假定总行数为1500,行,则1000行从剩余节点返回。  
    session: 使用session方式,所有select查询相关的结果在重新建立新的连接后将全部丢失,需要重新发布select命令。  
      
    上述两种方式适用于不同的情形,对于select方式,通常使用与OLAP数据库,而对于session方式则使用与OLTP数据库。因为select   
    方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源。  
      
    其次,两种方式期间所有未提交的DML事务将自动回滚且必须重启启动。alter session语句不会failover。  
    临时对象不会failover也不能被重新启动。  
      
  RETRIES: 表示重试的次数  
  DELAY:表示重试的间隔时间  

启动service服务

[oracle@rac-2 ~]$ srvctl start service -d oratest -s ervice1

查询建立的service服务信息

select name,failover_method,failover_type,failover_retries,goal,clb_goal,aq_ha_notifications from dba_services where name='ervice1';

查询连接建立信息

select inst_id,username,service_name,failover_type,failover_method,failed_over from gv$session where username='TEST' and service_name='ervice1';
select username,service_name,failover_type,failover_method,failed_over from v$session where username='TEST' and service_name='ervice1';


连接配置总结

1、客户端版本是11.2.0.3

客户端可以做如下配置

-->使用scanIP
scan =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.49.245)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ervice1)
    )
  )
-->使用vip
racvip = 
	(DESCRIPTION=
		(LOAD_BALANCE=yes)
		(ADDRESS=(PROTOCOL=TCP)(HOST= 172.24.49.243)(PORT=1521))
		(ADDRESS=(PROTOCOL=TCP)(HOST= 172.24.49.244)(PORT=1521))
		(CONNECT_DATA=
			(SERVICE_NAME= ervice1)
		)
	)

2、客户端为11.2.0.3以下版本

-->客户端taf
racvip1 = 
	(DESCRIPTION=
		(LOAD_BALANCE=yes)
		(ADDRESS=(PROTOCOL=TCP)(HOST= 172.24.49.243)(PORT=1521))
		(ADDRESS=(PROTOCOL=TCP)(HOST= 172.24.49.244)(PORT=1521))
		(CONNECT_DATA=
			(SERVICE_NAME= oratest)
			(FAILOVER_MODE =  
      	(TYPE = session)  
       	(METHOD = basic)  
       	(RETRIES = 180  
       	(DELAY = 5))  
		)
	)

首先使用scanIP测试节点失败是否自动切换

节点之间可以实现负载均衡
测试节点故障,是否可以自动切换,在11.2.0.3以下客户端版本,都无法实现。
-->保持客户端与节点1连接
SQL> show parameter instance_name;

NAME                                 TYPE
------------------------------------ --------------
VALUE
------------------------------
instance_name                        string
oratest1
-->查看连接的节点,关闭
SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      oratest1
SQL> 
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
-->在客户端再次执行
SQL> show parameter instance_name;
ORA-03113: end-of-file on communication channel
Process ID: 27658
Session ID: 143 Serial number: 317
SQL> show parameter instance_name;
ERROR:
ORA-03114: not connected to ORACLE
-->退出后,可以重新连接到节点2。
-->在这种情况下,无法实现故障的自动切换
SQL> select name,failover_method,failover_type,failover_retries,goal,clb_goal,aq_ha_notifications from dba_services where name='service1';

NAME                           FAILOVER_METHOD                FAILOVER_TYPE                  FAILOVER_RETRIES GOAL         CLB_G AQ_
------------------------------ ------------------------------ ------------------------------ ---------------- ------------ ----- ---
service1                       BASIC                          SELECT                                        5 NONE         LONG  YES
SQL> select inst_id,username,service_name,failover_type,failover_method,failed_over from gv$session where username='SYS' and service_name='service1';

   INST_ID USERNAME                       SERVICE_NAME                   FAILOVER_TYPE                  FAILOVER_METHOD                FAI
---------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ---
         1 SYS                            service1                       NONE                           NONE                           NO
-->
在11.2.0.3客户端可以实现

-->在11.2.0.3客户端,可以实现
-->
[oracle@rac-2 admin]$ sqlplus test/test@scan

SQL*Plus: Release 11.2.0.3.0 Production on Tue Apr 8 10:42:29 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> show user;
USER is "TEST"
SQL> 
SQL> 
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T1
T2
-->
SQL> select inst_id,username,service_name,failover_type,failover_method,failed_over from gv$session where username='TEST' and service_name='ervice1';

   INST_ID USERNAME
---------- ------------------------------
SERVICE_NAME                                                     FAILOVER_TYPE
---------------------------------------------------------------- -------------
FAILOVER_M FAI
---------- ---
         1 TEST
ervice1                                                          SELECT
BASIC      NO

-->
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
-->
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T1
T2

使用vip可以在11.2.0.3客户端实现

-->vip在11.2.0.1客户单也无法实现
-->测试在11.2.0.3客户端
[oracle@rac-2 admin]$ sqlplus test/test@racvip

SQL*Plus: Release 11.2.0.3.0 Production on Tue Apr 8 10:49:11 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      oratest1
SQL> 

-->
SQL> select inst_id,username,service_name,failover_type,failover_method,failed_over from gv$session where username='TEST' and service_name='ervice1';

   INST_ID USERNAME                       SERVICE_NAME                   FAILOVER_TYPE FAILOVER_M FAI
---------- ------------------------------ ------------------------------ ------------- ---------- ---
         1 TEST                           ervice1                        SELECT        BASIC      NO

客户端配置的TAF我这里没有测试了。网上应该有很多测试的例子了。

--END--




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值