网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle中关于逻辑备份与恢复.
.完全攻略Oracle数据库的备份与恢.
.在Oracle里使用RAID.
.Oracle数据库常见问题答疑.
.Fontconfig用户手册.
.自动监控运行情况──事件.
.Linux 硬件稳定性指南,第 2 部分.
.Oracle 10G 最佳20位新特性:物化.
.SQLPlus使用技巧点滴.
.TestKing Oracle 1z0-023 V5.
.Oracle 应用技巧.
.Linux 开机流程分析.
.如何查看用户表上的约束内容?.
.AIX下自动启动Oracle数据库与监听.
.在复杂应用环境下监控ORACLE数据.
.OMF方式手动创建数据库.
.Oracle内部工具Block Corruption.
.Oracle8i数据库中索引的维护.
.PL/SQL初学者必读:几十个实用的.
.如何在硬碟建置Linux系统之关於虚.

[oracle]使用Oracle10g jdbc 驱动中ConnectionCaching所产生的问题 的补充

发表日期:2008-2-9


首先参照 [Oracle]使用Oracle10g jdbc 驱动中ConnectionCaching所产生的问题 这篇文章,在最后提出的解决方案是在 getConnection之前进行 无效Cache的监测,和更换。经过实际测试,发现refreshCache的时候,所占用的时间也是一笔不小的开销,每次平均在0.2秒左右,对于一个Action处理中多次getconnction的处理来说,累计起来的时间能够达到一秒之多。为了解决这个问题,存在两种方案:
1. 对于存在dblink的plsql的action,getconnection之前调用refreshCache。 其他的PLSQL,getconnection之前不调用refreshCache
 优点:1。保证plsql的正常调用。不会出现异常。
             2。无dblink的plsql ,不需要调用refreshCache,节省了执行时间。
 缺点:1。需要对有dblink的plsql的action程序进行各个修改。
             2。即使PLSQL没有修改也要调用refreshCache,还是消耗了不必要的时间。

2.在执行plsql后进行特定异常的判定处理,假如是plsql被废弃的异常,调用一次refreshCache处理。
优点:1。保证dblink的plsql变更后只调用一次refreshCache处理,没有消耗不必要的时间。
            2。此处通常可以进行共通的修改,即修改点一处。
缺点:1。plsql变更后,必定有一次错误被表示。
            2。plsql变更后,必定有一次错误被表示。而这个错误表示的回数上面不确定。因为使用了connectionpool,所以connection越多,这个错误表示的回数上面越不确定

建议解决方法:
   因为plsql的变更通常是开发和测试人员进行调试用,所以开发和测试人员更改完plsql后,马上进行运行中系统这个PLSQL相关程序的执行,使自己看到这个message,即保证cache已经被refresh,这样就不会影响客户访问正在运行的系统的功能。

参考代码:
        try {
          proc.execute(); // proc is an instance of OracleCallableStatement
        } catch (SQLException e) {
          String em = e.getMessage();
          if(em != null && em.indexOf("ORA-04068") != -1 &&
             em.indexOf("ORA-04061") != -1 &&
             em.indexOf("ORA-04065") != -1 &&
             em.indexOf("ORA-06508") != -1 &&
             em.indexOf("ORA-06512") != -1) {
            ConnectionManager.refreshCache(); // refreshCache method is what the previous article
            throw e;
          }
       }总结:
  本问题的针对性比较强,对于release中的系统但还要进行机能变更的时候,所产生的特定问题的特定解决方法而已。 汗!!!!!!!

上一篇:java语言操作Oracle数据库中的CLOB数据类型 人气:926
下一篇:[oracle]使用Oracle10g jdbc 驱动中ConnectionCaching所产生的问题 人气:1598
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