oracle RAC 数据库连接配置

数据库的连接的URL连接配置为    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=on))(CONNECT_DATA=(SERVICE_NAME=gs)))

String URL= 
"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=" + 
        "(ADDRESS=(PROTOCOL=TCP)(HOST=ip1)(PORT=1521))" + 
        "(ADDRESS=(PROTOCOL=TCP)(HOST=ip2)(PORT=1521))" + 
        "(LOAD_BALANCE=yes)(FAILOVER=on))" + 
        "(CONNECT_DATA=(SERVICE_NAME=orcl)))" ;

oltp = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.131)(PORT = 1521)) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.132)(PORT = 1521)) 
    #(LOAD_BALANCE = yes) 
    (CONNECT_DATA = 
      (SERVICE_NAME = oltp) 
    ) 
  )

这是客户端的tns? 
注释掉LOAD_BANANCE就表明你使用的是server端的banlance?

google 结果: 
http://www.easyora.net/blog/rac_10g_study_catalog_4.html

RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance. 
(1)Failover 
在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover). 
TAF以及实现: 
TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略. 
<1> client端taf配置 
以下是一个简单的具有taf功能的tnsnames.ora 内容

demo = 
(DESCRIPTION = 
(FAILOVER=ON) 
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521)) 
(CONNECT_DATA = 
(SERVICE_NAME = demo) 
(SERVER=DEDICATED) 
(FAILOVER_MODE=(TYPE=SELECT) 
(METHOD=BASIC) 
(RETRIES=50) 
(DELAY=5) 

)


控制TAF策略的参数说明:

参数 
描述

FAILOVER 
Failover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止

TYPE 
两种类型:session /select

Session: 提供session级别的故障切换。

Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作

METHOD 
两种类型:basic/preconnect

Basic:client同时只连接一个节点,故障切换时跳转到另外节点

Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点

BACKUP 
采用Preconnect模式的备用连接配置

RETRIES 
故障切换时重试次数

DELAY 
故障切换时重试间隔时间

<2> Server端TAF配置 
10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。

SQL> exec dbms_service.modify_service(service_name => ‘DEMO’,failover_method => ‘BASIC’,failover_type => ‘SELECT’,failover_retries => 180,failover_delay => 5);

客户端连接字符串修改成如下即可:

demo = 
(DESCRIPTION = 
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521)) 
(CONNECT_DATA = 
(SERVICE_NAME = demo) 
(SERVER=DEDICATED) 

)

FCF及实现 
FCF是10g引进的一种新的failover机制,它依靠各节点的ons进程,通过广播FAN事件来获得各节点的运行情况,是一种前摄性的判断,支持JDBC/OCI/ODP.NET 
(1).ons配置 
onsctl工具配置各节点的local /remote节点以及端口.配置文件路径ORACLE_HOME/opmn/ons.config. 
使用 onsctl debug 跟踪ons进程是否正常运行。 
(2).配置连接池(以jdbc为例) 
需要连接池支持Implicit Connection Cache,设置FastConnectionFailoverEnabled=true. 
将ojdbc14.jar / ons.jar等加入CLASSPATH.具体代码可以参见联机文档或metalink相关文档.

==另外一篇文章== 
Failover的连接配置

有两种连接方式可以实现数据库连接的failover

1. TAF(Transparent Application Failover)

让我们看一下官方文档。TAF让Oracle Net将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。 
TAF可以配置为使用client端的(Transparent Network Substrate)TNS连接字符串来连接,或者使用server端的服务。如果两种方式同时使用,则使用server端的服务配置。 
TAF可以工作在两种模式下:session failover和select failover。前者在failover时会重建失败的连接,后者则能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,则新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。如果failover时,session执行了DML操作且未提交,则failover后,若不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402: transaction must roll back 
TAF在dataguard中使用,可以自动进行failover

一个典型的使用了TAF的TNS连接串如下: 
NEWSDB = 
  (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 = dyora) 
      (FAILOVER_MODE = 
        (TYPE = SELECT) 
        (METHOD = BASIC) 
        (RETRIES = 180) 
        (DELAY = 5) 
      ) 
    ) 
  )

failover_mode参数介绍 
failover_mode参数 说明 
BACKUP 备用连接的网络服务名。若使用了preconnect的连接方法,则需要指定这个参数 
DELAY 连接重试的时间间隔(秒)。如果指定了RETRIES参数,若不指定该参数,默认为1秒。若注册了callback,该参数将被忽略 
METHOD 设置failover方法。basic: failover时才尝试连接备用实例的监听;preconnect: 每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换 
RETRIES failover后,尝试连接的次数。如果指定了DELAY参数,则RETRIES默认为5次。若注册了callback,则该参数将被忽略 
TYPE OCI默认提供了3种类型:session: 若用户连接丢失,将在备用节点上重新创建;select: 除了重建连接外,将继续从打开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none: 默认值,也可显示指定来禁用failover功能

2. FCF(Fast Connect Failover)

oracle11g提供了FCF方式连接数据库,它支持JDBC Thin和JDBC OCI驱动;与连接缓存(implicit connection cache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置 
需要的条件:启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用服务名而非服务标识符来连接数据库;JDBC运行的节点上配置并启用了Oracle Notification Service (ONS);JDBC例程运行的java虚拟机必须包含oracle.ons.oraclehome并指向ORACLE_HOME 
例子: 
配置ONS  
ods.setONSConfiguration("nodes=racnode1.example.com:4200,racnode2.example.com:4200"); 
启用FCF 
// declare datasource 
ods.setUrl( 
"jdbc:oracle:oci:@(DESCRIPTION= 
    (ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias) 
        (PORT=1521)) 
        (CONNECT_DATA=(SERVICE_NAME=service_name)))"); 
