1、首先解释会话和事务

oracle中有两个概念,会话与事务。很多朋友可能还不是很明白这二者到底有什么区别。

会话,即session,当你使用工具如sqlplus或者toad执行连接,连接到某个数据库的时候,就开启了一个会话,直到你关闭这次连接,这个会话才算结束。

事务,即transaction,是一个由多条SQL语句组成的工作逻辑单元,这些语句要么全部执行成功,要么全部不执行。只有commit,rollback,或者关闭工具的情况下,事务才会结束。当一个事务结束之后,下一个可执行的SQL语句自动开启一个新的事务。事务具有4个属性:原子性,一致性,隔离性,持久性。这里不具体说。

以上解释了什么是会话和事务,接下来用一个生动的例子来进一步说明它们俩的区别,相信大家就都能明白了。

比如你去银行办理业务,当你坐在柜台前跟工作人员面对面,开始办理业务的时候,这个时候‘会话’就开启了,那么这个‘会话’结束自然就是你办理好了所有的业务离开柜台的时候。

在办理业务的时候,比如你要先办一张银行卡,然后再往里面存一万块钱,那么这就相当于两个事务,一个是办理银行卡,一个是存钱。当你拿到银行卡的时候,相当于这个事务已经commit了,事务结束。当你开始存钱的时候,一个新的事务开启,存进去之后,第二个事务结束。

综上,一个会话可以包含很多个事务,会话是一次对数据库的连接,事务是一个工作单元。

2、什么时候用?

什么时候使用临时表?用临时表和用中间表有啥区别呢?

我觉得是在需要的时候应用,下面是David Dai关于临时表的一个应用说明,我觉得非常形象的说明了临时表的应用场景:对于一个电子商务类网站,不同消费者在网站上购物,就是一个独立的 SESSION,选购商品放进购物车中,最后将购物车中的商品进行结算。也就是说,必须在整个SESSION期间保存购物车中的信息。同时,还存在有些消费者,往往最终结账时放弃购买商品。如果,直接将消费者选购信息存放在最终表(PERMANENT)中,必然对最终表造成非常大的压力。因此,对于这种案例,就可以采用创建临时表(ON COMMIT PRESERVE ROWS)的方法来解决。数据只在 SESSION 期间有效,对于结算成功的有效数据,转移到最终表中后,ORACLE自动TRUNCATE 临时数据;对于放弃结算的数据,ORACLE 同样自动进行 TRUNCATE ,而无须编码控制,并且最终表只处理有效订单,减轻了频繁的DML操作的压力。

1:当处理某一批临时数据,需要多次DML操作时(插入、更新等),建议使用临时表。

2:当某些表在查询里面,需要多次用来做连接时。(为了获取目标数据需要关联A、B、C, 同时为了获取另外一个目标数据,需要关联D、B、C....)

关于临时表和中间表(NOLOGGING,保存中间数据,使用完后删除)那个更适合用来存储中间数据,我个人更倾向于使用临时表,而不建议使用中间表。

3、类别

会话级临时表和事务级临时表

4、临时表的创建

会话级的临时表

事务级的临时表

1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Preserve Rows

举例:

create global temporary table Student

(Stu_id Number(5),

Class_id  Number(5),

Stu_Name Varchar2(8),

Stu_Memo varchar2(200)) on Commit Preserve Rows ;

2) 事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Delete Rows

举例:

create global temporary table Classes

(Class_id Number(5),

Class_Name Varchar2(8),

Class_Memo varchar2(200)) on Commit delete Rows ;

5、临时表的释放

会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。

事务级临时表 是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit orrollback),Oracle自动清除临时表中数据。

手动释放

        truncate table tablename --删除数据
        drop table tablename -- 删除表结构

oracle-临时表相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. oracle临时表的优点,详解Oracle临时表的几种用法和意义

    举例: create global temporary table Classes (Class_id Number(5), Class_Name Varchar2(8), Class_Memo va ...

  8. oracle 临时表空间的增删改查

    oracle 临时表空间的增删改查 1.查看临时表空间 (dba_temp_files视图)(v_$tempfile视图) select tablespace_name,file_name,bytes ...

  9. oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法

    临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当oracle里需要用到sort的时候,PGA中sort_area_size大小不 ...

  10. oracle 临时表空间语句,oracle的临时表空间

    经常看到有人说看到temporary tablespace空间不释放等等的问题,整理一篇metalink上的相关文章,入门级的,还算浅显吧.基本上就是翻译了. sort之后临时段不回收 描述 当你监控 ...

最新文章

  1. tomcat8.5 远程访问 manager页面
  2. volatile 使用说明
  3. en60204标准_工业机械一般办理CE认证的标准
  4. jstl的formatNumber标签的四舍五入问题
  5. 你们真的了解JS的事件吗?
  6. L1-030 一帮一 (15 分)
  7. 如何设置IIS实现无扩展名重写
  8. cass怎么多级放坡_cass土方计算考虑放坡
  9. 【集合论】关系闭包 ( 自反闭包 | 对称闭包 | 传递闭包 )
  10. matlab中图例的字怎么改,如何在Matlab图形图例中设置自定义标记
  11. 数据管理知识体系指南(第二版)-第四章——数据架构-学习笔记
  12. 手机h5像素_h5移动端设备像素比dpr介绍
  13. Clouda聊天室实践
  14. 小米MIUI夺冠!鲁大师发布2021年Q3季度UI排行!
  15. Java发送附件到邮箱
  16. pandas的is in和not in
  17. 轻松学会正则表达式(标题狗)
  18. 我都有MES系统了,还有必要上工业APP吗?
  19. Fine-Grained Visual Classification via Progressive Multi-Granularity Training of Jigsaw Patches
  20. CTP2资金/持仓管理

热门文章

  1. 谷歌提出MaskGIT:掩码生成图像Transformer
  2. 基于51单片机土壤湿度检测及自动浇花系统(带时间显示)
  3. 基于支付宝微信通知的一种个人收款回调方案
  4. 生活小常识日常生活小常识
  5. 地址解析 收货地址智能解析 已上传到Gitee上
  6. 你真的了解宏吗:浅谈宏定义(#define语句)
  7. data单复数一样吗_data的用法
  8. 小米平板4软件提取包_小米三大法宝:软件、硬件和服务;以及他的4条成功经验|小米手机|智能手机|手机...
  9. 拦截导弹 导弹防御系统
  10. 【热门】2004年十大网络流行语征集ing