用oracle时间比较长了,但只是单纯的使用,很少关心一些基本的东西,比如oracle中会话和链接的区别,我懒得看一大堆的介绍,只是看了oracle临时表的用法,实际测试了一下,之后才明白了这二者的区别,我想用这种方法理解这两者的区别比看N篇介绍更加印象深刻。

这里先不说会话和链接的区别和关系,首先看看oracle的会话级临时表,会话级临时表有这样的特性:当你当前SESSION 不退出的时候,临时表中的数据是存在的,而当你退出当前SESSION 之后,临时表中的数据就全部被清空了,换句话说,如果你不退出当前SESSION(这里简称 session a)而是用另一个SESSION(这里简称 session b)登录,是看不到session a中插入到临时表中的数据的,如果session a不退出,它里面建立的临时表的数据就会一直存在,直到它退出会话才被清除。

一个简单的例子即可印证,在这个例子中清楚的体现了链接和会话的关系和区别。

我们用sys用户登录并记录下当前有哪些会话,我使用的是plsqldev这种数据库工具,显示查询结果比较美观,方便

在plsqldev中打开一个命令窗口执行:
select sid,logon_time,username,machine from v$session order by logon_time

得到的结果是:
[list]
SQL> select sid,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss'),username,machine from v$session order by logon_time desc;
;

