- 浏览: 302479 次
- 性别:
- 来自: 南昌
文章分类
最新评论
-
秋风扫落叶:
不错,学习了。shadow文件中记录的格式是什么?
/etc/passwd & /etc/shadow 详解 -
key232323:
重拾jstl——写得很好。我收藏下。
JSTL标签用法 -
zxl10059:
不错,非常简明扼要
Hibernate分页 -
Batmankwok:
很好,所见略同,
自定义组件MXML和as两种实现的方式和区别 -
Dxx23:
摘话回帖!
通过response对象的sendRedirec ...
response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
oracle 临时表的使用
跟普通表一样.oracle也可以创建一种临时表用来临时存储一些数据,而跟普通表不同的是,临时表数据的生命周期是有限制的, 要么寄予会话要么寄予事务.事务或会话的结束,oracle都会自动从临时表中删除各自的数据.表中数据只对当前事务或当前会话可见,每个会话都会单独创建一个临时段,维护各自的数据.临时段都是由事务或会话的第一条INSERT语句创建;在临时表上我们还可以通过CREATE INDEX 创建临时索引,而这个索引对表中的所有会话或事务都是有效的,随着临时表的drop,这个索引也会随之drop;临时表还支持truncate语句,但只能运行在寄予会话创建的临时上,truncate当前会话的数据,对其他会话没有影响.
实验
三个会话模拟我的实验,session 1 和session 2 分别操作临时段,session 3监控临时段的使用
1)session 1创建一个临时段
[oracle@neworacle oracle]$ sqlplus mayp/mayp
SQL*Plus: Release 10.1.0.5.0 - Production on Tue Mar 4 15:27:53 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - Production
With the Partitioning and Data Mining options
SQL> CREATE GLOBAL TEMPORARY TABLE temp_test(name VARCHAR2(100),age number) ON COMMIT PRESERVE ROWS;
Table created.
SQL>
session 1察看临时表
SQL> select * from temp_test;
no rows selected
临时表为空
2)session 2 登陆
[oracle@neworacle oracle]$ sqlplus mayp/mayp
SQL*Plus: Release 10.1.0.5.0 - Production on Tue Mar 4 15:27:53 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - Production
With the Partitioning and Data Mining options
session 2察看临时表
SQL> select * from temp_test;
no rows selected
3) session 1 运行一个insert语句
SQL> insert into temp_test values('111',111);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from temp_test;
NAME
--------------------------------------------------------------------------------
AGE
----------
111
111
临时表中有一条数据, 这时session 2察看临时表为空
SQL> select * from temp_test;
no rows selected
可以看出数据对于会话的独立性
session 3登陆观察临时段的使用
SQL> select username,session_num,contents,segtype,segfile#,segblk#,extents,blocks,segrfno# from v$tempseg_usage;
USERNAME SESSION_NUM CONTENTS SEGTYPE SEGFILE# SEGBLK# EXTENTS BLOCKS SEGRFNO#
------------------------------ ----------- ------------------ ------------------ ---------- ---------- ---------- ---------- ----------
MAYP 47976 TEMPORARY DATA 201 2569 1 1280 1
观看到用户mayp 有一个session 47976产生了一个临时段,临时段通过dba_segments是观察不到的,临时段中的数据不是长期保存的,所有不会在dba_segments跟踪维护.
这时session 2 再插入一条数据
SQL> insert into temp_test values('222',222);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from temp_test;
NAME
--------------------------------------------------------------------------------
AGE
----------
222
222
这是session 2看见了自己插入的数据,不会看见session 1的数据
session 3再观察看看
SQL> select username,session_num,contents,segtype,segfile#,segblk#,extents,blocks,segrfno# from v$tempseg_usage;
USERNAME SESSION_NUM CONTENTS SEGTYPE SEGFILE# SEGBLK# EXTENTS BLOCKS SEGRFNO#
------------------------------ ----------- ------------------ ------------------ ---------- ---------- ---------- ---------- ----------
MAYP 47976 TEMPORARY DATA 201 2569 1 1280 1
MAYP 23581 TEMPORARY DATA 201 9 1 1280 1
这时存在两个临时段了,每个临时段都包含一个区,第一个段的第一extent从2569块开始分配,第二段的第一个extent从9块开始分配.
4)模拟truncate
因为临时表是寄予session的,所以每个session只能truncate自己的数据
session 2 truncate 表temp_test
SQL> truncate table temp_test;
Table truncated.
SQL> select * from temp_test;
no rows selected
session 2的数据已经清空,看看session 1的select结果
SQL> select * from temp_test;
NAME
--------------------------------------------------------------------------------
AGE
----------
111
111
通过查询发现session 1的数据还在. 所以truncate只对当前的session起作用并不会影响其他会话.
session 3观看临时段的使用
SQL> select username,session_num,contents,segtype,segfile#,segblk#,extents,blocks,segrfno# from v$tempseg_usage;
USERNAME SESSION_NUM CONTENTS SEGTYPE SEGFILE# SEGBLK# EXTENTS BLOCKS SEGRFNO#
------------------------------ ----------- ------------------ ------------------ ---------- ---------- ---------- ---------- ----------
MAYP 47976 TEMPORARY DATA 201 2569 1 1280 1
通过发现临时段2已经被回收,truncate清空了session 2的数据,系统回收了空间.
发表评论
-
序列初始化过了,但每次currval都要先nextval,为何?
2010-06-19 09:04 2277序列已经初始化过了, ... -
参考游标(refcursor)的使用
2010-06-18 16:00 1300参考游标(refcursor)的使用 我们知道在sql ... -
精妙SQL语句
2010-06-13 15:06 699说明:复制表(只复制结构,源表名:a 新表名:b) S ... -
sql 中case的用法
2010-06-13 15:04 1739首先让我们看一下 CASE 的语法。在一般的 SELECT 中 ... -
利用Crontab实现对Oracle数据库的定时备份
2010-05-18 09:29 1009对Oracle数据库的定时热备份(Exp)通常可用两种办法实现 ... -
Oracle 数据库备份与恢复总结-exp/imp (导出与导入装库与卸库)
2010-04-20 19:04 5232sqlldr userid=B/A@D control=res ... -
数据批量导入Oracle数据库
2010-04-14 21:16 1171SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提 ... -
truncate,delete,drop的异同点
2010-04-12 01:17 821truncate,delete,drop的异同点 ... -
oracle修改IP
2010-03-10 09:15 1839oracle数据库更改IP地址后,发现无法连接。需要修改一下对 ... -
Oracle学习过程
2009-10-07 10:22 1217编号 名称 内容 ... -
lsnrctl使用大全
2009-09-22 23:43 2910netstat -a查看所有端口 l ... -
Oracle数据库监听配置
2009-09-22 17:47 1077来源: 中国IT实验室 近段时间很多网友提出监听配置相关问题 ... -
ora-01033:oracle initialization or shutdown in progress 解决方法
2009-09-21 23:19 3752今天研究Oracle遇到了这个问题ora-01033:o ... -
ORA-12528问题解决 sp2-0460未连接解决
2009-09-21 00:31 1959在solaris中运行了lsnrctl stop将listen ... -
Oracle 9i pfile/spfile 参数文件详解
2009-09-08 14:06 1480(1)Pfile文件 Pfile(Parameter F ... -
ORACLE中添加删除主键
2009-08-27 21:36 8101、创建表的同时创建主键约束(1)无命名create tabl ... -
oracle 自增列
2009-08-10 13:23 2010由于Oracle不像SQL Server 那样系统自带自增列, ... -
oracle临时表相关知识
2009-08-18 21:29 1018在Oracle8i或以上版本中 ... -
ORACLE SQL语句优化
2009-08-18 21:30 9681.共享SQL语句 为了不重复解析相同的SQL语句,在第一 ... -
Oracle exp/imp备份还原数据
2009-08-18 21:32 1867Oracle exp/imp备份还原数据 exp hel ...
相关推荐
很好的,经典.创建Oracle 临时表,可以有两种类型的临时表:会话级的临时表,事务级的临时表 。
Oracle 临时表空间使用注意 Oracle 临时表空间使用注意 Oracle 临时表空间使用注意
Oracle临时表空间的清理步骤,解决数据库临时表空间满的问题。
网上有人给出了佳的优化思路是: 1、先将大表中满足条件的记录抽出来生成一张临时表 2、再将这较小的临时表与另一张较小的表进行关联查询 先不论思路是否值得商榷,这把临时表当成... 关于临时表的使用至
Oracle 临时表功能介绍: Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。
Oracle存储过程中使用临时表 会话级临时表 事务级临时表
临时表的应用 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个...
本文讲述了Oracle数据库两种临时表的创建及使用注意事项。
oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。
oracle-临时表空间详细介绍oracle-临时表空间详细介绍oracle-临时表空间详细介绍oracle-临时表空间详细介绍
Oracle释放临时表空间脚本
oracle自增长与临时表oracle自增长与临时表oracle自增长与临时表
Oracle临时表空间不足和批处理缓慢问题探讨.pdf
临时表数据库中临时表的深入研究,原理,用法
oracle创建一个表空间创建临时表空间创建用户表空间资源的权限
oracle临时表(事务级、会话级).docx
oracle11gR2创建临时表空间组. 使用临时表空间组而非普通的临时表空间,有如下好处: 由于SQL查询可以并发使用几个临时表空间进行排序操作,因此SQL查询很少会出现排序空间超出,避免当临时表空间不足时所引起的磁盘...
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会...
在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清除。
不让临时表空间影响ORACLE数据库性能