ods.setUser("scott"); 
ods.setConnectionCachingEnabled(true); 
ods.setFastConnectionFailoverEnabled(true): 
ctx.bind("myDS",ods); 
ds=(OracleDataSource) ctx.lookup("MyDS"); 
try { 
  ds.getConnection(); // transparently creates and accesses cache 
  catch (SQLException SE { 
    } 
}

看糊涂了?上面的java代码包含一个异常处理。工作过程如下: 
1. 一个实例宕掉了,在缓存中留下一些过期连接 
2. RAC产生一个事件,并将其发送给包含JDBC的java虚拟机 
3. JVM中的后台线程找出所有受到该RAC事件影响的所有连接,通过sql异常(ORA-17008)通知它们关闭连接,并回滚事务 
4. 连接接收到sql异常并重新执行失败的操作

FCF与TAF相比有如下不同: 
1. FCF支持应用级别的连接重试,由应用来决定failover时如何处理,是重新执行,还是抛出异常;TAF只能在OCI/NET的层面进行重新连接 
2. FCF与连接缓存很好地结合起来,让连接缓存管理器来管理缓存,失败的连接在缓存中会自动失效。而TAF在网络层面做预连接,当一个连接失效,连接缓存不能检测到 
3. FCF基于Oracle RAC事件,可以快速为活跃/闲置的连接检测到故障 
4. FCF通过实例的UP事件实现负载均衡,分配到在线的RAC实例中

oracle建议不要在一个应用中同时使用TAF和FCF

备注:本文转载于http://wallimn.iteye.com/blog/1345102

时间: 2024-12-25 01:25:57

oracle RAC 数据库连接配置的相关文章

阿里云上Oracle 11g RAC安装配置手册

有印象的用户可能发现,阿里云早在2016年深圳云栖大会就官方发布了对Oracle RAC的支持,但是相关产品却一直没能同步推出,相信大家都翘首以盼了许久许久.一个好消息是,近期阿里云将紧密推出两款新产品:共享块存储和ECS多网卡.这两款产品将打通众多关键云下应用上云的最后一公里,为用户提供更多的便利.在我们能正式体验到新产品之前,阿里云技术服务团队也将云上的Oracle RAC安装配置手册放出,希望能给大家提供更多不同的体验和选择. 一.安装说明 阿里云上Oracle RAC的安装部署,重点需要

Oracle RAC中的几个IP

oracle11g开始,设置了SCAN ip,除此之外还有public ip,virtual ip,private ip,容易让人犯晕. 下面逐一解释: public ip: 类似与单实例的oracle数据库ip,主要用于管理\访问. virtual ip(vip): oracle在rac架构中专用,这个vip用于实现故障转移,当一个节点发生故障时,其vip会"浮动"到另外一个正常的节点,也即该正常节点对应着两个vip了. SCAN: Single Client Access Name

安装Oracle RAC 11g

1.Oracle Enterprise Linux 和 iSCSI 上构建 Oracle RAC 11g 集群 2.Oracle RAC 的所有共享磁盘存储将基于 iSCSI,iSCSI 使用在第三个节点(该节点在本文中称为网络存储服务器)上运行的 Openfiler 2.3 版 x86_64 3.每个 Linux 节点仅配置两个网络接口 - eth0 用于连接公共网络, eth1 用于 Oracle RAC 专用互连"和"连接网络存储服务器以便进行共享 iSCSI 访问.而在实现生产

【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进行

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的.除此之外,还可以对实例进行远程注册,以达到负载均衡的目的.这是通过一个参数remote_listener来实现. 有关Oracle 网络配置相关基础以及概念性的问题请参考:      配置ORACLE 客户端连接到数据库   配置非默认端口的动态服务注册   

ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务提出的连接请求.一旦连接请求到达,并派生出一个服务器进程建立服务器与用户端之间的连接(专有服务器dedicated server)或转发服务请求(共享服务器模式shared server).如果监听器知道多于一个实例提供所请求的服务,则可能会根据客户端与服务器端相关配置将请求定位到较低负载的实例为其

Oracle GoldenGate学习之--AIX rac系统安装配置(1)

Oracle GoldenGate学习之--AIX rac系统安装配置(1) 系统环境 操作系统:AIX5.3-09 DB Soft:  Oracle 10gR2 Cluster:   CRS 10.2.0.1 如下图所示: 本案例是用于基于VG Concurrent 的共享存储: 系统环境实在AIX系统上构建的Oracle RAC 下载OGG: http://www.oracle.com/technetwork/cn/middleware/goldengate/downloads/index.

从ORACLE RAC角度看跨数据中心的存储双活配置注意事项

ORACLE RAC在设计的时候是没有考虑跨数据中心双活的,它的设计目的是为一个数据中心内有着共享存储的多个主机实现负载均衡和高可用性.但是由于它的架构确实有着跨数据中心实现负载均衡和高可用性的潜力,所以有几家存储设备供应商对它的使用环境做了扩展,提出了跨数据中心的解决方案.ORACLE对此采取了默认的态度,但是建议所有的解决方案在投入客户生产之前进行仔细的测试. 对于RAC而言,跨数据中心解决方案的最大瓶颈是节点之间的interconnect,因为它对时延和带宽的要求都非常高.一般而言,本地i

oracle rac 监听配置

一.总体概述 Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle服务端中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务提出的连接请求.一旦连接请求到达,并派生出一个服务器进程建立服务器与用户端之间的连接(专有服务器dedicated server)或转发服务请求(共享服务器模式shared server).如果监听器知道多于一个实例提供所请求的服务,则可能会根据客户端与服务器端相关配置将请求定位