Temporary TablespaceTemporary Tablespace 用于存放瞬时数据,只有在session连接期间才能够看到数据。Permanentobject无法创建在temporarytablespace中。空间利用原理:它不会由smon来监控、回收空间。而是使用SEP(Sort Extent Pool)来记录空闲的extent。在OracleDatabase创建数据库的时候会自动的创建默认临时表空间,并且临时表空间的类型是 Locally Managed Temporary Tablespace with Tempfile 。Temporary File本地管理临时表空间拥有temp file,它是为存放hash数据、排序数据等而设计的文件。Temp file同样在超出memory大小后存储结果集的数据。TemporaryFile在创建的时候,就像一个稀疏文件,不会占用磁盘空间。只有当第一次使用的时候才会在其中创建temporary segment,分配disk block。Temp file 与 通常的数据文件(permanent data file)有如下不同点:1. 持久化数据库对象比如说通常的表,不会存放于temp file中。2. temp file 通常是nologging状态。3. 无法将temp file置于read-only状态(无法write,temp file将没有意义)。4. 无法使用alter database创建 temp file 。5. 无法保证temp file的大小,就像UNIX系统下的sparse files 。稀疏文件解释请看附录1。6. 查询temp file的视图也和普通数据文件视图不一样,是在dba_temp_files和v$tempfile中。Temporary Segment执行查询的过程中,oracle db通常需要临时工作空间。通常来说,sorting、hashing、merging bitmaps都需要用到临时段。当创建一个索引的时候,oracle db 同样将索引segment放在临时segemnt中,然后索引创建完之后转换为持久化index segment。如果操作可以在内存中完成,那么oracle db不会使用临时segment。不管怎样如果memory不可用,那么数据库自动的分配一个在存储磁盘上面的临时segment。临时segement的改变不会记录在online redo log中,除了那些在临时段上面的空间管理操作。Temporary table临时表中的数据,只保证存在于事务或者会话当中(取决于定义信息)。数据在会话当中是私有的,也就是说其他的会话只能看到自己会话内更改的数据。在创建临时表的时候,只需要指定临时表的生命周期范围,事务 or 会话 有效,而不需要指定它的存储参数,创建一个临时表,其实只是创建了临时表的定义信息。只有当在session内第一次插入数据的时候,才会在用户相应的临时表空间内非配temporary segment(一个segment可以被多个用户使用,只是分配各自的extent)。临时表通常只有定义信息,并且数据存放是动态的。可以存放于同一个temporary tablespace , 也可以是不同的。比如user 1 default temporary tablespace 为temp 1 ,user 2 为temp 2 ,那么u1 存储临时数据到 temp1 中,u2 存储临时表数据到temp2 中。虽然临时表数据的存储是动态的,但是因为临时表的定义信息是静态的,所以也可以创建索引在临时表上,数据的存放也与临时表类似,在第一次使用的时候分配临时segemnt。当然,也可以创建视图、触发器在临时表上。什么时候需要使用Temporary Tablespace首先就是当使用临时表的时候多个用户会共享使用一个temporarysegment,还有hashing,bitmap merge,然后就是排序操作了,当操作需要使用的内存空间大于sort_area_size的时候,就会使用临时表空间做为临时存储,进行排序操作,以下是需要排序的操作,也就是说有可能使用临时表空间的操作。- Index creation.创建索引的时候,服务器进程在构建tree之前按照索引值排序好(这可能会在临时表空间中进行)。排序完成后,会在indextablespace中使用临时segment构建最终的index,一旦索引构建结束,segment type改变为index 。(如果创建index失败,则需要smon来负责清理这些index tablespace中的临时空间)- ORDER BY or GROUP BY clauses of SELECTstatements.- DISTINCT values of SELECT statements.需要排序来消除重复值- UNION, INTERSECTor MINUS operations.因为需要消除重复值,所以需要排序操作(这里不包括unionall)- Sort-Merge joins.如果没有索引可用,一个等值连接需要分别执行全表所描和排序操作。然后排序好的rowsource会被合并在一起,取出两个rowsource 中匹配的行。- Analyze command execution.分析、收集统计信息的时候会需要排序操作。优化器需要收集的统计信息在附录2-Others比如说创建主键,createtable as select 等操作。
insert into select 批量加载出错解决方案Oracle函数大全相关资讯 Oracle入门基础教程 Oracle 临时表空间
- Linux x86 and x86-64 系统中的 (08/05/2014 10:12:29)
- Oracle系统繁忙时,快速定位 (02/18/2013 19:31:55)
- Oracle手工建库笔记 (12/28/2012 11:45:03)
| - Oracle 中极易混淆的几个 NAME 的 (07/29/2014 21:04:17)
- Oracle数据库用SQL实现快速分页 (12/29/2012 14:02:30)
- Oracle自治事务引起的死锁 (12/27/2012 18:30:46)
|
本文评论 查看全部评论 (0)