java调oracle rac.docx_第1页
java调oracle rac.docx_第2页
java调oracle rac.docx_第3页
java调oracle rac.docx_第4页
java调oracle rac.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、JAVA 连接 ORACLE RAC 字符串 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 = 31)(PORT = 1521) (ADDRESS = (PROTOCOL = TCP)(HOST = 32)(PORT = 1521) #(LOAD_BALANCE = yes) (CONNECT_DATA = (SERVICE_NAME = oltp) ) ) 这是客户端的tns? 注释掉LOAD_BANANCE就表明你使用的是server端的banlance? RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance. (1)Failover 在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover). TAF以及实现: TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略. client端taf配置 以下是一个简单的具有taf功能的tnsnames.ora 内容 demo = (DESCRIPTION = (FAILOVER=ON) (ADDRESS=(PROTOCOL=TCP)(HOST=45)(PORT=1521) (ADDRESS=(PROTOCOL=TCP)(HOST=46)(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 故障切换时重试间隔时间 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=45)(PORT=1521) (ADDRESS=(PROTOCOL=TCP)(HOST=46)(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=:4200,: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和FCFjava web项目与oracle rac 连接 分类: oracle 相关 2010-11-29 09:54 341人阅读 评论(1) 收藏 举报 某环境使用的oralce数据库采用了rac的策略做了负载均衡,现需要将开发的项目部署至该环境,假设,该oracle环境

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论