Oracle RAC failover 测试(连接时故障转移)

    Oracle RAC 集群最突出的表现就是高可用性,这些内容主要包括load balance以及failover,通过这些技术使得单点故障不影响客户端端应用程序对数据库的正常访问,以及通过创建service实现节点间负载均衡。本文主要描述Oracle 10g rac环境下的Oracle failover测试。
  
  下面是一些关于这方面的基础参考或相关链接:
  有关负监听配置,载均衡(load balance)以及Oracle service请参考
    ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
    ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
    Oracle RAC 客户端连接负载均衡(Load Balance)    Oracle RAC 服务器端连接负载均衡(Load Balance)    Oracle RAC 负载均衡测试(结合服务器端与客户端)    Oracle RAC failover 测试(TAF方式)
    Oracle RAC failover 测试(Server TAF方式)

1、Oracle failover的几种方式
  Oracle failover也叫故障转移,从Oracle 10g开始,分为3种方式:
  a. Client-Side Connect time Failover
    客户端连接failover模式,此方式较为简单,只要安装了rac集群,缺省情况下即被启用。
  b. TAF
    透明故障转移,此方式同样基于客户端完成,需要配置客户端tnsnames.ora,连接故障发生时,无须重新连接
  c. Service-Side TAF
    服务器端透明故障转移,通过配置service来实现,客户端无须任何配置。

  本文主要演示第一种情形,即客户端在发起连接请求时如何实现故障转移
  注意事项: 不能在listener.ora 文件中设置GLOBAL_NAME
         该参数会禁用Connect-time Failover 和 Transparent Application Failover

2、Client-Side Connect time Failover
  下面关于Client-Side Connect time Failover来自Oracle 的官方描述 ID 453293.1
  The connect-time failover enables clients to connect to another listener if the initial connection to the first
  listener fails. The number of listener protocol addresses determines how many listeners are tried. Without
  connect-time failover, Oracle Net attempts a connection with only one listener. The default is on. 

  Tnsnames Parameter: FAILOVER 

  (failover=on) is default for ADDRESS_LISTs, DESCRIPTION_LISTs, and a set of
  DESCRIPTIONs., therefore, you do not have to specify it explicitly. 

  基于客户端的failover比较好理解。对于在客户端tnsnames.ora有多个VIP的情形,客户端会首先请求定位到第一个VIP,如果第一个VIP不
  可达,则继续尝试使用下一个VIP,直到成功建立连接,如果所有的VIP无法连接将收到错误消息。
  通常情况下,我们使用vip作为tnsnames.ora中的连接地址

3、服务器端、客户端的环境
  #服务器端环境,host信息
  oracle@bo2dbp:~> cat /etc/hosts |grep vip
  192.168.7.61   bo2dbp-vip.2gotrade.com    bo2dbp-vip
  192.168.7.62   bo2dbs-vip.2gotrade.com    bo2dbs-vip

  #服务器端环境,集群信息
  oracle@bo2dbp:~> ./crs_stat.sh
   Resource name                                Target     State
  --------------                                ------     -----
  ora.GOBO4.GOBO4A.inst                         ONLINE     ONLINE on bo2dbp
  ora.GOBO4.GOBO4B.inst                         ONLINE     ONLINE on bo2dbs
  ora.GOBO4.db                                  ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.LISTENER_ORA10G_BO2DBP.lsnr        ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
  ora.bo2dbs.LISTENER_ORA10G_BO2DBS.lsnr        ONLINE     ONLINE on bo2dbs
  ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  ora.ora10g.db                                 ONLINE     ONLINE on bo2dbp 

  #客户端环境
  robin@SZDB:~> cat /etc/issue

  Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).

  robin@SZDB:~> sqlplus -v

  SQL*Plus: Release 10.2.0.3.0 - Production

  #客户端tnsnames配置
  GOBO4 =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
      (LOAD_BALANCE = yes)
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = GOBO4)
      )
    )

