- 浏览: 1205307 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
理解oracle中连接和会话
1. 概念不同:
连接是指物理的客户端到oracle服务端的连接。一般是通过一个网络的连接。
在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行。
2. 关系是多对多:[同意网友的意见,应该是1对多。一个会话要么没有连接,要么在一个连接上。]
一个连接上可以建立0个,1个,2个,多个会话。
Oracle允许存在这样的会话,就是失去了物理连接的会话。
3. 概念应用:
l oracle的sessions参数决定的是会话数而不是物理连接数。
l oracle的临时表中的数据是各会话间隔离的,而与连接概念无关。
l jdbc的connection,对oracle是一个会话的概念。
4. 实际应用:
连接池,为了提高数据库交互效率,一般驱动程序都有连接池概念的实现。
Oracle不同的驱动提供两种连接池概念。
一种译为隐式连接缓冲
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@10.1.3.60:1521:orcl");
ods.setUser("NC50_DEV");
ods.setPassword("NC50_DEV");
ods.setConnectionCachingEnabled(true);
java.util.Properties jup = new java.util.Properties();
jup.setProperty("InitialLimit", "1");
jup.setProperty("MinLimit", "1");
jup.setProperty("MaxLimit", "2");
ods.setConnectionCacheProperties(jup);
Connection cx0 = ods.getConnection();
隐式连接缓冲在第一次getconnection()时将根据配置初始化连接,并在每一个连接上建立一个会话。然后从这些会话中返回一个给本次调用。以后如果在本次connection.close()前调用getconnection(),将肯定得到另外一个会话。如果初始时建立的会话不够了,那么将新建物理连接,并在连接上建立一个会话。当然不能超过两个限制:1.MaxLimit【见程序,限制物理连接数】。
2.sessions【oracle参数】。每次close()并不关闭实际的会话,而是返回连接缓冲中,供另一个getconnection()使用。所以可以得知,如果一个getconnection()中给某一个会话级临时表插入数据,然后close(),那么之后如果这个会话被重新得到,是可以看到插入的数据的。
一种译为OCI连接池。
OracleOCIConnectionPool ods = new OracleOCIConnectionPool();
String tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS="
+ "(PROTOCOL=TCP)(HOST=10.1.3.60)(PORT=1521)))"
+ "(CONNECT_DATA=(SERVICE_NAME=ORCL)))";
ods.setURL("jdbc:oracle:oci:@" + tns);
ods.setUser("NC50_DEV");
ods.setPassword("NC50_DEV");
java.util.Properties jup = new java.util.Properties();
jup.setProperty(OracleOCIConnectionPool.CONNPOOL_MIN_LIMIT, "2"); jup.setProperty(OracleOCIConnectionPool.CONNPOOL_MAX_LIMIT, "2");
jup.setProperty(OracleOCIConnectionPool.CONNPOOL_INCREMENT, "0");
ods.setPoolConfig(jup);
Connection cx0 = ods.getConnection();
OCI连接池在第一次getconnection()时将根据配置初始化连接,并在每一个连接上建立一个会话。注意,连接上一旦建立了一个会话,这个连接将还可以再建会话。那么在此时,会任取一个建完会话的物理连接再建一个会话返回。这样看来似乎OCI连接池只需建立一个物理连接就可以建立任意多的会话,当然这时也要受限于oracle允许的sessions设置。实际上OCI到底1个物理连接对应多少个会话,OCI自身有一个对应用透明的管理。但是CONNPOOL_MAX_LIMIT一定是限制住此客户端可用的物理连接数的。对于OCI连接池,每一个connection.close()都将实际关闭会话,但物理连接保留。所以可以得知,如果一个getconnection()中给某一个会话级临时表插入数据,然后close(),那么此数据将被删除。
5.关于专用服务器模式下processes参数
对于隐式连接缓冲,每一个连接上建立一个会话,对于每一个会话都将对应一个dedicated process。
对于OCI连接池,只有物理连接上建立的那个会话才对应一个dedicated process(这里记为DP_A,DP_B)。而其他会话对应一个PSUEDO process.这是一个轻量级process,它是不算processes数的。
所以关于这个问题“专用服务器模式是一个物理连接对应一个process,还是一个会话对应一个process?”,从这里可以理解oracle的设计思路确实一个是会话对应一个process,与物理连接不相关。但是实际的实现呢?当oci获得的connection上执行sql时,ORCLED的响应还是会借助到DP_A,DP_B上,如果DP_A,DP_B正忙,那就得一样地等。
补充:
1.物理连接一般跟网络资源有关的。通过网络的一个物理连接会占用客户端一个新的临时端口。
2.JTA事务管理,是针对多个会话的DB访问,维系在一个事务中。这个概念是多会话,而不是刻意强调多个数据源(两个ORACLE),甚至异种数据库。JDBC事务管理,是建立在一个会话上的事务。
3.processes参数控制的是oracle所有进程/线程,不仅仅是专用server,包括后台普通进程,典型的如果在MTS模式下,还包括dispatcher。而OCI下连接PSUEDO process的作用有点类似MTS模式下的dispatcher,但它不受processes限制。同时注意即使有这个PSUEDO process存在,专用模式和MTS还是截然不同,因为专用模式下必须等到DP_A,DP_B的客户会话关闭后才可用DP_A,DP_B来服务PSUEDO process对应的客户会话,而MTS是不等会话结束就拉过来服务了。
官方解释
发表评论
-
并发行级锁超2秒报警监控sql
2010-07-20 16:18 1961并发行级锁超2秒报警监控sql -
数据设计规范v
2010-06-22 19:47 0数据设计规范v -
Oracle 有趣排序包括那些
2010-06-20 16:51 1469按拼音排序 select * from table ... -
Oracle sql 性能优化调整
2010-06-20 16:15 1409Oracle sql ... -
Delete、Drop、Truncate的比较(转)
2010-05-31 13:39 1489Delete、Drop、Truncate的比较 关键字: d ... -
Oracle误操作解决方案(转)
2010-05-31 13:35 1408Oracle误操作解决方案 文章分类:数据库 一.误删除数 ... -
一个递归调用的存储过程
2010-04-19 01:51 1863一个递归调用的存储过程 -
oracle index学习总结
2009-12-08 10:44 19663oracle index 1.index需要储存空间 ... -
Jdbc 和hibernate
2009-11-16 23:38 1899Jdbc 和hibernate 一、Jdbc是java ... -
去掉 powerDesigner 中表设计时的 name和code联动的功能
2009-11-16 17:04 3524去掉 powerDesigner 中表设计时的 name和co ... -
oracle数据库索引未被使用的问题及其解决2007
2009-11-15 01:42 2146一次,在进行WEB页面上进行历史数据文件检查时,发现数据库访问 ... -
RMAN配置及备份与恢复练习
2009-09-27 18:06 16351.创建表空间SQL>create tablespace ... -
误删除数据后怎么立即恢复(不考虑全库备份和利用归档日志)
2009-09-27 18:01 3395要达到删除数据,有以下几种方式都可以:1、delete2、dr ... -
IMP数据到指定的表空间
2009-09-27 12:47 9124IMP数据到指定的表空间 一直以来,我都认为只要指定用户的默 ... -
ORACLE UPDATE 语句语法与性能分析
2009-09-27 09:49 1892为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在 ... -
oracle job 例子
2009-09-22 12:38 3077一、设置初始化参 ... -
oracle 时间加减综合
2009-09-17 11:43 1993加法 select sysdate,add_mon ... -
详细介绍ORACLE sqlplus命令
2009-09-09 16:42 2073一、ORACLE的启动和关闭1、在单机环境下要想启动或关闭OR ... -
AWR介绍与SYSAUX空间关系 SYASAUX表空间满了 系统慢
2009-09-08 09:45 8017AWR介绍与SYSAUX空间关系 2007-11-05 14 ... -
to_char 'NLS_DATE_LANGUAG参数
2009-09-02 18:41 1507select to_char(sysdate, 'Day'), ...
相关推荐
当客户端要在该会话中完成一些操作时,就需要重新建立物理连接。 会话是存在于实例中的逻辑实体,是一个表示唯一会话的内存数据结构的集合,用于执行SQL、提交事务并运行服务器中存储过程等。一个连接可以有多个...
在处理Oracle数据库的连接数和会话数问题时,系统管理员需要具备对这些关键概念的深刻理解,并且能够灵活运用各种诊断工具和命令来定位问题和解决问题。通过对这些知识点的学习,可以有效地提升数据库的运行效率和...
在给定的标签中提到了"oracle navicat",这指的是Navicat,一个知名的数据库管理工具,特别适合于Oracle数据库的连接和管理。 Navicat 是一款强大的数据库管理工具,它支持多种数据库系统,包括Oracle、MySQL、SQL ...
【会话与连接数】在Oracle数据库系统中,会话(Session)和连接(Connection)是两个关键概念,它们对于理解和优化数据库性能至关重要。 会话,简单来说,是一个用户与Oracle服务器之间交互的逻辑单元,它包含了...
四、在C++中实现Oracle连接池 1. 初始化:首先,需要初始化环境和会话,设置必要的参数,如数据库服务器地址、端口、用户名、密码等。 2. 创建连接池:通过oci池化函数ociPoolCreate创建连接池,指定最小、最大连接...
在Oracle数据库环境中,调整最大连接数是一项重要的系统管理任务,它直接影响到数据库能够同时处理的会话数量。本篇将详细探讨如何通过Oracle参数来修改最大连接数,包括理解相关参数的意义、查看当前设置、以及实际...
Java连接Oracle数据库主要依赖于两种方法:JDBC和SQLJ。这两种方法都是Oracle8i及其后续版本中为Java开发者提供的数据库交互方式。 JDBC(Java Database Connectivity)是一种标准的Java API,它允许Java应用程序...
9. **并发处理**:如果你的应用程序需要处理大量并发请求,理解Oracle的多线程支持和oci的并发控制机制是必不可少的。 10. **高级特性**:Oracle OCI还支持PL/SQL调用、游标、lob处理、触发器、存储过程、事务管理...
2. **Oracle SQL优化**:学习如何写出高性能的SQL语句,理解Oracle的查询优化器工作原理,以及如何使用EXPLAIN PLAN等工具进行性能分析。 3. **Oracle索引**:掌握Oracle中的各种索引类型,了解它们在不同查询场景...
#### 一、理解Oracle最大连接数 在Oracle数据库中,“最大连接数”主要由两个参数控制: 1. **`sessions`**:控制用户会话的最大数量。 2. **`processes`**:定义了Oracle实例能够支持的最大进程数,间接决定了最大...
5. 数据交换:在不同会话中调用相同的存储过程或函数,实现数据或消息的交换。 6. 错误处理和资源释放:确保在程序中包含适当的错误处理机制,并在完成操作后关闭连接,释放资源。 通过这个实例,开发者可以学习到...
3. **编写连接代码**:在VC++代码中,你需要初始化Oracle环境,创建会话,并建立到数据库的连接。这通常涉及到以下几个步骤: - 初始化环境(`OCIEnvCreate`):分配内存并设置环境变量。 - 创建会话(`...
分析这些源代码可以帮助你深入理解如何在VC++中实现对Oracle数据库的高效管理。在阅读源代码时,注意查看如何初始化和管理数据库连接,以及如何构造和执行SQL语句,这将有助于提升你的数据库编程技能。
首先,我们需要理解Oracle数据库链接的基本概念。数据库链接是由三部分组成的:本地数据库、远程数据库和链接。本地数据库是我们创建和使用链接的数据库,远程数据库是我们想要访问的数据库,而链接是本地数据库与...
当需要在VC++程序中访问Oracle数据库时,就需要理解如何进行有效连接。这篇文档"VC++中连接Oracle"详细介绍了多种连接方法,对于开发者来说是非常有价值的参考资料。 首先,最常见的是使用ODBC(Open Database ...
Oracle数据库是全球广泛使用的数据库系统之一,而"不需要客户端直接连接Oracle的组件和例子"的标题揭示了一个重要的技术点:无客户端直连技术。通常,连接Oracle数据库需要Oracle客户端(如Instant Client)或者ODBC...
在提供的"Oracle连接测试"文件中,可能包含了完整的示例代码,包括如何初始化环境,建立会话,执行SQL语句,处理结果集,最后关闭连接。对于初学者来说,理解并模仿这个例子是学习VC++连接Oracle的好方法。 请注意...
在Oracle数据库管理中,了解和控制连接数是至关重要的,因为这直接影响到系统的性能和稳定性。连接数包括进程、会话和并发等概念,这些都与数据库资源的使用和分配密切相关。以下是对这些知识点的详细解释: 1. **...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其连接和使用是数据库管理员和开发人员的基础技能。本文将针对Oracle数据库的连接与使用方法,特别是针对初学者,进行详细讲解。 首先,我们关注的是...
Oracle数据库的管理和操作是DBA日常工作中至关重要的一环,其中数据库的开启和关闭是基础但关键的任务。Oracle提供了多种启动和关闭...对于新手DBA来说,理解这些概念和操作将有助于更好地管理和维护Oracle数据库。