Oracle ODP.NET连接池
数据库连接池
连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁。连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据库连接,如果缓存中有空闲的连接则直接使用,无空闲连接时就去新创建。这样可以提高因数据库连接创建而额外消耗的资源,从而提高整体性能。
.NET连接Oracle
.NET连接Oracle数据库的库主要有3种:
- .NET自带的 .NET Framework Data Provider for Oracle
- Devart提供的dotConnect for Oracle
- 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的数据库连接字符串格式主要有以下几种:
- 使用TNS
该方式需要配置TNS,一般需要提供用户id和密码(集成认证方式可以省略用户id和密码)。具体的字符串格式如下:
Data Source=TORCL;User Id=myUsername;Password=myPassword;
- 不依赖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;
- 使用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连接池的更多相关文章
- python - DBUtils 连接池减少oracle数据库的连接数
问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...
- Tomcat连接池配置与实现/JNDI
方法一: 在Tomcat的conf/context.xml中配置在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值如下: <?xml ...
- proxool连接池参数解释
数据库连接池概述: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个 应用程序的伸缩性和健壮性,影响到程序的性能指标.数 ...
- oracle database resident connection pooling(驻留连接池)
oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...
- 记录关于使用ADO.NET 连接池连接Oracle时Session信息不更新的坑
最近的一个项目中,由于界面查询的数据量比较大,关联的表比较多,有些数据查出来需要临时保存起来供后面的查询使用,于是想到了用oracle的临时表来实现这个需求.大家都知道,oracle的临时表有两种:事 ...
- JavaEE连接池泄漏问题检测Oracle数据库
1.项目环境 项目是典型的轻量级JavaEE项目,使用SSH框架构建,数据源使用DBCP管理,和Spring进行了整合. 项目数据库使用Oracle数据库. 项目DBCP配置内容如下 ###### D ...
- 有关.NET链接Oracle数据库,使用连接池pooling=true时问题
.net链接oracle数据库时,当链接字符串中pooling=true时,视图结构变更时程序报错问题,还请高手指教 现象: 链接字符串: 注意:这里pooling=true: 测试视图: 执行的SQ ...
- [转]DBCP连接池的最简单应用(用于ORACLE数据库)
http://blog.csdn.net/iihero/article/details/8254107 http://www.programgo.com/article/81693457907/ 鉴于 ...
- oracle 连接池参数
后来排查出数据库监听异常,发现是ORA-12519拒绝错误.后来发现是数据的连接池达到的极致. 具体解决方案如下: --首先检查process和session的使用情况,在sqlplus里面查看. S ...
随机推荐
- linux内核学习(一步一步走)——内核概述
一.用户空间与内核空间: 用户通过用户空间与操作系统打交道,程序员开发或使用的应用程序位于用户空间.用户空间不能直接访问内核,从而不能访问硬件资源,但是可以通过内核定义的最外层例程——系统调用来访问. ...
- 学习记录 Eclipse常用快捷键及其演练
Eclipse中10个最有用的快捷键组合 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask ...
- AX 获得当前Grid的数据源的记录行数
sysQuery::CountTotal();方法 eg: int lines = sysQuery::CountTotal( SalesTable_ds.QueryRun());
- [python 2.7.5] 实现配置文件的读写
import ConfigParser config = ConfigParser.RawConfigParser() # When adding sections or items, add the ...
- C# Webservice 解决在运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度问
摘自: http://blog.csdn.net/gulijiang2008/article/details/4482993 请在服务器端配置 方法一: 在通过WebService处理大数据量数据时出 ...
- leetcode 104
104. Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is ...
- shell script 基本语法
几个符号的意义$#:代表后接的参数『个数』,以上表为例这裡显示为『 4 』:$@:代表『 "$1" "$2" "$3" "$4&q ...
- 一个利用sed和awk处理文本的小栗子
这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...
- centos -bash-4.1$ 不显示用户名路径
1.在Terminal输入: vi ~/.bash_profile 2.如果没有.bash_profile可以自己添加.然后往文件中添加如下内容: export PS1=’[\u@\h \W]$ 注意 ...
- POJ C程序设计进阶 编程题#4:寻找平面上的极大点
编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描 ...