




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle RAC客户端连接不稳定的解决方法Oracle RAC安装完毕后,监听、tnsname.ora按照Oracle默认配置好后,在服务器端用sqlplus连接没有问题,但是用客户端连接,会出现有时候连不上的错误,解决方法:1、修改监听文件,增加SID_LIST_LISTENER,两台机器都要修改,修改完毕后如下:LISTENER_ORCL1 =(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) ) )SID_LIST_LISTENER_ORCL1 =(SID_LIST = (SID_DESC = (ORACLE_HOME = /u01/app/oracle/product/11.1.0) (SID_NAME = ora1) )2、修改tnsname.ora,两台机器都要修改,例如第一台机器: 用Oracle的netca配置的时候,只配置了一个监听LISTENERS_ORCL,手工增加另外两个监听。LISTENER_ORCL2 =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521)LISTENER_ORCL1 =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521)LISTENERS_ORCL =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521)ORCL1 =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = ORCL) )ORCL2 =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = ORCL) )ORCL =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521) (LOAD_BALANCE = yes) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) )3、修改pfile,将两个本地监听设置上。可以先导出一份spfile,修改完毕后再导入pfile。增加以下三行:*.local_listener=LISTENER_ORCLora1.local_listener=LISTENER_ORCL1ora2.local_listener=LISTENER_ORCL2另 外,在启动oralce时,出现ora-32006的错误,数据库倒是起来能用。到网上搜索一通,说是oracle10g以后 将*.log_archive_start=TRUE 这个参数去掉了,把这行从spfile中删除了,再启动没有报错。是否真的不需要这个参数,还需要再确认。4、oracle驱动经测试发现,在oracle RAC环境下,如果down掉一个实例,应用出现以下错误:Io 异常: Software caused connection abort: socket write errororg.apache.cocoon.ProcessingException: error on execute servlet:login: javax.servlet.ServletException: error on execute servlet:logincause:java.sql.SQLException: Io 异常: Software caused connection abort: socket write error经反复测试,确定原因是oracle的驱动ojdbc14.jar没有放到WEB-INF/lib下的原因。此启动在公共lib下,必须COPY到当前工程下,才能实现fail-over的自动切换.5、测试jdbc连接的程序:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class RacTest /* * 测试RAC * * param args * throws ClassNotFoundException */ public static void main(String args) throws ClassNotFoundException String url; Connection conn = null; Statement stmt = null; ResultSet rs = null; Properties conProps = new Properties(); conProps.put(user, sys); conProps.put(password, XXXX); conProps.put(internal_logon, sysdba); url = jdbc:oracle:thin:(description= (ADDRESS_LIST =; url += (address=(protocol=tcp)(host=)(port=1521); / 服务器IP url += (address=(protocol=tcp)(host=)(port=1521); url += (load_balance=yes); / 是否负载均衡 url += (connect_data =; url += (server = dedicated);/ 专用服务器模式 可以去掉? url += (service_name=orcl); / 服务名 /url += (failover_mode =; /url += (type=session); /url += (method=preconnect); /url += (retries=5); /url += (delay=15); url += ); /* * LOAD_BALANCE = yes表示程序走sword连接的时候,将在下面的地址里面随机的选择一个,达到接点间连接均匀 * failover表示开启TAF(Transparent Application Failover)特性,其中TYPE = * SESSION表 示当一个连接好的会话 * 的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL 需要重新执行,METHOD = * BASIC表示初始连接就连接一个接点,他还有个选项是preconnect,表示初始连接所有的 * 接点,在failover的时候可以很快就切过去,这个基本是资源浪费 RETRIES:重试次数 DELAY:重试间的延迟(以秒为单位) * 如果指定了RETRIES,DELAY默认为1 如果指定了DELAY,RETRIES默认为5 */ / String sql = select * from oa_sfm_fb_fwgl t where t.pk_id = / 17233; String sql = select * from v$instance; try Class.forName(oracle.jdbc.driver.OracleDriver); conn = DriverManager.getConnection(url, conProps); / conn = DriverManager.getConnection(url, username, password); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next() System.out.print(rs.getString(INSTANCE_NAME); rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); conn = null; catch (SQLException ex) ex.printStackTrace(); finally if (rs != null) try rs.close(); rs = null; catch (Exception ex) ex.printStackTrace(); if (stmt != null) try stmt.close(); stmt = null; catch (Exception ex) ex.printStackTrace(); if (conn != null) try conn.close(); conn = null; catch (SQLException ex) ex.printStackTrace(); WEBLOGIC连接Oracle RAC的负载均衡测试要进行压力测试,中间件使用WEBLOGIC 816,数据库版本为 RAC,压力测试工具为LOADRUNNER 8.0。测试单实例与RAC环境各个节点的负载情况。在WEBLOGIC上配置了一个多池,利用WEBLOGIC提供的负载均衡策略,将并发均衡的分别到两个节点上。但是测试发现,一旦运行了一段时间,所有的压力都会加载到一个节点上,而另一个节点上机会没有任何的压力。通过数据库中查询到的结果如下:SQL SELECT INST_ID, STATUS, COUNT(*) 2 FROM GV$SESSION3 WHERE USERNAME = NDMAIN4 GROUP BY INST_ID, STATUS;INST_ID STATUS COUNT(*)- - -1 INACTIVE 61 ACTIVE 12 ACTIVE 1472 INACTIVE 3WEBLOGIC的并发设置为150,而LOADRUNNER并发为200,Oracle每个实例的SESSION为600。可以看到,基本上压力完全集中在实例2上。实例1上处于空闲状态,如果压力测试运行时间足够长,可能在短时间内实例1上的ACTIVE连接能达到二、三十左右,但是很快又全部释放。SQL SELECT INST_ID, STATUS, COUNT(*) 2 FROM GV$SESSION3 WHERE USERNAME = NDMAIN4 GROUP BY INST_ID, STATUS;INST_ID STATUS COUNT(*)- - -1 ACTIVE 201 INACTIVE 542 ACTIVE 1212 INACTIVE 28测试了多次,结果都很类似,压力几乎完全集中到一个节点上。不过不见得每次压力都是在节点2上,很有可能在WEBLOGIC服务重启之后,下次测试开始,所有的压力都集中到节点1上。这说明问题应该不是两个节点的硬件处理不平衡造成的。这个测试的是长时间运行的查询,而对于快速相应的INSERT语句,可以看到两个节点上都有很少的ACTIVE的会话。这时因为事务处理很短暂,不可能在短时间内使得WEBLOGIC的并发跑满,因此这种情况没有问题。SQL SELECT INST_ID, STATUS, COUNT(*) 2 FROM GV$SESSION3 WHERE USERNAME = NDMAIN4 GROUP BY INST_ID, STATUS;INST_ID STATUS COUNT(*)- - -1 INACTIVE 501 ACTIVE 12 ACTIVE 12 INACTIVE 98对于长时间查询的情况,WEBLOGIC的LOAD-BALANCING策略似乎存在问题,导致两个节点压力出现倾斜。开始认为可能是由于WEBLOGIC的版本太低导致了问题的产生,于是将WEBLOGIC升级到了最新的版本10.3,可是测试结果依旧。由于前面测试使用的都是WEBLOGIC的LOAD-BALANCING策略进行的,尝试了一下HING-AVAILABILITY策略,发现这个策略倒是和它本身的名称更相符一些,但是也存在一定的问题。这个策略会优先MULIT POOL中的第一个连接池,如果第一个连接池可以连接,就不使用第二个连接池。即使并发用户太多,导致很多连接超时的错误,WEBLOGIC也不会去尝试使用第二个连接池。当后台关闭实例1,导致连接池1的连接失败,这时WEBLOGIC开始使用第二个连接池。一旦实例1启动,WEBLOGIC检测到连接池1可用,马上所有的连接都会从连接池2上转移到连接池1,恢复到实例1关闭之前的情况。基于上面的情况,感觉WEBLOGIC只是实现了连接池的优先级设置,而不是真正意义上的HIGH-AVAILABILITY。扯远了,下面继续说WEBLOGIC的LOAD-BALANCING。由于升级到最新版本都无法解决这个问题,只好在网络上搜索,结果发现不少相似的案例。不过没有发现解决方案。不过在metalink里面的一篇文章提到可以在WEBLOGIC里面的URL=”jdbc:oracle:thin”后面直接使用Oracle的tnsnames.ora中的配置。比如这里配置URL=”jdbc:oracle:thin (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=8) (PORT=1521) (AD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版防腐木户外装饰材料环保检测合同范本
- 二零二五年度房产评估咨询代理合同范本
- 2025版特种矿粉供应与采购合作合同范本
- 二零二五年度安全防护栏杆设计与施工一体化协议
- 二零二五年度装配式建筑班组构件生产及施工合同
- 二零二五年度农家院休闲旅游租赁服务合同
- 2025版新能源设备租赁合同远期支付及退租协议
- 2025版电子产品分期购买与智能生活解决方案合同
- 2025版智慧城市道路施工合同操作指南
- 二零二五年度债权债务清收与追偿服务合同
- 环境综合应急预案
- 氯甲烷泄露应急预案
- 2.PaleoScan详细操作流程
- 林业有害生物防治知识竞赛真题模拟汇编(共184题)
- PLC西门子S7-1200应用技术完整全套教学课件
- 苏州银行总行信息科技部招聘考试真题2022
- 铜陵横港化工园区总体发展规划(2021-2035年)环境影响报告书
- 专升本数学教材(新)
- 安装电工电气调试员安全技术操作规程
- GB/T 11547-2008塑料耐液体化学试剂性能的测定
- (完整版)人工智能介绍课件
评论
0/150
提交评论