设为首页 收藏本站
查看: 527|回复: 0

[经验分享] ORACLE temp表的简介

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-18 14:44:06 | 显示全部楼层 |阅读模式
  【前言】今天开发人员遇到一个temp表找不到数据的问题,稍微了解了一下,感觉还有很多知识点的,所以整理下来供大家参考;
  
  【简介】业务的实现过程中并不是所有的数据都是永久的存放在数据库中的,有些业务在实现的过程中会通过一些临时表或中间表去存放数据,当业务实现完成后临时表或中间表的数据就可以删除掉。基于这个业务特性,ORACLE的GLOBAL TEMPORARY TABLE就满足了这个业务的功能;
  【注】有些开发人员会创建一个实体表,就临时存放数据,当这个业务过程完成之后再把这个实体表drop掉,实现这个temp表的功能;
  
  【详细介绍】
  概念描述:临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,临时表不需要DML锁。
  当一个会话结束(用户正常退出 用户不正常退出ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的表执行TRUNCATE 语句清空临时表数据。
  但不会清空其它会话临时表中的数据,你可以索引临时表和在临时表基础上建立视图。同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效。
  
  类别:Oracle临时表分为会话级临时表事务级临时表
  会话级临时表:指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
  事务级临时表:指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
  
  【创建脚本】
  ON COMMIT DELETE ROWS :建立事务级临时表的方法
  脚本:
create global temporary  table TEST1
  (>  on commit delete rows ;
  
  ON COMMIT PRESERVE ROWS :创建会话级临时表的方法
  脚本:
create global temporary table TEST3  (id     number)
  on commit preserve rows ;
  
  【实验操作】
  一、创建global temporary  table TEST1,插入数据1,在session1中查看数据;
DSC0000.png
DSC0001.png
  对于global temporary  table ,session之间是隔离的状态;
  
  二、ON COMMIT DELETE ROWS的测试
DSC0002.png
  数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
  
  三、ON COMMIT PRESERVE ROWS 会话级临时表的测试
DSC0003.png
  进行COMMIT之后还能查询到插入的数据,虽然事务结束了,但是会话还是继续存在的;
  
  
  
  
DSC0004.png
  退出之后重新登录,表中的数据已经被truncate,因为会话已经结束了,这是基于会话级别的临时表;
  
  【总结】oracle的temp表的这两种模式已经能够满足实际的开发过程中的关于数据临时存放的问题了。理解技术就是为了更好的利用技术,理解了临时表的这两种设定,对于实际工作的进行有很大的帮助的;
  
  .....................................................................................................................................................................…………………………………...
  本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。
  ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 ) 
  ......................................................................................................................................................................…………………………………..
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-153026-1-1.html 上篇帖子: SQLSERVER2000实时同步数据到Oracle11G的的实现过程 下篇帖子: Oracle 11g RAC One node 安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表