现在的位置: 首页 > 综合 > 正文

oracle rac failover

2013年09月06日 ⁄ 综合 ⁄ 共 11849字 ⁄ 字号 评论关闭


一、oracle rac failover分类

Oracle 10g RAC 的Failover 可以分为3种:

1. Client-Side Connect time Failover

2. TAF

3. Service-Side TA

注意事项: 不能在listener.ora 文件中设置GLOBAL_NAME, 因为这个参数会禁用Connect-time Failover 和 Transparent Application Failover.


二、rac failover 举例

1. Client-Side Connect time Failover

如果用户端tnsname 中配置了多个地址,用户发起连接请求时,会先尝试连接地址表中的第一个地址,如果这个连接尝试失败,则继续尝试使用第二个地址,直至连接成功或者遍历了所有的地址,如果第一个连接成功了,则一直会连接地址列表中的第一个地址。默认failover=on,对于failover=on就是启用了
Client-Side Connect time Failover

 Client-Side Connect time Failover只在建立连接那一时刻起作用,也就是说,这种Failover方式只在发起连接时才会去感知节点故障,如果节点没有反应,则自动尝试地址列表中的下一个地址。一旦连接建立之后,节点出现故障都不会做处理,从客户端的表现就是会话断开了,用户程序必须重新建立连接


vi
tnsname.ora

rac=
(DESCRIPTION_LIST=
 (DESCRIPTION=   
       (ADDRESS=(PROTOCOL=TCP)(HOST =192.168.1.112)(PORT=1521))
   (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=test)))
       (DESCRIPTION=   
         (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.113)(PORT=1521))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME = test))))

或者

load_balance=on 在DESCRIPTION_LIST 列表写默认是on,如果不写成DESCRIPTION_LIST,那么必须写成是load_balance=on

rac =
  (DESCRIPTION = 
  (load_balance=on)  

 (failover=on)
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.113)(PORT = 1521))
    (CONNECT_DATA =
     (SERVER=DEDICATED)
      (SERVICE_NAME = test)
    )
  )


SQL> conn scott/tiger@rac

SQL> show parameter name
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------
db_file_name_convert                 string
db_name                              string      test
db_unique_name                       string      test
global_names                         boolean     FALSE
instance_name                        string      test2
lock_name_space                      string
log_file_name_convert                string
service_names                        string      test

[oracle@rac2 bin]$ ./srvctl stop instance -d test -i test2  在服务端停止 节点二。

SQL> show parameter name
ORA-03113: 通信通道的文件结束
SQL> show parameter name
ERROR:
ORA-03114: 未连接到 ORALCE


2. TAF

Transparent Application Failover:透明应用程序故障转移,当客户端和oracle数据库建立连接后,正在执行某个应用,此时客户端连接的某个实例突然宕机,那么客户端的连接就会被转移到其他健康实例上去, 对于客户端的taf,如果执行的是update,insert等事物语句,那么就会回退,如果是select语句,那么会转移到新的实例继续执行,这个过程不需要用户的的介入,是透明的。

taf=
 (DESCRIPTION=
  (LOAD_BALANCE=on)    
  (FAILOVER=on) 
  (ADDRESS=
       (PROTOCOL=tcp)(HOST=192.168.1.113)(PORT=1521)) 
  (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.112)(PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=test)
     (FAILOVER_MODE=
       (TYPE=select)              
       (METHOD=basic))))

taf是比 Client-Side Connect time Failover要高级一点的方式,

相同点:

1、他们都是在客户端的tnsname.ora里设置,

2、他们在连接的时候会去连接到一个到一个正常的实例上去,但是如果一个实例是在mount状态,不管是TAF还是 Client-Side Connect time Failover
都有可能会
会去连接正常实例,也有可能连接mount 状态的实例,然后报错。


不同点:

1、 Client-Side Connect time Failover
连接到一个正常实例后,此实例突然出现故障时候,直接放回给客户端报错的信息。

   TAF 在连接到一个正常实例,并且进行一些业务,正常实例突然出现故障,那么TAF会把select语句转移到另外一个实例继续放回结果,对update 、insert 进行回退,并给出事物必须重新处理的信息。

3. Service-Side TA

Service-Side TAF需要配置一个实例角色的参数,所谓的实例角色,就是当有多个Instance 参与一个Service时,可以配置优先使用哪一个Instance为用户提供服务、

PREFERRED:首选实例,会优先选择拥有这个角色的实例提供服务。

AVAILABLE: 后备实例,用户连接会优先连接PREFFERRED的Instance,当PREFERRED的Instance不可用时,才会被转到AVAILBALE的Instance上。

