.Net与Oracle的数据库连接池

本文介绍了数据库连接池的概念及其在提高应用程序伸缩性和性能方面的作用。重点讲解了.Net中如何管理和使用Oracle数据库连接池,强调了正确关闭和释放连接的重要性,以及连接池如何根据连接字符串创建并管理不同类型的连接。此外,还提到了连接池对Transaction Context的支持以及如何通过ConnectionString的关键词来控制连接池的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间: 2006-06-15  来自:优快云
永久收藏
<script type="text/javascript"><!-- google_ad_client = "pub-0103898066674568"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text"; google_ad_channel = ""; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "666666"; google_color_text = "4C4C4C"; google_color_url = "666666"; //--> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

概述:

  数据库连接池允许应用程序重用已存在于池中的数据库连接,以避免反复的建立新的数据库连接。这种技术能有效提高应用程序的伸缩性,因为有限的数 据库连接能够给大量的客户提供服务。这种技术同时也提高的系统性能,避免了大量建立新连接的开销。

  开发一个具有伸缩性的、高性能应用程序应该最大限度的减少建立连接所花费的时间,保持数据库连接最大限度的有效,以存取数据。当一个数据库连接 关闭时,它只是由连接池收回以待重用,并未真正释放。但是,如果连接池被释放,数据库连接将会被释放掉。

  开发人员应当注意不要依赖垃圾回收机制去释放数据库连接,因为当参数超出作用域时,数据库连接并没有得必要的关闭,这种数据库资源泄漏将导致建 立新连接时抛出连接错误。

  建立数据库连接池

  当打开一个数据库连接时,一个数据库连接池也就创建了。数据库连接池的创建与数据库连接字符串精确的相关(包括空格、大小写)。所有的连接池是 根据连接字符串来区分的。在创建一个新的数据库连接时,如果连接字符串不完全相同,将创建不同的连接池。

  一旦数据库连接池被创建,它将一直存在直到该进程结束。维护一个非活动状态的连接池几乎不需要什么系统开销。

  连接池中的数据库连接
  
  连接池根据唯一的连接字符串被创建。在连接池被创建的同时,连接池将创建最小的数据库连接,当连 接不够用时,连接池将逐个添加数据库连接直到达到最大连接数,此后的连接请求将被加入请求队列里。当调用数据库连接对象的Close方法或Dispose 方法时,数据库连接将被数据库连接池回收。

  当数据库连接使用完成后,要调用Close方法或Dispose方法将它返回连接池。没有显式释放的数据库连接可能会没有返回连接池。

  注意不要在类的Finalize方法中调用任何管理类如Connection,DataReader等的Finalize方法,必须将数据库连 接的释放权交给连接池。

  释放数据库连接
  当数据库连接超时或服务已经完成时,连接池将会将其资源释放,这只能通过试图与数据库通讯来判断。如果发现数据库连 接不可用,它将被标记为不可用资源。数据库连接池将定时扫描数据库连接,释放所有不可用资源。

  如果发现现有的数据库连接不可用,那么可能是该连接被数据库连接池标记为不可用资源了,这时将抛出一个异常。尽管如此,你还是必须释放连接,将 它返回连接池。

  支持Transaction
  数据库连接池内的数据库连接是按照Transaction Context划分的,每当连接池接到连接请求时,他将返回与请求者Transaction Context相匹配的数据库连接。因此,每个连接池都由数个Transaction Context相关的数据库连接和一个Transaction Context无关的数据库连接组成。当数据库连接被返回连接池时,它将被放回对应的Transaction Context组中。

  用连接字符串关键字控制数据库连接池
  OracleConnection对象的属性ConnectionString有一些能支持连 接池控制的key-value字符串。下表是这些key-value字符串的详细说明。

 

名称

默认值

说明

Connection Lifetime

0

当数据库连接被返回到连接池中时,它的创建时间将与当前时间比较, 如果超过了 Connection Lifetime 规定的时间,它将被释放掉。

0 时将被视为最大连接时间。

Enlist

'true'

当此值为 true 时,池中现存的所有数据库连接将被加入到它的创建线程的 Transaction Context 中。如果不存在这个 Transaction Context 则无任何变化。

Max Pool Size

100

连接池能建立的最大数据库连接数。

Min Pool Size

0

连接池要保持的最小数据库连接数。

Pooling

'true'

当设为 true 时,数据库连接将由相应的连接池管理。


作 者:Iorishinier   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值