网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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 Advanced Replication.
.oracle10g在Solaris10上的安装.
.字符集问题的初步探讨.
.Oracle中的汉字显示.
.用 Oracle AS 10g 为PHP提供的一.
.显示数据库中所有表及其信息.
.常用的查看数据库的SQL.
.oracle数据库性能监控的SQL.
.Oracle9i的企业管理器介绍.
.Oracle中null的使用详解.
.VB调用Oracle返回数据集.
.Oracle内存结构:Shared Pool的详.
.优化数据库的三板斧 大幅提高Ora.
.如何在Windows 2000下将Oracle完.
.TestKing Oracle 1z0-023 V5.
.oracle高级复制维护中要注意的几.
.用Oracle 9i全索引扫描快速访问数.
.把oracle表里的数据导成insert语.
.缩小数据库日志的另类方法代码分.
.Oracle中轻松取得建表和索引的DD.

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

发表日期:2008-2-9


隐含连接缓存
在Oracle 数据库10g 之前,JDBC 驱动程序可提供连接缓存支持,然而
在可扩展性、易用性和可治理性方面存在诸多限制。例如,所有对象均在
同一数据库中,并作为同一用户进行鉴权,而没有清除失效连接的机制;
此外,由于所有对话均属于同一数据库,并作为同一用户进行鉴权,因此
根本无法存储作为其它用户进行鉴权的连接。Pre-10g JDBC 驱动程序缓存
治理不答应连接缓存在可能失效时调整大小或刷新;不支持搜索连接或收
回所放弃的连接。这些缺点促使了对一种更完善的新型连接缓存机制“隐含
连接缓存”的需求。
隐含连接缓存可提供丰富的特性,包括:透明或隐含访问连接缓存,支持
存储任何经过鉴权的连接,能够刷新或重复利用来自缓存的失效连接,支
持基于用户定义的属性的连接检索、基于属性和权重的连接检索。透明访问连接缓存
通过缺省设置,DataSources 答应获得直接到数据库的物理连接。利用“隐
含连接缓存“,通过简单将DataSource 属性ConnectionCachingEnabled
指向true,便可从连接缓存获得连接,始终使用同一标准getConnection()
API。这极大简化了DataSource 和连接缓存访问。其它所有事项均可选,
并可根据需求来执行。例如,可以选定一组定义缓存行为的连接缓存属性,
而不必使用缺省属性。// Example to show binding of OracleDataSource to JNDI
// with relevant cache properties set on the DataSource.

// Set DataSource properties
ods.setUser(“Scott”);

ods.setConnectionCachingEnabled(True);
ods.setConnectionCacheName(“MyCache”);
ods.setConnectionCacheProperties(cp);
ctx.bind(“MyDS”, ods);

ods =(OracleDataSource) ctx. lookup(“MyDS”); // lookup cache DataSource
//Transparent creation and retrieval of connection(s) from “MyCache”
conn = ods.getConnection();
conn.close(); // return connection to the cache
感谢Oracle10g jdbc driver带来的令人激动人心的特性,但是在实际的使用过程中,出现了下列问题:
问题描述: 在使用了setConnectionCachingEnabled(True); 语句后,我们发现当程序在Cache模式运行下
,假如这个时候对数据库中的PLSQL的内容进行更改后,运行程序访问这个PLSQL的话,会报出如下错误:
(CSDN如何上传图片,faint)依次为ORA-06512,ORA-0650,ORA-04065,ORA-04061,ORA-04068,最后一个错误是Package的状态已经被废弃。经过调查,发现
1。假如不使用Cache,不会出现这个问题。
2。使用Cache,这个问题会在不同的server上面在不同的一段时间间隔内自动消失。
3。假如不使用Cache,也无法使用Oracle提供的连接池功能。如最小的连接数,初始化时所建立的连接数等。
4。不是所有的PLSQL的内容变更后都出现这个问题,只有PLSQL中包含有DB LINK的PLSQL才存在此问题。解决篇
根据2。使用Cache,这个问题会在不同的server上面在不同的一段时间间隔内自动消失。
这个特性,从Cache的设定参数上进行测试,终于发现 解决方法。
解决方法:
   这段是Oracle的官方文档
Connection Recycling Support
Over a period of time, connection cache accumulates stale connections. There are two modes for recycling or refreshing stale connections in the cache: REFRESH_INVALID_CONNECTIONS and REFRESH_ALL_CONNECTIONS.
• With REFRESH_INVALID_CONNECTIONS each PooledConnection in the cache is checked3; if invalid, the connection’s resources are removed and replaced with a new PooledConnection.
• WIth REFRESH_ALL_CONNECTIONS, all the available connections in the cache are closed and replaced with new valid physical connections.
3 The validity test is as simple as: select 1 from dual;程序中的设定
在从data source中取得db连接之前调用如下这段话即可
  OracleConnectionCacheManager.refreshCache(cache名,oracle.jdbc.pool.OracleConnectionCacheManager.REFRESH_INVALID_CONNECTIONS);总结: 新技术伴随着新风险, 莫名其妙的问题虽然解决了,但是 为什么是DBLINK,这其中的具体的产生原因又是什么呢?
上一篇:[oracle]使用Oracle10g jdbc 驱动中ConnectionCaching所产生的问题 的补充 人气:1125
下一篇:经典Java开发工具介绍(1):Oracle Internet Developer 人气:703
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