要使用Server-Side TAF必须配置Service。 Service 可以在创建数据库时创建,也可以在创建数据库之后修改,10g可以使用dbca 配置向导,也可以用命令行的 方式配置,11g只能使用命令方式来配置Service-Side TA

 

10g使用dbca方式来创建Service-Side TA

用DBCA 配置Service

1). 运行DBCA,选择ORACLE RAC Application Clusters database

2). 在第二个界面选择:Services Management

3). 第三个界面会出现RAC 数据库列表,用户可以在这个列表中选择要配置Service 的数据库

4). 在Serice配置界面中,单击Add 创建新的Service,输入service名字。在Instance列表框定义实例角色,选择那个service1 作为 Preferred(首选实例),Service2 作为availiable(后备实例)。 TAF Policy有三个选项: None, Basic,Pre-connect。 我们选Basic。 最后点击Finish,完成Service 配置。

5)在结束Service配置后,服务会自动启动。



10&11g使用命令方式来创建Service

(1)创建service

Srvctl add service -d <database-name> -s <service-name> -r "preferred-instance-list" -a "available-instance-list" -P <TAF-policy>

其中TAF-Policy可选:basic 和 preconnect

例如:[oracle@rac1 bin]$ ./srvctl  add service -d test -s taf -r "test1" -a "test2" -P basic

      此方式建立的服务只有节点test1上有taf

[oracle@rac2 bin]$ ./srvctl  add  service -d test -s taf -r "test1,test2" -P basic

 此方式建立的服务在test1,test2上都有taf服务

注意:srvctl add service中,只有perferred才会创建服务。 即在OCR中注册一个ora.raw.dmm.Raw1.Srv的服务。

(2) 查看配置信息

   #srvctl config service -d database-name [-s service-name] [-a]

例如:[oracle@rac1 bin]$ ./srvctl  config service -d test -s taf

(3)是否自动运行service
数据库启动时,会自动启动所有的Service。有时为了为了维护需要,需要禁用这个特性,在维护完成后再启动这个特性。
srvctl enable/disable service -d database-name -s service-name -i instance-name

 (4)启动service
srvctl start service -d <database-name> -s <service-name> -i instance-name -o start-option -c connect-string -q
如果不指定service-name, 则所有的service 都会被启动,可以使用逗号分隔方式,同时启动多个service。 -i 指定在那个实例上启动service。
 [oracle@rac1 bin]$ ./srvctl  start service -d test -s taf 
 (5) 停止service
 #srvctl stop service -d <database-name> -s <service-name> -i instance-name -c connect-string -q -f
其中-f 选项可以强制关闭service,并中断了其所有用户的连接。
      
 (6) 查看service 状态
 srvctl status service -d <database-name> -s  service-name   -f -v
  其中-f 可以显示被disable的instance 信息,而-v 可以显示详细输出
 例如:[oracle@rac1 bin]$ ./srvctl  status service -d test -s taf               
Service taf is running on instance(s) test1,test2

(7) 删除service
  srvctl remove service -d database-name -s service-name -i instance-name [-f] 

创建一个taf服务:

SQL> show parameter name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert		     string
db_name 			     string	 test
db_unique_name			     string	 test
global_names			     boolean	 FALSE
instance_name			     string	 test1
lock_name_space 		     string
log_file_name_convert		     string
service_names			     string	 test

创建服务
[oracle@rac2 bin]$ ./srvctl  add  service -d test -s taf -r "test1,test2" -P basic
[oracle@rac2 bin]$ ./crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.asm
               ONLINE  ONLINE       rac1                     Started             
               ONLINE  ONLINE       rac2                     Started             
ora.eons
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.gsd
               OFFLINE OFFLINE      rac1                                         
               OFFLINE OFFLINE      rac2                                         
ora.net1.network
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.ons
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.registry.acfs
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1                                         
ora.oc4j
      1        OFFLINE OFFLINE                                                   
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                         
ora.rac2.vip
      1        ONLINE  ONLINE       rac2                                         
ora.scan1.vip
      1        ONLINE  ONLINE       rac1                                         
ora.test.db
      1        ONLINE  ONLINE       rac2                     Open                
      2        ONLINE  ONLINE       rac1                     Open                
ora.test.taf.svc
      1        OFFLINE OFFLINE                                                   
      2        OFFLINE OFFLINE                                                   
