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

oracle临时表相关知识

阅读更多

在Oracle8i或以上版本中,可以创建以下两种临时表:
1。会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;

2。事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧,我把下面两句话再贴一下:
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
冲突的问题更本不用考虑.

临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。

通过CREATE GLOBAL TEMPORARY TABLE命令创建一个临时表,对于事务类型的临时表,
数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在。

会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到
临时表的数据上。下面的语句控制行的存在性。

● ON COMMIT DELETE ROWS 表名行只是在事务期间可见
● ON COMMIT PRESERVE ROWS 表名行在整个会话期间可见

可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的
定义,但是不能导出数据。表的定义对所有的会话可见。
Temporary Tables临时表
1简介
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,
或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,
但是临时表的结构以及元数据还存储在用户的数据字典中。
临时表只在oracle8i以及以上产品中支持。
2详细介绍
Oracle临时表分为 会话级临时表 和 事务级临时表。
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,
临时表不需要DML锁.当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的
表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据.
你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效.
临时表可以拥有触发器.
3建立临时表
临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.
建立方法:
1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT DELETE ROWS;
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');
SQL> insert into permernate values(1);
SQL> commit;
SQL> select * from admin_work_area;
SQL> select * from permernate;
A
1
2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT PRESERVE ROWS;
EXAMPLE:

会话1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');
SQL> commit;
SQL> select * from permernate;

A
----------
1
2

SQL> select * from admin_work_area;

STARTDATE ENDDATE CLASS
---------- ---------- --------------------
17-1?? -03 17-1?? -03 session temperary

会话2:

SQL> select * from permernate;

A
----------
1
2

SQL> select * from admin_work_area;

未选择行.

会话2看不见会话1中临时表的数据.

4 ORACLE临时表和SQLSERVER临时表异同

