数据库连接池

连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁。连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据库连接,如果缓存中有空闲的连接则直接使用,无空闲连接时就去新创建。这样可以提高因数据库连接创建而额外消耗的资源,从而提高整体性能。

.NET连接Oracle

.NET连接Oracle数据库的库主要有3种:

  1. .NET自带的 .NET Framework Data Provider for Oracle
  2. Devart提供的dotConnect for Oracle
  3. Oracle提供的 Oracle Data Provider for .NET / ODP.NET

目前xAsset系统使用的是第3种,由Oracle提供的ODP.NET。ODP.NET提供了一套实现了ADO.NET相关接口的类,并提供了使用Oracle数据库一些高级功能的接口,比如RAC,XML DB,批量插入等。相对于.NET自带的库性能上也提高不少。

ODP.NET现在是Oracle ODAC(Oracle Data Access Component)的一部分。使用前需要先安装ODAC组件,Oracle提供了xcopy的方式和可执行程序的方式供下载安装。具体安装方法见官方文档。

ODP.NET的数据库连接字符串格式主要有以下几种:

  1. 使用TNS

该方式需要配置TNS,一般需要提供用户id和密码(集成认证方式可以省略用户id和密码)。具体的字符串格式如下:

Data Source=TORCL;User Id=myUsername;Password=myPassword;

  1. 不依赖tnsnames.ora的ODP.NET方式

该方式不需要配置TNS,以把配置在TNS里的连接字符串直接放到Data Source节点中的方式实现。连接字符串中直接提供了服务器地址,端口,实例等信息,具体格式如下:

Data Source=(DESCRIPTION=(ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=MyHost) (PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));

User Id=myUsername;Password=myPassword;

  1. 使用EZ Connect的方式

使用EZ Connect方式也不需要进行特殊配置,但需要数据库服务中的sqlnet.ora启用该方式,添加NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)启用,具体连接字符串格式如下:

Data Source=username/password@myserver//instancename;

ODP.NET的连接池及相关功能

ODP.NET提供了连接池的功能。当然我们可以选择使用或不使用,是否启用连接池功能由数据库连接字符串决定。连接参数提供了Pooling这个参数,如果值为true则启用连接池,否则不启用,不提供该参数时默认是启用连接池的。

数据库连接参数中除了上面提到的标准参数Data Source,User Id,Password外,与连接池相关的参数主要有几个:Connection Lifetime, Connection Timeout, Decr Pool Size, Incr Pool Size, Max Pool Size, Min Pool Size, Pooling, Validate Connection。

当启用连接池时,取得一个数据库连接的过程大致如下:

l  如果连接池不存在(比如应用程序刚启动第一次访问数据库),则ODP.NET创建连接池并按参数“Min Pool Size”设置的值(默认1)初始化数据库连接。这个值指定了连接池中的最小连接数量,无论如何连接池中至少有该值设定的数据库连接存在。直到连接池销毁。

l  如果连接池存在,则检查是否有可用连接。

u  如果有可用连接,连接就从池中取出返回给应用程序。

n  如果启用了“Validate Connection”,则连接池会去数据库服务器验证当然连接是否有效。

u  如果没有可用连接,连接池会检查当前池中的连接数是否已达到指定的上限“Max Pool Size”(默认100)。

n  如果已经达到最大上限,则请求会等待一段“Connection Timeout”(默认15秒)指定的时间,检查是否这段时间内有连接返回到池中。

  • 如果有连接返回到池中,则直接取该连接返回给请求的应用程序。
  • 如果指定时间内仍没有连接可用,则抛出“Connection request timed out”异常。

n  如果还没达到上限,则连接池会主动创建“Incr Pool Size”(默认5)指定的值的连接,并返回其中一个给请求的应用程序。

当应用程序从数据库取得数据并调用Close()/Dispose()时,连接池检查连接的生命同期是否超过了“Connection Lifetime”(默认0,不检查)。

如果连接的生命周期超过了定义的值,则该连接会被真正关闭。这个关闭,指应用程序所在连接池到数据库服务器的物理连接关闭。

连接只有返回到池中时才会做该检查,如果在使用中不会检查。

当然如果连接真正关闭后池中的连接数量会小于“Min Pool Size”指定的值时,连接也不会关闭。

