Oracle-全局临时表

临时表分事务级临时表和会话级临时表。
事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 指定。
会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。
1,隔离性:数据只在会话或者事务级别可见。不同用户可以使用同一个临时表,但是看到的都是各自的数据。
2,表上可以创建索引、视图、触发器等对象。
3,索引只有在临时表是empty时可创建。
4,临时表不产生数据的redo,但是会生成undo的redo。
5,临时表目前只支持GLOBAL的,所以创建语句为create global temporary table XXX。
6,使用truncate只对当前会话有效。
7,不能export/import表上的数据,只能导入导出表定义。
8,临时段在第一次insert或CATS时产生。
缺点:
1,表定义不能自动drop。
2,临时表目前只支持GLOBAL。
3,只有无会话时才能DDL,否则可能报错:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
4,临时表上默认不收集统计信息,如果需要收集统计信息,首先要确保临时表属性为ON COMMIT PRESERVE ROWS.

收集统计信息命令:analyze table table_name compute statistics;


– Create table
=>创建全局临时表
在全局临时表中的数据是私有的,在一个session中插入的数据只能在同一个session中被获取。在全局临时表中指定session里的行被保存在整个session或者是当前的transaction中。on commit delete rows语句说明在session中的数据应该在transaction结束时被delete.例如:
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT DELETE ROWS;
In contrast, the ON COMMIT PRESERVE ROWS clause indicates that rows should be preserved until the end of the session.
=>相反,on commit preserve rows 语句指出直至session结束data应该保存在内存中。
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT PRESERVE ROWS;
Miscellaneous Features
If the TRUNCATE statement is issued against a temporary table, only the session specific data is trucated. There is no affect on the data of other sessions.
=>如果truncate一个临时表时,只是对当前session里的数据trucate,而对其它session里的数据没有任何影响。
=>即使session以不正常结束,临时表中的数据也会在session结束时候被自动删除。
=>index能被创建在临时表上,索引的内容和范围与session的一样。view能被创建在临时表,以及临时表与永久表的结合表上。(这里所谓结合表,应该是联合查询取得的数据表)
=>DML锁对于临时表的数据来说没有影响,因为每个Session都有它私有的数据。
=>临时表有trigger与之关联。导入,导出功能也可以放在表定义的转换,但是没有数据。

=>在临时表中的数据只是对当前session可见,每个session仅能访问和修改属于它的数据。
=>对临时表的DML操作,不会对数据变化生成重做日志。然而,可以生成对数据的撤销日志和对撤销日志的重做日志。临时表中的数据可以在session中断时被自动drop,如当用户退出或者Session异常中断.
=>你能在临时表上创建索引,在临时表上的索引也是临时的,在索引上的数据同临时表中的数据一样,在相同的session或事务中。同时,也能在临时表上创建视图和触发器。
=>临时表用临时段。与永久表不同,临时表和属于它的索引在被创建时候,是无法自动分配段空间。取而代之,在第一次插入数据的时候,段空间才会被分配。换句话说,在Select,Update,delete执行前,必须做insert操作,因为那时数据表都为空。
=>仅当临时表不与临时表关联时候,才可以对它之行DDL操作(ALTER TABLE,DROP TABLE,CREATE INDEX等操作)。
=>在Session结束或者Transaction结束时候临时段才会被收回。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值