`
wahaha603
  • 浏览: 79639 次
  • 来自: 上海
社区版块
存档分类
最新评论

oracle 临时表 机制

阅读更多

基本概念,原理

临时表的特点,什么时候用

 

 

前段时间,新公司的面试官问了一个问题,临时表的作用,以前我们用缓存中间数据时候,都是自己建一个临时表。其实oracle本身在这方面就已经考虑很全了,除非有些高级应用,我再考虑自己创建临时表。由于本人对临时表的了解不是很多,于是回来搜集下这方面的资料,弥补下这块的不足。

1、前言

 

    目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。

 

    当然在Oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建“临时表”。

 

 我对临时表的理解:在Oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。Oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)。

 

 

2、临时表的创建

创建Oracle临时表,可以有两种类型的临时表:

会话级的临时表

事务级的临时表

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 ;

3)  两中类型临时表的区别

会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commitrollback或者是会话结束,临时表中的数据都将被截断

 

4)什么时候使用临时表

 

1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

 

 

3例子:略

4.临时表的不足之处

 

    1)不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。

2)不支持主外键关系

 

所以,由于以上原因,我们可以自己创建临时表,以弥补oracle临时表的不足之处

 

上面的都是本人经过测试的,但下面是在网上搜索到的方法,本人具体没有测试过,不过觉得可行性很强,有时间测试下

 

   创建方法:

      1、以常规表的形式创建临时数据表的表结构,但要在每一个表的主键中加入一个 SessionID <NUMBER> 列以区分不同的会话。(可以有lob列和主外键)

2、写一个用户注销触发器,在用户结束会话的时候删除本次会话所插入的所有记录(SessionID等于本次会话ID的记录)

3、程序写入数据时,要顺便将当前的会话ID(SessionID)写入表中。

4、程序读取数据时,只读取与当前会话ID相同的记录即可。

   功能增强的扩展设计:
  1、可以在数据表上建立一个视图,视图对记录的筛选条件就是当前会话的SessionID
  2、数据表中的SessionID列可以通过Trigger实现,以实现对应用层的透明性。
  3、高级用户可以访问全局数据,以实现更加复杂的功能。

  扩展临时表的优点:
  1、实现了与Oracle的基于会话的临时表相同的功能。
  2、支持SDO_GEOMETRYlob数据类型。
  3、支持表间的主外键连接,且主外键连接也是基于会话的。
  4、高级用户可以访问全局数据,以实现更加复杂的功能

转自-----http://blog.csdn.net/wyzxg/article/details/1882347

分享到:
评论
1 楼 datawarehouse 2012-07-09  
会话级的临时表,这个经常用到.

相关推荐

    ORACLE中临时表

    总结来说,Oracle的临时表机制提供了处理会话特定数据的解决方案,尽管存在一些限制,但通过自定义的设计和扩展,可以克服这些限制,实现更强大的功能。在使用临时表时,应考虑其生命周期、数据隔离性和性能影响,...

    oracle自增长与临时表

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

    Oracle特性临时表

    ### Oracle特性临时表详解 #### 一、临时表概述 在Oracle数据库中,临时表是一种特殊类型的表,它主要用于存储那些仅对当前会话或事务有意义的数据。与普通表不同的是,临时表的数据不会持久化存储,而是根据特定...

    oracle11g创建临时表空间组

    ### Oracle 11g 创建临时表空间组 在Oracle 11g R2版本中,引入了临时表空间组的概念,这一特性为数据库管理提供了更大的灵活性。与传统的单个临时表空间相比,临时表空间组允许多个临时表空间协同工作,从而提高...

    Oracle优化, 优化查询速度,目前所有使用Oracle作为数据库支撑平台的应用

    本文将深入探讨如何利用Oracle临时表来优化查询速度,并提供具体的实现策略。 #### 一、Oracle临时表的基本概念及应用场景 Oracle临时表是一种特殊类型的表,它们主要用于存储临时数据,这些数据通常在一次会话...

    oracle,sql临时表.docx

    总结来说,Oracle的临时表机制为数据库用户提供了一种高效且灵活的方式来处理临时性数据,提高了数据库性能和用户体验。通过理解和充分利用这一特性,可以更好地设计和优化数据库应用程序,特别是在处理大量并发和...

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

    Oracle数据库和SQL Server数据库在处理临时表方面有显著的区别,这些差异主要体现在临时表的生命周期、数据可见性和存储机制上。 1. **生命周期** - Oracle的临时表分为两种类型:会话级临时表和事务级临时表。...

    Oracle兼容性和全局临时表的实现.pptx

    Oracle兼容性和全局临时表的实现主要关注...在向PostgreSQL或其他数据库系统迁移时,需要深入理解这些系统的内部机制,以便找到合适的方法来复现Oracle的全局临时表功能,同时最小化迁移时间和风险,确保性能不受损失。

    Oracle数据库3种主要表连接方式对比

    - 所有参与连接的表都需要进行排序,这可能会消耗大量的系统资源(如内存和临时表空间)。 - 该连接方式设计用于最大化吞吐量,因此在所有结果被检索出来之前不会返回任何数据,这可能导致延迟。 #### 三、散列连接...

    Oracle用户(user)和表空间(tablespace).pdf

    Oracle 数据库是一个强大的关系型数据库管理系统,其用户管理和表空间机制是数据库管理和操作的基础。本文主要探讨了 Oracle 用户(user)和表空间(tablespace)的相关概念、创建、配置、修改以及删除等核心操作,...

    ORACLE SYSTEM表空间已满解决方案.docx

    ### ORACLE SYSTEM表空间已满解决方案 #### 一、SYSTEM表空间的作用 SYSTEM表空间是Oracle数据库中的一个关键组成部分,在数据库创建时会自动创建。它包含了许多重要的数据库元数据和控制信息,对于数据库的正常...

    Oracle锁和表分区

    根据会话结束时的行为,临时表分为两类:会话临时表(`ON COMMIT PRESERVE ROWS`,事务提交后数据保留)和事务处理临时表(`ON COMMIT DELETE ROWS`,事务提交后数据清除)。临时表可以创建索引、视图和触发器,但不...

    Oracle并发问题处理

    综上所述,Oracle数据库提供了多种并发控制机制供开发者选择,每种机制都有其适用场景。在实际应用中,应根据具体的业务需求和并发模型来选择最合适的方法。值得注意的是,无论是采用悲观锁还是乐观锁策略,都需要...

    ORACLE的UNDO表空间

    临时表是 Oracle 中的一种特殊类型的表,它们的生命周期非常短暂。它们通常用于存储临时数据,例如查询结果或中间结果。临时表的特点是它们的数据不需要被持久化。 1.4.1. 临时表简述 临时表是一种特殊类型的表,...

    数据同步时过滤掉临时表(转)

    在Oracle中,虽然没有特定的临时表命名规则,但可以使用会话范围的全局临时表来实现类似的功能。 为了过滤这些临时表,我们可以在编写数据同步脚本或配置数据同步工具时,加入特定的条件判断。例如,我们可以检查...

    oracle安全机制.doc

    用户管理包括用户属性、用户身份认证、默认表空间、临时表空间、表空间配额、概要文件、设置用户的默认角色、账户状态等。用户属性包括用户名、用户身份认证、默认表空间、临时表空间、表空间配额、概要文件等。...

    oracle学习笔记整理

    总结来说,Oracle的临时表是一种高效、安全的数据存储机制,适用于短期数据存储和处理。通过正确地使用会话级和事务级临时表,开发者可以优化数据库操作,提升应用程序的性能,同时保持数据的隔离性和安全性。在学习...

    Oracle对排序操作的优化措施

    - **非理想情况:** 如果排序数据超过了排序区的大小限制,则Oracle不得不将这部分数据转移到磁盘上的临时表空间进行排序,这将大大降低性能。 **2.3 调整排序区大小的方法** - **初始化参数SORT_AREA_SIZE:** ...

    oracle IO问题解析

    临时表空间的写入是指 Oracle 数据库中对临时表空间的写入,包括临时表/索引操作、排序和临时 LOB 操作。这些操作都是 Oracle 数据库中常见的 IO 问题的来源。 Oracle IO 问题的解决方法包括优化数据库的物理结构...

Global site tag (gtag.js) - Google Analytics