连接池每隔3分钟会关闭池中没有使用的连接,每次关闭的数量由“Decr Pool Size”设定的值(默认1)指定。

Oracle ODP.NET连接池的更多相关文章

  1. python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  2. Tomcat连接池配置与实现/JNDI

    方法一: 在Tomcat的conf/context.xml中配置在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值如下: <?xml ...

  3. proxool连接池参数解释

        数据库连接池概述: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个 应用程序的伸缩性和健壮性,影响到程序的性能指标.数 ...

  4. oracle database resident connection pooling(驻留连接池)

    oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...

  5. 记录关于使用ADO.NET 连接池连接Oracle时Session信息不更新的坑

    最近的一个项目中,由于界面查询的数据量比较大,关联的表比较多,有些数据查出来需要临时保存起来供后面的查询使用,于是想到了用oracle的临时表来实现这个需求.大家都知道,oracle的临时表有两种:事 ...

  6. JavaEE连接池泄漏问题检测Oracle数据库

    1.项目环境 项目是典型的轻量级JavaEE项目,使用SSH框架构建,数据源使用DBCP管理,和Spring进行了整合. 项目数据库使用Oracle数据库. 项目DBCP配置内容如下 ###### D ...

  7. 有关.NET链接Oracle数据库,使用连接池pooling=true时问题

    .net链接oracle数据库时,当链接字符串中pooling=true时,视图结构变更时程序报错问题,还请高手指教 现象: 链接字符串: 注意:这里pooling=true: 测试视图: 执行的SQ ...

  8. [转]DBCP连接池的最简单应用(用于ORACLE数据库)

    http://blog.csdn.net/iihero/article/details/8254107 http://www.programgo.com/article/81693457907/ 鉴于 ...

  9. oracle 连接池参数

    后来排查出数据库监听异常,发现是ORA-12519拒绝错误.后来发现是数据的连接池达到的极致. 具体解决方案如下: --首先检查process和session的使用情况,在sqlplus里面查看. S ...

随机推荐

  1. 出现win8.1蓝屏重启故障该如何解决?

    出现win8.1蓝屏重启故障该如何解决?电脑出现win8.1蓝屏重启故障,系统提示“你的电脑遇到问题,需要重新启动,我们只收集某些错误信息,然后为你重新启动.”怎么解决?本教程为你提供了win8.1蓝 ...

  2. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  3. 09_platform-tools简介&常见adb指令

    SDK下面的文件夹说明add-ons 附加的附属的一些信息.docs Android开发的帮助文件.extras 支持的jar包,高版本兼容底版本.google usb的驱动.platforms 存放 ...

  4. LSP遇到的问题

    无法打开网页,LSP必须安装在C:\windows 安装在这里比较好 c:\windows\system32

  5. LSP“浏览器劫持概念

    关于Winsock LSP“浏览器劫持”,中招者一直高居不下,由于其特殊性,直接删除而不恢复LSP的正常状态很可能会导致无法上网所以对其修复需慎重.   先说说什么是Winsock LSP“浏览器劫持 ...

  6. 用pxe启动iso光盘里的pe

    用pxe启动iso光盘里的pe 我不是个运维,所以pxe我是由于一台比较老的笔记本不能u盘启动.光驱又坏了的情况下,硬盘上的系统在我不小心下...ghostexp解压ghost文件到c盘的时候,c盘是 ...

  7. MyEclipse 中文乱码 史诗级解决方法。也可用于其他编码

    最近发现以前写的项目全乱码了.唯独  .java 中的中文全是乱码. 由于,后期的项目把默认编码改成了UTF-8所以就乱了. 每个编码表的编码都不一样.不能直接通过改某个属性来更改达到目的 (除非你是 ...

  8. Linux设备驱动开发环境的搭建(转)

    经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...

  9. 手机连上wifi热点后自动弹窗的功能

    使用buildroot编译bind DNS服务器 用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常 ...

  10. eclipse启动tomcat时设置端口

    近在做项目需要更改tomcat的端口号,开发工具用的是Eclipse,更改后在Eclipse中重启发现,端口号依然是8080,原来在配置文件更改了tomcat端口号后,要在Eclipse重新装载一次, ...