`
flash7783
  • 浏览: 309404 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

oracle 临时表的使用 [转]

阅读更多

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的数据,系统回收了空间.

分享到:
评论

相关推荐

    Oracle 临时表用法

    本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...

    Oracle临时表空间满的解决步骤

    解决 Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表...

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    Oracle 临时表空间不足和批处理缓慢问题探讨 本文探讨了 Oracle 临时表空间不足和批处理缓慢问题的原因和解决方法。通过分析和测试,发现了问题的根源在于应用逻辑方面,具体来说是 SQL 语句的编写问题。通过编写...

    Oracle 临时表之临时表的应用问题

    网上有人给出了佳的优化思路是:  1、先将大表中满足条件的记录抽出来生成一张临时表  2、再将这较小的临时表与另一张较小的表进行关联查询  先不论思路是否值得商榷,这把临时表当成...  关于临时表的使用至

    Oracle存储过程中使用临时表

    本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...

    ORACLE中临时表

    Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下...在使用临时表时,应考虑其生命周期、数据隔离性和性能影响,确保符合应用程序的需求和性能优化。

    oracle临时表用法

    Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL ...

    Oracle 临时表空间使用注意

    Oracle 临时表空间是Oracle...总之,理解并正确使用Oracle临时表空间是确保数据库高效运行的关键。通过对临时表空间的合理配置和管理,可以有效地提升数据库的响应速度,降低系统资源消耗,从而优化整体的数据库性能。

    oracle临时表(事务级、会话级).docx

    这种类型的临时表可以使用 ON COMMIT PRESERVE ROWS 说明,表示临时表是会话指定,当中断会话时(commit or rollback),Oracle 自动清除临时表中数据。 临时表的特点 1. 临时表的数据只对当前 Session 有效,每个...

    Oracle临时表

    ### Oracle临时表详解 #### 一、Oracle临时表概述 在Oracle数据库中,临时表是一种特殊类型的数据表,主要用于存储暂时性的数据。与永久表不同的是,临时表中的数据不会一直保留,而是根据不同的条件(如事务结束...

    Oracle释放临时表空间脚本

    ### Oracle 临时表空间管理与释放脚本解析 在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等...

    Oracle 临时表用法汇总

    临时表的应用 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个...

    oracle自增长与临时表

    **二、Oracle临时表** 临时表在Oracle中用于在单个会话中存储临时数据,这些数据只对创建它们的会话可见,会话结束时,临时表及其数据都会被自动删除。 1. **创建临时表**:使用`CREATE GLOBAL TEMPORARY TABLE`...

    oracle临时表

    Oracle临时表是数据库管理系统中的一种特殊表,它主要用于在会话期间存储临时数据,供当前会话使用。这种表在会话结束时会被自动删除,不会永久保存在数据库中,因此,它们对于处理大量中间结果或者进行复杂计算的...

    oracle查找定位占用临时表空间较大的SQL语句方法

    oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。

    不让临时表空间影响ORACLE数据库性能

    - 文件"不要让临时表空间影响数据库性能 - Oracle - 3.mht"可能提供了实际的配置和优化步骤,包括脚本示例和监控工具的使用。 通过理解和优化临时表空间,可以显著提升Oracle数据库的性能,尤其是在处理大数据量和...

    学习oracle创建一个表空间创建临时表空间创建用户表空间资源的权限

    在Oracle数据库系统中,表空间(Tablespace)是存储数据对象(如表、索引、视图等)的逻辑单位,而临时表空间(Temporary Tablespace)则用于存储临时数据,比如排序或联接操作产生的中间结果。创建和管理表空间及...

    oracle临时表操作学习资料

    Oracle数据库中的临时表是一种特殊的表类型,主要用于存储在特定会话或事务期间产生的临时数据。与常规的永久表相比,临时表的数据不会永久...理解并熟练掌握临时表的使用对于优化Oracle数据库的性能和管理至关重要。

    oracle 临时表使用例子并用CURSOR返回结果集的例子

    本篇文章将深入探讨Oracle临时表的使用,并通过一个使用游标(CURSOR)返回结果集的例子来进一步理解其用法。 首先,让我们了解如何创建Oracle临时表。临时表的创建语法与普通表类似,但我们需要使用`GLOBAL ...

    oracle-临时表空间

    ### Oracle 临时表空间详解 #### 一、Oracle表空间概览 在Oracle数据库系统中,数据被组织成多个逻辑单元,这些单元被称为表空间。每个表空间由一个或多个物理磁盘文件(称为数据文件)组成,并且是数据库中的最高...

Global site tag (gtag.js) - Google Analytics