[oracle@rac2 bin]$ ./srvctl  config service -d  test -s taf
服务名: taf
服务已启用
服务器池: test_taf
基数: 2
断开连接: 假
服务角色: PRIMARY
管理策略: AUTOMATIC
DTP 事务处理: 假
AQ HA 通知: 假
故障转移类型: NONE
故障转移方法: NONE
TAF 故障转移重试次数: 0
TAF 故障转移延迟: 0
连接负载平衡目标: LONG
运行时负载平衡目标: NONE
TAF 策略规范: BASIC
首选实例: test1,test2
可用实例: 


启动服务
[oracle@rac2 bin]$ ./srvctl start service -d test -s taf
查看服务运行状态
[oracle@rac2 bin]$ ./srvctl  status service -d test -s taf
服务 taf 正在实例 test1,test2 上运行
[oracle@rac2 bin]$ ./crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.asm
               ONLINE  ONLINE       rac1                     Started             
               ONLINE  ONLINE       rac2                     Started             
ora.eons
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.gsd
               OFFLINE OFFLINE      rac1                                         
               OFFLINE OFFLINE      rac2                                         
ora.net1.network
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.ons
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
ora.registry.acfs
               ONLINE  ONLINE       rac1                                         
               ONLINE  ONLINE       rac2                                         
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1                                         
ora.oc4j
      1        OFFLINE OFFLINE                                                   
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                         
ora.rac2.vip
      1        ONLINE  ONLINE       rac2                                         
ora.scan1.vip
      1        ONLINE  ONLINE       rac1                                         
ora.test.db
      1        ONLINE  ONLINE       rac2                     Open                
      2        ONLINE  ONLINE       rac1                     Open                
ora.test.taf.svc
      1        ONLINE  ONLINE       rac1                                         
      2        ONLINE  ONLINE       rac2                                         
SQL> show parameter name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert		     string
db_name 			     string	 test
db_unique_name			     string	 test
global_names			     boolean	 FALSE
instance_name			     string	 test2
lock_name_space 		     string
log_file_name_convert		     string
service_names			     string	 test, taf

使用dbms_service.Modify_service 来修改配置service TAF
 Begin
        Dbms_service.modify_service(
        Service_name=>'taf',
        Failover_method=>dbms_service.failover_method_basic,
        Failover_type=>dbms_service.failover_type_select,
        Failover_retries=>180,
        Failover_delay=>5
        );
    End; 
 /
查看服务,确认服务已经生效
SQL>  select name,failover_method,failover_type,goal,clb_goal from dba_services;
NAME		FAILOVER_METHOD 						 FAILOVER_TYPE							  GOAL	       CLB_G
--------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ------------ -----
SYS$BACKGROUND																	  NONE	       SHORT
SYS$USERS																	  NONE	       SHORT
taf		BASIC								 SELECT 							  NONE	       LONG
testXDB 																		       LONG
test																			       LONG
删词taf服务
[oracle@rac2 bin]$ ./srvctl  stop  service -d test -s taf 
[oracle@rac2 bin]$ ./srvctl  remove service -d test -s taf  -i test1,test2
OCR中的信息已经被删除了,但是数据字典中的还有该service的内容,继续清除数据字典中的内容。
查看数据字典的内容,看taf是否删除
select name,failover_method,failover_type,goal,clb_goal from dba_services;


清除数据字典的内容
begin
    dbms_service.delete_service(service_name=>'dmm');
    end;
    /

3.3 配置Service 的注意事项

 1). 数据库的服务名是用service_name 参数来指定的,一个数据库可以有多个服务名,但是service_name最长是4kb,不要手工来修改这个参数

 2)最多可以创建64个service,每个数据库有2个隐含的service,因此留给用户的就只有62个service。不能修改这两个隐含service的配置,并且也不能手工启动或停止这2个服务。 这两个隐含的service分别是:SYS$BACKGROUND 和 SYS$USERS.

 3) 当使用dbca配置Service 时,dbca 会自动更新OCR,启动Service, 当删除service时,会停止service,并更新OCR.

 4) 使用srvctl 这个工具时,命令只更新OCR中的配置,不会更新data dctionary 和 listener 中的信息,因此还需要使用dbma_servie 包来更新data dictionary,手工更改listener配置文件。 故推荐使用DBCA工具来配置更改service配置

 5) 如果客户端想通过Service 方式连接数据库,需要在tns条目中使用service_name 方式引用数据库。 如:

RAC =

  (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=RAC)

      )

           )

   

   注意:无论是使用dbca 工具还是使用srvctl 命令来配置service,都无法配置TAF的TYPE,DELAY,RETRIES 三个属性,必须使用dbms_service包来修改这些属性。


参考:

http://blog.csdn.net/wll_1017/article/details/9469063

抱歉!评论已关闭.