SID TO_CHAR(LOGON_TIME,'YYYY-MM-DD USERNAME MACHINE
---------- ------------------------------ ------------------------------ ----------------------------------------------------------------
316 2011-03-10 00:56:37 6AA448B035B94BC
308 2011-03-10 00:56:22 SYS WORKGROUP\6AA448B035B94BC
317 2011-03-10 00:56:09 SYS WORKGROUP\6AA448B035B94BC
303 2011-03-09 21:32:50 DBSNMP WORKGROUP\6AA448B035B94BC
297 2011-03-09 21:31:59 6AA448B035B94BC
301 2011-03-09 21:31:51 SYSMAN 6AA448B035B94BC
298 2011-03-09 21:31:51 SYSMAN 6AA448B035B94BC
313 2011-03-09 21:31:50 6AA448B035B94BC
306 2011-03-09 21:31:50 SYSMAN 6AA448B035B94BC
319 2011-03-09 21:31:39 6AA448B035B94BC
334 2011-03-09 21:31:16 6AA448B035B94BC
333 2011-03-09 21:31:16 6AA448B035B94BC
332 2011-03-09 21:31:16 6AA448B035B94BC
331 2011-03-09 21:31:16 6AA448B035B94BC
330 2011-03-09 21:31:16 6AA448B035B94BC
329 2011-03-09 21:31:16 6AA448B035B94BC
328 2011-03-09 21:31:16 6AA448B035B94BC
327 2011-03-09 21:31:16 6AA448B035B94BC
326 2011-03-09 21:31:16 6AA448B035B94BC
335 2011-03-09 21:31:16 6AA448B035B94BC
325 2011-03-09 21:31:16 6AA448B035B94BC

21 rows selected

SQL>
[/list]并且我记录了我打开plsqldev并登录的时间是2011-03-10 00:56,所以我想上面查询结果中的307、308和316会话就是我打开plsqldev并登录成功,并且执行了查询时,创建的两个会话。

然后我开始创建oracle会话级临时表
[list]
SQL> insert into tst_session_table values (1,'name1');

1 row inserted
SQL> insert into tst_session_table values (2,'name2');

1 row inserted

SQL> commit;

Commit complete
[/list]
在当前命令窗口中查一下结果:
[list]

SQL> select * from tst_session_table;

F_ID F_NAME
--------------------------------------- --------------------
1 name1
2 name2

SQL> [/list]
可以看到这个表中以经有数据了,暂且认为这是当前会话中保存的数据。
在plsqldev中重新打开一个命令窗口执行刚才的查询:
[list]
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS

SQL> select * from tst_session_table;

F_ID F_NAME
--------------------------------------- --------------------

SQL>
[/list]
可以看到表里没有数据,我再切回到刚才的那个窗口,执行查询仍然可以查到数据,明显这两个窗口各有一个不同的会话,符合了oracle会话级临时表的特性。

这是再看一下当前会话表的情况

[list]
SQL> select sid,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss'),username,machine from v$session order by logon_time desc;

SID TO_CHAR(LOGON_TIME,'YYYY-MM-DD USERNAME MACHINE
---------- ------------------------------ ------------------------------ ----------------------------------------------------------------
311 2011-03-10 01:00:05 SYS WORKGROUP\6AA448B035B94BC
316 2011-03-10 00:59:52 6AA448B035B94BC
308 2011-03-10 00:56:22 SYS WORKGROUP\6AA448B035B94BC
317 2011-03-10 00:56:09 SYS WORKGROUP\6AA448B035B94BC
303 2011-03-09 21:32:50 DBSNMP WORKGROUP\6AA448B035B94BC
297 2011-03-09 21:31:59 6AA448B035B94BC
298 2011-03-09 21:31:51 SYSMAN 6AA448B035B94BC
301 2011-03-09 21:31:51 SYSMAN 6AA448B035B94BC
313 2011-03-09 21:31:50 6AA448B035B94BC
306 2011-03-09 21:31:50 SYSMAN 6AA448B035B94BC
319 2011-03-09 21:31:39 6AA448B035B94BC
325 2011-03-09 21:31:16 6AA448B035B94BC
326 2011-03-09 21:31:16 6AA448B035B94BC
327 2011-03-09 21:31:16 6AA448B035B94BC
328 2011-03-09 21:31:16 6AA448B035B94BC
329 2011-03-09 21:31:16 6AA448B035B94BC
335 2011-03-09 21:31:16 6AA448B035B94BC
331 2011-03-09 21:31:16 6AA448B035B94BC
332 2011-03-09 21:31:16 6AA448B035B94BC
333 2011-03-09 21:31:16 6AA448B035B94BC
334 2011-03-09 21:31:16 6AA448B035B94BC
330 2011-03-09 21:31:16 6AA448B035B94BC

22 rows selected

SQL>
[/list]
发现311会话是新增的,明显这和新打开的sql窗口有关.
如果不查询一下 v$session,猛然看起来是有点奇怪,明明没有退出plsqldev,只是打了一个新的命令窗口而已,其实这个结果恰恰解释了链接和会话的关系以及区别,看看下面的分析:
当用plsqldev工具sys用户成功登录之后会建立一个连接,每当我在plsqldev打开一个窗口就并且执行了DDL或DML操作就会创建1个新的会话,不清楚其他的操作是否也是如此,但是推想一下,如果是关于数据库的操作,不建立会话,客户端如何操作oracle呢,所以肯定也是要建立新的会话,这个有待以后求证。

现在我关闭了最后打开的命令窗口,再查一下当前所有会话情况:
发现311会话不见了。因此可以断定以下结果:
1. 311会话是一个新的会话
2. 316会话中向临时表插入了数据
3. 317和308这两个会话是plsqldev工具自己建立的会话,可能有别的用途

316会话和317会话两个不同的会话,tst_session_table表数据的有无明显的体现了这一点。

总结一下:

当oracle客户端和服务端的链接建立之后,会在链接的基础上建立若干的会话,之后oracle客户端与oracle服务端都会在一个连接(不一定是在同一个会话中)中进行交互,因此链接和会话是1对多的关系。有的资料上将oracle允许存在失去了物理链接的会话,这个需要抽个时间测试一下,眼见为实,呵呵。

今天就先写到这里,这只是我对链接和会话在实验的基础上的粗略理解,欢迎各位提出自己的高见,在此先行谢过。

从oracle临时表理解会话与链接相关推荐

  1. Oracle临时表和SQL Server临时表的不同点对比

    文章来源:http://www.codesky.net/article/201109/141401.html 1.简介 Oracle数据库除了可以保存永久表外,还可以建立临时表temporary ta ...

  2. [转]oracle临时表相关知识

    回复: 临时表存放在哪儿? DML statements on temporary tables do not generate redo logs for the data changes. How ...

  3. oracle会话临时表会造成死锁,Oracle Temporary Tables(Oracle 临时表)

    Oracle Temporary Tables(Oracle 临时表) 1. 建立临时表语法 A.ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法 CREATE GLOBAL ...

  4. oracle临时表性能,oracle临时表-优化查询速度

    目前所有使用oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量.[@more@] 当然在oracle中创建分区是一种不错的选择,但是当你发 ...

  5. oracle 临时表存在哪里_openGauss魔改PG?它能兼容Oracle的数据库表吗?

    作者介绍 洪烨,openGauss Contributor,多年银行业系统架构设计及DBA实战经验,<DB2数据库内部解析与性能调优>作者. openGauss的前世今生 上一篇看到很多朋 ...

  6. oracle提交数据按键,Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)...

    Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link) 有没有办法只通过数据库链接而不是当前会话的数据提交在表上插入/更新的 ...

  7. oracle临时表与外部表,Oracle中的临时表、外部表和分区表

    在Oracle中,临时表是ldquo;静态rdquo;的,它与普通的数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的.相 临时表 在Oracle中,临时表是"静态" ...

  8. oracle 创建临时表报权限不足,ORACLE 临时表空间满了的原因解决方案

    临时表空间作用 Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序. 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql ...

  9. oracle临时表读,Oracle之临时表详细解读

    临时表,顾名思义,就是临时存储数据的表. 具体讲,用来保存一个会话session的数据,  或者保存在一个事务中需要的数据. 当会话退出或者用户提交commit和回滚rollback事务的时候, 临时 ...

  10. Oracle - 临时表(GLOBAL TEMPORARY TABLE)

    http://aofengblog.blog.163.com/blog/static/6317021200951664351836/ Oracle - 临时表(GLOBAL TEMPORARY TAB ...

