分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

隐含连接缓存

在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,这其中的具体的产生原因又是什么呢?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有