您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > java调oracle rac
一、JAVA连接ORACLERAC字符串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)))StringURL=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?RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与loadbanance.(1)Failover在10gR2版本里,Failover的实现方式有两种,一种是TAF(TransparentApplicationFailover),一种是FCF(FastConnectionFailover).TAF以及实现:TAF是net层透明故障转移,是一种被动的故障转移方式,依赖于VIP.可以通过客户端和服务器端配置taf的策略.1client端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策略的参数说明:参数描述FAILOVERFailover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止TYPE两种类型:session/selectSession:提供session级别的故障切换。Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作METHOD两种类型:basic/preconnectBasic:client同时只连接一个节点,故障切换时跳转到另外节点Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点BACKUP采用Preconnect模式的备用连接配置RETRIES故障切换时重试次数DELAY故障切换时重试间隔时间2Server端TAF配置10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。SQLexecdbms_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.使用onsctldebug跟踪ons进程是否正常运行。(2).配置连接池(以jdbc为例)需要连接池支持ImplicitConnectionCache,设置FastConnectionFailoverEnabled=true.将ojdbc14.jar/ons.jar等加入CLASSPATH.具体代码可以参见联机文档或metalink相关文档.==另外一篇文章==Failover的连接配置有两种连接方式可以实现数据库连接的failover1.TAF(TransparentApplicationFailover)让我们看一下官方文档。TAF让OracleNet将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。TAF可以配置为使用client端的(TransparentNetworkSubstrate)TNS连接字符串来连接,或者使用server端的服务。如果两种方式同时使用,则使用server端的服务配置。TAF可以工作在两种模式下:sessionfailover和selectfailover。前者在failover时会重建失败的连接,后者则能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,则新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。如果failover时,session执行了DML操作且未提交,则failover后,若不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402:transactionmustrollbackTAF在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:每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换RETRIESfailover后,尝试连接的次数。如果指定了DELAY参数,则RETRIES默认为5次。若注册了callback,则该参数将被忽略TYPEOCI默认提供了3种类型:session:若用户连接丢失,将在备用节点上重新创建;select:除了重建连接外,将继续从打开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none:默认值,也可显示指定来禁用failover功能2.FCF(FastConnectFailover)oracle11g提供了FCF方式连接数据库,它支持JDBCThin和JDBCOCI驱动;与连接缓存(implicitconnectioncache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置需要的条件:启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用服务名而非服务标识符来连接数据库;JDBC运行的节点上配置并启用了OracleNotificationService(ONS);JDBC例程运行的java虚拟机必须包含oracle.ons.oraclehome并指向ORACLE_HOME例子:配置ONSods.setONSConfiguration(nodes=racnode1.example.com:4200,racnode2.example.com:4200);启用FCF//declaredatasourceods.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();//transparentlycreatesandaccessescachecatch(SQLExceptionSE{}}看糊涂了?上面的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基于OracleRAC事件,可以快速为活跃/闲置的连接检测到故障4.FCF通过实例的UP事件实现负载均衡,分配到在线的RAC实例中oracle建议不要在一个应用中同时使用TAF和FCFjavaweb项目与oraclerac连接分类:oracle相关2010-11-2909:54341人阅读评论(1)收藏举报某环境使用的oralce数据库采用了rac的策略做了负载均衡,现需要将开发的项目部署至该环境,假设,该oracle环境配置了2个IP。【发现】:当使用PL/SQL客户端连接其中一个IP的oracle时
本文标题:java调oracle rac
链接地址:https://www.777doc.com/doc-8211 .html