最新文章

  1. matlab 卷积conv2用法
  2. getbean方法找不到bean_和平精英:一直找不到敌人?5个方法,让你彻底摆脱“瞎子”...
  3. 一年赚上亿的生意_如何一年不到的时间2万赚10个亿?
  4. vue 动态添加class_前端开发:Vue项目实战-Music
  5. 华为鸿蒙系统技术细节盘点
  6. 团队—贪吃蛇—需求分析
  7. java 排序经典算法,经典排序算法(java版)
  8. golang 定义一个空切片_Golang切片 一个隐讳的坑
  9. Android Binder 学习中几个问题
  10. USB转串口RS232驱动程序
  11. 真无线蓝牙耳机哪个好?四款买了不亏的真无线蓝牙耳机
  12. python实现触摸精灵功能_FRIDA脚本系列(三)超神篇:百度AI“调教”抖音AI
  13. win10系统同时设置静态IP和动态IP
  14. changeable和changeful_change的形容词是什么?
  15. 商用密码应用解决方案编写指南
  16. mac软件全屏时候最顶上任务栏保留_一键整理 Mac 顶部菜单栏,这款免费工具 App 还你清爽...
  17. 曼卡尔M1投影仪怎么样?和哈趣H1对比哪款更好用?
  18. ubuntu创建批处理文件
  19. 为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...
  20. 大数据情报2018-6-19

热门文章

  1. Jenkins插件安装和系统配置
  2. Chrome电脑免安装多个浏览器版本号共存
  3. java微信学生考勤小程序前台vue和后台(考勤,请假,校园新闻,导出,地图等)(需要使用的软件)打包源码及安装视频+功能文档
  4. Java实现支付功能(支付宝)
  5. 采用现场总线协议的压力变送器特性介绍
  6. 基于标准的多媒体视频对讲系统
  7. 银行技术岗笔试计算机基础知识点,想去银行技术岗,考试都考啥?
  8. eclipse工程图标上有个红色感叹号
  9. 计算机卡死后自动关机,电脑经常卡住自动关机怎么办
  10. python 切片步长_python 索引+切片+步长