SQL SERVER临时表
也可以创建临时表。临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。
有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。本地临时表的名称以单个数字符号 (#) 打头;
它们仅对当前的用户连接是可见的;当用户从 Microsoft? SQL Server? 2000 实例断开连接时被删除。全局临时表的名称以数学符号
(##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。
如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表
,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建
后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表
不同:
1. SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.
2. SQL SERVER临时表不存在类似ORACLE临时表 事务级别 上的功能.
3 SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.
4 SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
5 由于ORACLE不是一种 内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.
所以ORACLE会保留临时表的定义直到用户DROP TABLE.
6 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,
并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯一信息删除相应的表中的数据.
这种方法给ORACLE带来了一定量的负载.

分享到:
评论

相关推荐

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

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

    oracle临时表用法

    下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL TEMPORARY TABLE table (column datatype [DEFAULT expr] [{ NULL | NOT NULL}], [column datatype [DEFAULT expr] [ {...

    oracle-临时表空间

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

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

    在Oracle数据库系统中,临时表空间是用于存储临时数据的特定区域,这些数据通常由排序、聚合、JOIN等操作产生。当处理大量数据或者运行复杂SQL查询时,临时表空间的作用尤为关键。然而,如果不正确地管理和使用临时...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    4. Oracle临时表空间满的问题:当临时表空间的磁盘空间被全部占用后,可能会出现错误消息,例如“ORA-1652: unable to extend temp segment by %s in tablespace %s”。这会导致用户无法完成如排序、并行查询等操作...

    oracle数据表分区知识

    #### 一、分区表理论知识 Oracle 提供了表分区功能以支持非常大型的数据库(VLDB)。通过分区技术,可以根据指定的分区键将数据分散到不同的物理位置,从而实现更高效的数据管理和查询性能。表分区使得数据能够根据...

    Oracle 表空间 收缩

    2. **移动表、索引等对象**:将block_id大于目标表空间大小的表、索引、分区表等对象移动到一个新的临时表空间中。 3. **收缩表空间**:在确保所有对象都已妥善处理后,执行收缩操作。 4. **移动对象回原表空间**:...

    oracle 系统表大全

    以上就是基于给定的Oracle系统表相关知识的详细介绍。这些系统表为DBA和开发人员提供了强大的工具来管理和优化数据库性能。通过深入理解和利用这些系统表,可以有效地提高数据库的可用性和效率。

    oracle查看表空间表信息

    36. **TEMPORARY**: 是否临时表。 37. **SECONDARY**: 是否为辅助键表。 38. **NESTED**: 是否嵌套表。 39. **BUFFER_POOL**: 缓冲池。 40. **ROW_MOVEMENT**: 行移动。 41. **GLOBAL_STATS**: 全局统计信息。 42. *...

    NC6.5 数据库参考脚本及临时表空间配置.pdf

    根据提供的文件信息,本文将详细说明关于“NC6.5 数据库参考脚本及临时表空间配置”的知识点。 首先,文档标题“NC6.5 数据库参考脚本及临时表空间配置.pdf”指出了文件内容涉及三个方面:NC6.5数据库、参考脚本...

    oracle定时删除表空间的数据并释放表空间

    3. **purge操作**:Purge操作是删除已删除行的一种方法,通常用于临时表空间和Undo表空间。执行`PURGE`语句可以立即释放被删除的对象或行,而不是等待下次DML操作或数据库维护任务。 4. **DBMS_SCHEDULE包**:...

    Oracle 12c中的表空间管理、用户和角色、临时Undo.pdf

    在创建临时表空间时,可以设置默认的临时表空间,并通过视图查询相关信息。 三、CDB表空间大小查询 在Oracle 12c中,支持多租户架构,CDB(容器数据库)能够包含多个PDB(可插拔数据库)。可以对CDB中的表空间进行...

    oracle系统表查询

    以下是对给定文件中的Oracle系统表查询知识点的深入解析: ### 一、用户 - **`SELECT username FROM dba_users;`**:此SQL语句用于列出数据库中所有的用户。`dba_users`视图提供了数据库中所有用户的信息,包括...

    创建Oracle表空间

    临时表空间用于存储数据库操作中的临时数据,如排序操作、哈希和临时表。与永久性表空间不同,临时表空间不会记录在重做日志中,因为这些操作不涉及事务持久性。创建临时表空间的命令通常包括指定表空间名称、临时...

    oracle数据库表分区实例

    最后,我们可以通过以下命令来查看所有非临时表的分区信息: ```sql SELECT table_name, partition_name, u.high_value FROM user_tab_partitions u WHERE table_name NOT LIKE 'BIN%'; ``` 如果不再需要某个分区,...

    ORACLE内存结构与表空间知识

    ### ORACLE内存结构与表空间知识 #### 一、Oracle的服务方式 Oracle提供了三种不同的服务方式,每种方式都有其特定的应用场景和内存管理特点。 ##### 1. 专用服务器 (Dedicated Server) - **服务流程**:当...

    查询oracle表以及统计数据库的使用情况

    `Dba_Free_Space`视图用于获取每个表空间的空闲空间总量,而`Dba_Temp_Files`视图则提供了临时表空间的相关信息。 在进行数据库性能监控时,了解这些信息至关重要,因为它们可以帮助识别潜在的问题,比如空间不足、...

    创建ORACLE表空间

    Oracle中的表空间分为永久表空间和临时表空间两种类型。 1. **永久表空间**:用于存储数据表、索引等持久性数据。 2. **临时表空间**:主要用于SQL执行过程中的临时排序操作等。 #### 二、创建表空间的步骤与语法 ...

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

    总结来说,"数据同步时过滤掉临时表"是一个关于数据迁移和管理的重要实践,它涉及到数据库操作、脚本编写、工具使用以及性能优化等多个IT领域的知识。理解和掌握这部分内容对于任何处理大规模数据的IT专业人员都至关...

    Oracle建立表空间.pdf

    NOLOGGING 不生成重做日志,适用于性能要求高的临时表等场景。 - **存储 (Storage)**:可以设置 DEFAULT 或 UNIFORM 来指定分配策略。DEFAULT 表示按需分配,UNIFORM 表示按照指定大小均匀分配。 #### 五、创建用户...

Global site tag (gtag.js) - Google Analytics