4、连接测试
  #首次建立连接,此时客户端从tnsnames配置的第一个IP建立连接,即192.168.7.61
  #VIP 192.168.7.61对应的hostname以及instance_name分别为bo2dbp,GOBO4A,所以我们获得如下返回结果
  robin@SZDB:~> sqlplus fail_over/fail@gobo4

  fail_over@GOBO4> get verify.sql
    1  REM the following query is for TAF connection verification
    2  col sid format 99999
    3  col serial# format 9999999
    4  col failover_type format a13
    5  col failover_method format a15
    6  col failed_over format a11
    7  Prompt
    8  Prompt Failover status for current user
    9  Prompt ============================================
   10  SELECT   sid,
   11   serial#,
   12   failover_type,
   13   failover_method,
   14   failed_over
   15   FROM   v$session
   16   WHERE   username = 'FAIL_OVER';
   17  REM the following query is for load balancing verification
   18  col host_name format a20
   19  Prompt
   20  Prompt Current instance name and host name
   21  Prompt ========================================
   22* SELECT   instance_name,host_name FROM v$instance;
   23  

  fail_over@GOBO4> @verify.sql

  Failover status for current user
  ============================================
     SID  SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
  ------ -------- ------------- --------------- -----------
    1071      249 NONE          NONE            NO

  Current instance name and host name
  ========================================
  INSTANCE_NAME    HOST_NAME
  ---------------- --------------------
  GOBO4A           bo2dbp

  #停止集群数据库的第一个instance,即GOBO4A
  oracle@bo2dbp:~> srvctl stop instance -d GOBO4 -i GOBO4A
  #校验结果
  oracle@bo2dbp:~> ./crs_stat.sh | grep inst
  ora.GOBO4.GOBO4A.inst                         OFFLINE    OFFLINE
  ora.GOBO4.GOBO4B.inst                         ONLINE     ONLINE on bo2dbs 

  #回到客户端原来的session,此时出现ORA-03114
  fail_over@GOBO4> /
  SELECT   instance_name,host_name FROM v$instance
  *
  ERROR at line 1:
  ORA-03113: end-of-file on communication channel

  fail_over@GOBO4> /
  ERROR:
  ORA-03114: not connected to ORACLE

  ERROR:
  ORA-03114: not connected to ORACLE

  #下面尝试重新建立连接
  fail_over@GOBO4> conn fail_over/fail@gobo4
  Connected.
  fail_over@GOBO4> @verify

  Failover status for current user
  ============================================
     SID  SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
  ------ -------- ------------- --------------- -----------
    1062       94 NONE          NONE            NO

  Current instance name and host name
  ========================================
  INSTANCE_NAME    HOST_NAME
  ---------------- --------------------
  GOBO4B           bo2dbs

  #Author : Robinson
  #Blog   : http://blog.csdn.net/robinson_0612

  #从上面的查询可知,当前的session已经连接到第二个实例。且FAILOVER_TYPE,FAILOVER_METHOD,FAILED_OVER几个至没有发生任何变化
  #因为这几个参数主要是针对TAF。

5、小结
  a、客户端连接时的故障转移,服务器端和客户端无需任何配置,缺省情况下即被开启,即failover=on
  b、只要集群环境存在(非单节点RAC),客户端的连接请求会逐个尝试列出的VIP,直到连接成功为止,如果所有不可连接,返回错误
  c、客户端已经建立后,服务器端实例或节点故障,都将导致客户端必须重新发起新的连接请求

更多参考

有关Oracle RAC请参考
     使用crs_setperm修改RAC资源的所有者及权限     使用crs_profile管理RAC资源配置文件     RAC 数据库的启动与关闭     再说 Oracle RAC services     Services in Oracle Database 10g     Migrate datbase from single instance to Oracle RAC     Oracle RAC 连接到指定实例     Oracle RAC 负载均衡测试(结合服务器端与客户端)     Oracle RAC 服务器端连接负载均衡(Load Balance)     Oracle RAC 客户端连接负载均衡(Load Balance)     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)     配置 RAC 负载均衡与故障转移     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册
     配置sqlnet.ora限制IP访问Oracle     Oracle 监听器日志配置与管理
     设置 Oracle 监听器密码(LISTENER)     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份     Oracle 热备份     Oracle 备份恢复概念     Oracle 实例恢复     Oracle 基于用户管理恢复的处理     SYSTEM 表空间管理及备份恢复     SYSAUX表空间管理及恢复     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构     RMAN 配置、监控与管理     RMAN 备份详解     RMAN 还原与恢复     RMAN catalog 的创建和使用     基于catalog 创建RMAN存储脚本     基于catalog 的RMAN 备份与恢复     RMAN 备份路径困惑     使用RMAN实现异机备份恢复(WIN平台)     使用RMAN迁移文件系统数据库到ASM     linux 下RMAN备份shell脚本     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件     Oracle 密码文件     Oracle 参数文件     Oracle 联机重做日志文件(ONLINE LOG FILE)     Oracle 控制文件(CONTROLFILE)     Oracle 归档日志     Oracle 回滚(ROLLBACK)和撤销(UNDO)     Oracle 数据库实例启动关闭过程     Oracle 10g SGA 的自动化管理     Oracle 实例和Oracle数据库(Oracle体系结构) 

