Oracle RAC failover 测试(TAF方式)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:     Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移。

    Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移。本文描述基于Oracle 10g rac,客户端TAF方式的故障转移并给出示例。

  下面是一些关于这方面的基础参考链接:
  有关负监听配置,载均衡(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 连接时故障转移请参考
    Oracle RAC failover 测试(连接时故障转移)
    Oracle RAC failover 测试(Server TAF方式)

1、TAF描述    
  #下面关于TAF来自Oracle 的官方描述 ID 453293.1
  Transparent Application Failover (TAF) is a feature of the Oracle Call Interface (OCI) driver at client side. 
  It enables the application to automatically reconnect to a database, if the database instance to which the connection is 
  made fails. In this case, the active transactions roll back. 
  Tnsnames Parameter: FAILOVER_MODE 

     When an instance to which a connection is established fails or is shutdown, the connection on the client side becomes 
  stale and would throw exceptions to the caller trying to use it. TAF enables the application to transparently reconnect 
  to a preconfigured secondary instance creating a fresh connection, but identical to the connection that was established 
  on the first original instance.
  
  #简单一点来说,就是说对于那些已经成功连接到特定实例的客户端,如果该实例或节点异常宕机,客户端会自动重新发出到剩余实例的连
  #接请求。使得客户端感觉不到它所连接的实例或节点已经出现故障,这个就称之为透明转移。但其间的活动事务将被回滚。
  #通过在客户端的tnsnames.ora中配置FAILOVER_MODE项实现TAF

2、服务器端、客户端的环境
  #服务器端环境,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                         OFFLINE    OFFLINE on bo2dbp  #此时节点1上的实例被关闭
  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_TAF =
   (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)
      (FAILOVER_MODE =       #FAILOVER_MODE项参数 
       (TYPE = session)
       (METHOD = basic)
       (RETRIES = 180
       (DELAY = 5)
      )
     )
   )
  
3、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:表示重试的间隔时间
  
4、测试TAF    
  #首次建立连接,此时客户端从tnsnames配置的第一个IP建立连接,由于第一个VIP所在的实例已经关闭,故连接到192.168.7.62
  #VIP 192.168.7.62对应的hostname以及instance_name分别为bo2dbs,GOBO4B,所以我们获得如下返回结果
  #其次我们可以看到当前session failover的相关参数
  robin@SZDB:~> sqlplus fail_over/fail@gobo4_taf

  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
  
  Failover status for current user
  ============================================
  
     SID  SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
  ------ -------- ------------- --------------- -----------
    1063     1175 SESSION       BASIC           NO
  
  
  Current instance name and host name
  ========================================
  
  INSTANCE_NAME    HOST_NAME
  ---------------- --------------------
  GOBO4B           bo2dbs
  
  #此时启动第一个实例GOBO4A,并停止第二个实例
  oracle@bo2dbp:~> srvctl start instance -d GOBO4 -i GOBO4A  
  oracle@bo2dbp:~> srvctl stop instance -d GOBO4 -i GOBO4B
  #查看两个实例的状态
  oracle@bo2dbp:~> ./crs_stat.sh | grep inst
  ora.GOBO4.GOBO4A.inst                         ONLINE     ONLINE on bo2dbp  
  ora.GOBO4.GOBO4B.inst                         OFFLINE    OFFLINE 
  
  #在客户端的session再次检查连接状态,即执行查询,结果如下,我们收到了ORA-25408
  fail_over@GOBO4> @verify
  
  Failover status for current user
  ============================================
  SELECT   sid,
  *
  ERROR at line 1:
  ORA-25408: can not safely replay call
  
  Current instance name and host name
  ========================================
  
  INSTANCE_NAME    HOST_NAME
  ---------------- --------------------
  GOBO4A           bo2dbp
  
  #再次执行查询,此时客户端已经自动实现了重新连接,从查询返回得到的INSTANCE_NAME与HOST_NAME可知。
  #最重要的一个FAILED_OVER值为YES,表明当前的session是一个failover来的session。
  #关于METHOD使用PRECONNECT与TYPE使用SELECT的方式在此不作演示
  fail_over@GOBO4> @verify
  
  Failover status for current user
  ============================================
  
     SID  SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
  ------ -------- ------------- --------------- -----------
    1073       29 SESSION       BASIC           YES
  
  
  Current instance name and host name
  ========================================
  
  INSTANCE_NAME    HOST_NAME
  ---------------- --------------------
  GOBO4A           bo2dbp 

  #Author : Robinson
  #Blog   : http://blog.csdn.net/robinson_0612
  
5、小结:
  a、客户端TAF方式实现了Oracle客户端到服务器透明故障转移
  b、主要在客户端tnsnames.ora配置FAILOVER_MODE来实现基于客户端的TAF
  c、FAILOVER_MODE中基于连接方式(METHOD)可以分为BASIC与PRECONNECT两种方式,后者开销更大,延迟小,与前者相反
  d、FAILOVER_MODE中TYPE可以分为select与session两种方式,两者所有未提交的事务全部回滚,select方式会failover查询,
     session方式不会。select方式多用在OLAP类型数据库,而session多用在OLTP类型数据库
  e、一旦所在的实例发生故障,会自动failover,无需手动重新连接,这就是与连接时故障转移所不同的。   


更多参考

有关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体系结构)    

 

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
4月前
|
负载均衡 Oracle 网络协议
Oracle中TAF与SCANIP全面解析
通过本文的解析,读者可以清晰地理解Oracle中TAF与SCAN IP的概念、工作原理及其在实际应用中的优势和局限性。TAF通过自动故障转移提升了会话的高可用性,而SCAN则通过简化客户端连接和负载均衡提升了集群的可管理性和扩展性。这两种技术在现代企业数据库架构中扮演着重要角色,能够显著提高系统的稳定性和可用性。
196 6
|
10月前
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
390 1
|
8月前
|
监控 Oracle 关系型数据库
关系型数据库Oracle恢复测试
【7月更文挑战第20天】
139 7
|
9月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
78 3
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
1月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
97 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
64 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
7天前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
1天前
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。

热门文章

最新文章

推荐镜像

更多