详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp44

理解oracle中连接和会话

1.  概念不同:概念不同:

连接是指物理的网络连接。

在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行。

2.   关系是多对多:

一个连接上可以建立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()时将根据配置初始化连接,并在每一个连接上建立一个会话。注意,连接上一旦建立了一个会话,这个连接将还可以再建会话。那么在此时,会任取一个建完会话的物理连接再建一个会话返回。当然这时也要受限于sessions设置。对于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正忙,那就得一样地等。

转自:http://www.cnblogs.com/rootq/articles/1297395.html

理解oracle中连接和会话的更多相关文章

  1. 深入理解Oracle中的随机函数

    --Oracle中取随机值的函数 .dbms_random包 dbms_random包提供了一系列的随机值获取函数以及相关存储过程.下面详细讲解常用的函数和过程. ()dbms_random.rand ...

  2. 彻底理解Oracle中的集合操作与复合查询

    --Oracle中的复合查询 复合查询:包含集合运算(操作)的查询 常见的集合操作有: union: 两个查询的并集(无重复行.按第一个查询的第一列升序排序) union all:两个查询的并集(有重 ...

  3. Oracle中连接与加号(+)的使用

    1.左外连接(Left outer join/ left join) left join是以左表的记录为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录.右表记录不足的地方均为NU ...

  4. Java的JAVA_HOME、Path、CLASSPATH环境变量小结,可以借助这三个的配置去理解Oracle中的那几个环境变量的配置作用

    问题:在哪里都能执行java命令,是和JAVA_HOME变量有关系呢还是path中指定的那个java路径呢?? 刚学Java的时候,很多jdk配置教程都要求设置JAVA_HOME.Path.CLASS ...

  5. 对oracle中date/timestamp的操作

    设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...

  6. oracle中 connect by prior 递归算法 -- 理解

    oracle中 connect by prior 递归算法 -- 理解 http://blog.163.com/xxciof/blog/static/7978132720095193113752/  ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  8. 理解PHP中会话控制

    如果以前没有接触过建站或网络编程,只是从头开始学PHP,以及用PHP来建立动态站点,那么会话(SESSION)对于初学者就有点难理解.那么到底什么是会话呢?理解一个概念需要从它产生的背景或问题出发,所 ...

  9. oracle中start with和connect by的用法理解

    转自:https://blog.csdn.net/qq_29274091/article/details/72627350 Oracle中start with和connect by 用法理解转自:ht ...

随机推荐

  1. 一种轻便且灵活的js模板的思路

    一种轻便且灵活的js模板的思路 项目地址:https://github.com/j20041426/template 思路背景 在Vue.React.Angular等大前端框架异军突起的今天,写前端时 ...

  2. ORACLE - 管理重做日志文件

    ORACLE重做日志文件用于在数据库崩溃等情况下用于恢复数据,默认情况下为三个文件redo01.log/redo02.log/redo03.log,文件组循环使用,在录入与更新操作比较多的应用中,日志 ...

  3. C#委托基础学习

    什么是委托       委托,顾名思义就是在你忙着做另一件事时候,你要去做另一件事,于是你可能就会委托别人帮你做,让别人把结果返回给你.编程时,委托也有这个思想. 我目前对委托的看法是,在编程中,委托 ...

  4. 独立ip的优势

    独立ip的建站优势   我想很多人都想知道,那我就在这里给大家简单介绍下独立ip的优势有那些.                    网站设计是需要很多专业知识的结合,整站不是那么容易就可以设计完成的 ...

  5. 四、什么是vuex

    一.关于vuex刚开始学习的时候对于里面的很多名词有很陌生.很难接受这个定义,下面这个链接很好很简单通俗的解释了什么是vuex 我喜欢的vuex网址:https://zhuanlan.zhihu.co ...

  6. Windows下搭建Git 服务器: BONOBO GIT SERVER + TortoiseGit

    本文将介绍如何在Windows操作系统下搭建Git服务器和客户端.服务器端采用的是Bonobo Git Server,一款用ASP.NET MVC开发的Git源代码管理工具,界面简洁,基于Web方式配 ...

  7. java8之lambda表达式(1)-基本语法

    lambda表达式,即带有参数的表达式,为更清晰地理解lambda表达式,先看如下例子: (1) class Student{ private String name; private Double ...

  8. yii gridview 时间段筛选(一个输入框,自动提交,高清大图)

    yii gridview功能强大,但是时间筛选比较麻烦,与数据库的存储格式有关,本文的时间格式是date类型 那么问题来了,yii只提供关于时间的text搜索格式,就是只能查找精确日期比如2017-8 ...

  9. 【IP限制】验证是否限制了境外IP访问权限

    为啥要限制境外IP访问咱们的网站或者服务呢?怕泄漏了"机密"(好像都是我们在山寨别人,哪儿TM有机密,那叫"鸡贼") 好像国外的网站也没有限制咱大陆客去访问,反 ...

  10. Python集合(set)类型的操作

    python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...