手机站
网通分站
电信主站
密 码:
用户名:
热门关键字:  虚拟主机  cn域名  域名注册  非法  seo
当前位置 : 主页>程序设计>Java技术>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23 点击:
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

首先参照 [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中的系统但还要进行机能变更的时候,所产生的特定问题的特定解决方法而已。 汗!!!!!!!

上一篇: 利用SimpleDateFormat 和MessageFormat 向数据库中插入yyyy-mm-dd 和yyyy-MM-dd HH:mm:ss的日期格式
下一篇: 升级到Hibernate3.0的理由

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名
注册