详见: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. Qt5构建出错问题解决办法

    我之前用的Qt其他版本,因为一些原因我更换了Qt版本,从Qt5.9.1又更换到之前用的Qt5.3.2,但是发现无法build,问题提示如下: 19:54:03: 为项目untitled执行步骤 ... ...

  2. RabbitMQ 使用场景一

    安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平台插件并打开远程访问权限 4.1. ...

  3. mybatis 详解(一)------JDBC

    1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...

  4. ORA-01031:insufficient privileges解决方法

    今天刚创建的数据库,用sys身份登录的时候提示 ORA-01031:insufficient privileges !郁闷了,肯定是先百度一波···然后设置当前用户权限.用Administator用户 ...

  5. Intger To Roman

    这题意思是将一个输入的整型阿拉伯数字转化为罗马数字. 思路是将1-10对应的罗马数字放在字符串数组里,然后发现数据变化规律即可,eg:389 = 300 + 89 +9 分别对应的罗马数字. publ ...

  6. Java Socket 编程

    1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和 ...

  7. html5 mdn一些精彩的案例

    https://developer.mozilla.org/zh_CN/docs/Games/Examples

  8. Qt5.8以上版本编译Oracle数据库的OCI驱动教程

    在前一篇的文章中我已经发过一个相似的文章,详情请点击:Qt5编译oracle驱动教程. 在那一篇文章中已经可以解决了Qt5的常用版本的Oracle数据库驱动的支持,但是在新的Qt开发工具中那种方法竟然 ...

  9. Hadoop集群时间同步

    0x01 ntp安装 检查时间服务器是否安装 # rpm -q ntp ntp-4.2.4p8-2.el6.x86_64 // 这表示已安装了,如果没有安装,这是空白. //如果没有安装,我们按照下 ...

  10. 使用JavaScript实现简单的双色球

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...