时间: 2024-07-28 16:50:00

Oracle RAC failover 测试(连接时故障转移)的相关文章

Oracle RAC failover 测试(TAF方式)

    Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移.本文描述基于Oracle 10g rac,客户端TAF方式的故障转移并给出示例.   下面是一些关于这方面的基础参考链接:  有关负监听配置,载均衡(load balance)以及Oracle service请参考    ORACLE RAC 监听配置 (listener.or

Oracle RAC failover 测试(Server TAF方式)

    Oracle RAC中,除了基于客户端的TAF方式之外,还有基于服务器端的TAF方式,可以把服务端的TAF方式看作是客户端TAF方式的一个升级版吧.服务器端的TAF,当然是需要在服务器端进行配置了,这个是通过Service来完成的.本文主要描述Oracle 10g rac 下通过service方式配置服务器端的TAF.   下面是一些关于这方面的基础参考链接:  有关负监听配置,载均衡(load balance)请参考    ORACLE RAC 监听配置 (listener.ora t

在用ORACLE数据库和JSP连接时要注意的一些问题精粹

本人用ORACLE9i.oracle8.有很长的一段时间,我把用于JSP中需要注意的问题在这里写出来,仅供大家参考了. 一.如何去处理Clob.BLOB的大类型 CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据: getCharacterStream() 方法返回按unicode编码的输入流(java.io.Reader对象) getAsciiStream() 方法返回按ASCII编码的输入流(

jdbc 连接oracle rac 一会连接的上一会连接不上的问题?

问题描述 连接代码如下:Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();String addrRAC = "(ADDRESS=(PROTOCOL=TCP)(HOST =10.0.5.62)(PORT =1521))(ADDRESS=(PROTOCOL=TCP)(HOST =10.0.5.60)(PORT =1521))";String url = "jdbc:oracle:thi

配置 RAC 负载均衡与故障转移

    Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作?通常情况下,负载均衡分为客户端负载均衡与服务器端负载均衡.客户端负载均衡通常是在客户端的tnsnames.ora中多添加一个链接地址以及LOAD_BALANCE与failover参数.而服务器端的负载均衡则相对复杂,下面具体描述服务器端负载均衡.    一.负载均衡    注意这里的负载均衡指的是连接的负载均衡,即客户可以随机从不同的实例中连接到数据库    1.配置tnsnames.or

Oracle 11g R2 RAC高可用连接特性 – SCAN详解1

昨天帮朋友解决11g RAC SCAN问题,当时为这朋友简单解答了一些SCAN特性相关的问题,但我知道这仅仅是一小部分. Oracle从11g开始推出SCAN特性可不是我解答那样简单的,SCAN特性在Oracle RAC高可用连接里占据着非常重要的地位,也是以后的重点推进方向. 昨天处理完问题比较晚自己又比较累,所以没有整理出SCAN特性相关资料,今天就抽出点时间把SCAN高可用连接特性介绍出去. 说在前头:文章中核心内容来自官方,当然我也参考了部分前辈们整理的资料,再加以自己的理解和测试整理出

Oracle RAC的failover测试简介

Oracle RAC中,除了基于客户端的TAF方式之外,还有基于服务器端的TAF方式,可以把服务端的TAF方式看作是客户端TAF方式的一个升级版吧.服务器端的TAF,当然是需要在服务器端进行配置了,这个是通过Service来完成的.本文主要描述Oracle 10g rac 下通过service方式配置服务器端的TAF. 1.服务器端.客户端的环境 #服务器端环境,host信息 oracle@bo2dbp:~> cat /etc/hosts |grep vip 192.168.7.61   bo2

详解Oracle RAC的Failover

Oracle  RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换. Oracle 10g RAC 的Failover 可以分为3种: 1. Client-Side Connect time Failover 2. TAF 3. Service-Side TAF 注意事

Oracle 11g R2 RAC高可用连接特性 – SCAN详解2

SCAN概念 先介绍一下什么叫SCAN,SCAN(Single Client Access Name)是Oracle从11g R2开始推出的,客户端可以通过SCAN特性负载均衡地连接到RAC数据库.SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个)SCAN IP,我们可以通过DNS或者GNS来解析实现.其中DNS大家都很熟悉,这里不多说.GNS(Grid Naming Service)则是Oracle 11g R2的新功能,可以通过DHCP服务为节点和SCAN分配VIP和