Oracle 临时事务表 全局临时表_global temporary table
所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔!
临时表分事务级临时表和会话级临时表。
事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 指定。
会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。
-- Create table
create global temporary table WFM_TMP_WORKLIST
(
proc_inst_id NUMBER(10),
workitem_id NUMBER(10),
buzicondi NVARCHAR2(500)
)
on commit delete rows;
---全局临时表创建语法
SQL> create global temporary table t_global_temp(a int)
2 on commit delete rows;
Table created.
---查询表名
SQL> select table_name from user_tables where table_name='T_GLOBAL_TEMP';
TABLE_NAME
------------------------------------------------------------
T_GLOBAL_TEMP
--查询表对应的segment
SQL> select segment_name,segment_type from user_segments where segment_name='T_G
LOBAL_TEMP';
no rows selected
---插入数据
SQL> insert into t_global_temp values(1);
1 row created.
SQL> commit;
Commit complete.
--提交查询无记录
SQL> select * from t_global_temp;
no rows selected
--再次查询segment无记录,原因:创建全局临时表指定on commit delete rows一提交即清表
SQL> select segment_name,segment_type from user_segments where segment_name='T_G
LOBAL_TEMP';
no rows selected
SQL> insert into t_global_temp values(1);
1 row created.
--插入不提交即可查询到记录
SQL> select segment_name,segment_type from user_segments where segment_name='T_G
LOBAL_TEMP';
no rows selected
--提交与否皆不占用存储空间,引申问题:哪全局临时表的数据存储在哪儿呢?
SQL> select segment_name,segment_type from user_segments where segment_name='T_G
LOBAL_TEMP';
no rows selected
---以基于会话方式创建全局临时表
SQL> create global temporary table t_global_temp(a int) on commit preserve rows;
Table created.
SQL> insert into t_global_temp values(1);
1 row created.
---提交前查询
SQL> select * from t_global_temp;
A
----------
1
SQL> select segment_name,segment_type from user_segments where segment_name='T_G
LOBAL_TEMP';
no rows selected
SQL> commit;
Commit complete.
--提交后查询
SQL> select * from t_global_temp;
A
----------
1
---附上提交前后在另一会话查全局临时表测试,全局临时表的数据仅在当前会话可见
SQL> select * from t_global_temp;
no rows selected
SQL> /
no rows selected
SQL> desc t_global_temp;
Name Null? Type
----------------------------------------- -------- -----------------------
A NUMBER(38)
---测试全局临时表的alter table及create index及alter index
--如全局临时表正在使用alter table不能运行
SQL> alter table t_global_temp add b int;
alter table t_global_temp add b int
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use
---只有退出当前会话
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64
bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
C:\Users\123>sqlplus scott/system
SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 9 16:07:10 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
---再次alter table即可成功
SQL> alter table t_global_temp add b int;
Table altered.
---在全局临时表构建索引
SQL> create index idx_temp on t_global_temp(a);
Index created.
--删除全局临时表索引
SQL> drop index idx_temp;
Index dropped.
SQL> select count(*) from t_global_temp;
COUNT(*)
----------
0
SQL> insert into t_global_temp select 1,3 from dual connect by level<3e5;
299999 rows created.
SQL> commit;
Commit complete.
---收集全局临时表的统计信息
SQL> exec dbms_stats.gather_table_stats(user,'t_global_temp');
PL/SQL procedure successfully completed.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
Plan hash value: 62698482
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 257 (4)| 00:00:04 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T_GLOBAL_TEMP | 599K| 257 (4)| 00:00:04 |
----------------------------------------------------------------------------
9 rows selected.
---仅插一条a值888888888888888888888的记录到全局临时表
SQL> insert into t_global_temp select 888888888888888888888,1 from dual;
1 row created.
SQL> commit;
Commit complete.
SQL> explain plan for select count(*) from t_global_temp where a=88888888888888
888888;
Explained.
--执行计划显示走了索引
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------
Plan hash value: 1743356947
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 3 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 3 | | |
|* 2 | INDEX RANGE SCAN| IDX_TEMP | 1 | 3 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------
---------------------------------------------------
2 - access("A"=888888888888888888888)
14 rows selected.
----全局临时表的操作限制
----不能分区,不能集簇化,不能iot化
Temporary tables cannot be partitioned, clustered, or index organized.
---不能指定外键约束
You cannot specify any foreign key constraints on temporary tables.
---不能包含nested table column
Temporary tables cannot contain columns of nested table.
----不能指定lob_storage_clause的参数:tablespace,storage_clause or logging_clause
You cannot specify the following clauses of the LOB_storage_clause: TABLESPACE, storage_clause, or logging_clause.
---不能启用并行update,delte,merge
Parallel UPDATE, DELETE and MERGE are not supported for temporary tables.
---在segment_atrributes_clause子句中,唯一可指定的参数是:tablespace
The only part of the segment_attributes_clause you can specify for a temporary table is TABLESPACE, which allows you to specify a single temporary tablespace.
---不支持分布式事务
Distributed transactions are not supported for temporary tables.
小结:全局临时表特别适用于存储中转结果,即临时计算的结果,非最终结果;
可用于报表统计存储过程.
Oracle 临时事务表 全局临时表_global temporary table的更多相关文章
- Postgresql中临时表(temporary table)的特性和用法
熟悉Oracle的人,相比对临时表(temporary table)并不陌生,很多场景对解决问题起到不错的作用,开源库Postgresql中,也有临时表的概念,虽然和Oracle中临时表名字相同,使用 ...
- Oracle临时表GLOBAL TEMPORARY TABLE
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到.临时表不存 ...
- Oracle临时表(Temporary Table)
GLOBAL TEMPORARY代表全局临时表临时表的元数据存储在数据字典里面 只当第一条DML命令发生的时候才为这张表的段分配空间 临时表数据的可见范围应该是会话级别或是事务级别的 会话或者事务级别 ...
- mysql 连接命令 表管理 ,克隆表,临时表,字符串属性,设定语句间的分隔符
连接和断开连接mysql -h host -u user -p (即,连接的主机.用户名和使用的密码).断开输入QUIT (或\q)随时退出: 表管理克隆表注意:create table ... li ...
- mysql优化: 内存表和临时表
由于直接使用临时表来创建中间表,其速度不如人意,因而就有了把临时表建成内存表的想法.但内存表和临时表的区别且并不熟悉,需要查找资料了.一开始以为临时表是创建后存在,当连接断开时临时表就会被删除,即临时 ...
- Hive ACID和事务表支持详解
一.ACID介绍 ACID就是常见数据库事务的四大特性:Atomicity(原子性).Consistency(一致性).Isolation(隔离性).Durability(持久性). 在Hive 0. ...
- 深入浅出Oracle数据读取一致性和事务表
保证Oracle数据库读取一致性的关键是SCN.每一个数据块头都会记录一个事务提交的SCN.同时每一数据块头都包含一个事务表(ITL),事务必须获得一个ITL事务表才能进行数据修改.该事务表用来确定当 ...
- Oracle错误览表
Oracle 错误总结及问题解决 ORA 本文转自:https://www.cnblogs.com/zhangwei595806165/p/4972016.html 作者@承影剑 ORA-0 ...
- oracle之二表的几种类型
Oracle中表的几种类型 1.表的功能:存储.管理数据的基本单元(二维表:有行和列组成)2.表的类型: 1)堆表:heap table :数据存储时,行是无序的,对它的访问采用全表扫描. 2)分区表 ...
随机推荐
- cocos2dx注册场景 使用CCEditBox实现输入框
我们在开始玩一个游戏时,通常要做的第一件事就是注册账号,下面就让我们来制作一个简单的注册场景,我所使用的cocos2dx版本为2.2.2 在这个场景中最主要的元素就是输入框和按钮,我从网上找了一些素材 ...
- 复习IOS多线程知识
线程的注意点 1.不要同时开太多的线程(1~3条线程即可,不要超过5条) 2.线程概念 * 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 * 子线程 : 后台线程,异步线程 3.不要把 ...
- sort()的多种用法
sort() 方法用于对数组的元素进行排序. 一.默认情况 在默认情况下, sort() 方法按升序排列数组项.为了实现排序, sort() 方法会调用每个数组项的 toString() 转型方法, ...
- 10款web前端基于html5/CSS3应用特效
1.jQuery百叶窗效果焦点图 多种百叶窗动画方式 对于百叶窗动画效果,我们介绍的不是很多,目前就介绍过一款CSS3百叶窗图片切换.这次要给大家带来一个基于jQuery的多种百叶窗动画效果焦点图,焦 ...
- 分享10 个超酷的 HTML5/CSS3 应用及源码
1.HTML5视频破碎重组特效,强大视觉冲击 HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTML5将会 ...
- springMvc(三)session、HandlerInterceptorAdapter
仅供参考 设置session值,根据自己的需求设置值 /** * 登入验证 * * @return */ @RequestMapping(value = "/loginCheck.htm&q ...
- C++使用类型代替枚举量
自己写的C++类型枚举量,可以使用类型识别取代模板,绑定枚举量和多组调用函数,在调用阶段只要指定某组函数就可以根据枚举量调用相应函数. 代码如下: #ifndef __MYENUM_H__ #defi ...
- 深度模拟java动态代理实现机制系类之三
这里的内容就比较复杂了,要实现的是对任意的接口,对任意指定的方法,以及对任意指定的代理类型进行代理,就更真实的模拟出java虚拟机的动态代理机制 罗列一下这里涉及的类.接口之间的关系,方便大家学习.1 ...
- SQL2008、SQL2013 执行Transact-SQL 语句或者批处理时发生了异常。错误5120
附加数据库的时候遇到问题,问题描述如下: 附加数据库 对于 服务器"服务器名"失败.(Microsoft.SqlServer.Smo) 执行Transact-SQL 语句或者批处理 ...
- solr6安装部署
难得写篇自己的原创文档了,哈哈哈,原谅我知识浅薄,积淀太少 一.涉及到的软件和环境jdk1.8.0_92,tomcat8,zookeeper3.4.8,solr6.1.0(solr6需要jdk8以上环 ...