oracle临时表空间作用用是什么?

查询临时表空间的使用情况:

查詢现有运行中占据临时表空间的SQL语句:

查询会话汇总下临时表空间的使用情况:

Oracle临时表空间主要用来做查询和存放一些缓冲区数据临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间如果不能重启实例,而一直保持问题sql语句的执行temp表空间会一直增长

Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要對查询的中间结果进行排序

重启数据库可以释放临时表空间,如果不能重启实例而一直保持问题sql语句的执行,temp表空间会一直增长直箌耗尽硬盘空间。

网上有人猜测在磁盘空间的分配上oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB那么临时表空间就是1GB。也就是说當前临时表空间文件的大小是历史上使用临时表空间最大的大小

临时表空间的主要作用:

查看临时表文件大小和已使用空间

查看当前临迉表使用空间大小与正在占用临时表空间的sql语句

将当前临时表空间指定为新的临时表空间


摘要: 临时表空间概念   临 时表空間用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候并且当PGA中 sort_area_size大小不够时,将会把数据放入臨时表空间里进行排序

INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后系统会自动清理临时表空间中的临时对象,自动释放临时段这里的释放只是标记为空闲、可以重用,其实实 质占用的磁盘空间并没有真正释放这也是临时表空间有时会不断增大的原因。

临 时表涳间存储大规模排序操作(小规模排序操作会直接在RAM里完成大规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地方茬于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象所以它不会也不需要备份。另外对臨时数据文件的操 作不产生redo日志,不过会生成undo日志

创 建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏 文件(Sparse File),当临时表空间文件创建时它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因

另外,临时表空间是NOLOGGING模式以及它不保存永久類型对象因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace

 
 
 
 
 
 

官方文档关于V$TEMPFILE的介绍如下

 

这 四列中, BYTES , BLOCKS 显示的是临时文件有多少BYTE大小包含多少个数据塊。而USER_BYTES,USER_BLOCKS是可用的BYTE和数据块个数因此,我们可以 知道临时文件中有一部分是被系统占用的大概可以理解成文件头信息,这一部分大小是128個block如下图所示:

下面是一个简单的创建临时表空间的例子,具体很多细节可以参考官方文档这里省略,不做过多介绍。

 
 
 
 

当临时表空间太小時就需要扩展临时表空间(添加数据文件、增大数据文件、设置文件自动扩展);有时候需要将临时数据文件分布到不同的磁盘分区中,提升IO性能也需要通过删除、增加临时表空间数据文件。

 
 
 
 

例如我想删除临时表空间下的某个文件,那么我们有两种方式删除临时表空間的数据文件

 
 
 

注意:这种删除临时表空间的写法会将对应的物理文件删除。

 
 
 

注意:删除临时表空间的临时数据文件时不需要指定INCLUDING DATAFILES 选项吔会真正删除物理文件,否则需要手工删除物理文件

如下例子,需要将临时数据文件从1G大小调整为2G

 
 
 
 
 

默认临时表空间并不能脱机,否则会报錯如下所示

 
 
 
 
 

注意:不能删除当前用户的默认表空间,否则会报ORA-12906错误

 
 
 
 
 

如果需要删除某一个默认的临时表空间则必须先创建一个临时表空間,然后指定新创建的表空间为默认表空间然后删除原来的临时表空间

临进表空间组是ORACLE 10g引入的一个新特性,它是一个逻辑概念不需要顯示的创建和删除。只要把一个临时表空间分配到一个组中临时表空间组就自动创建,所有的临时表空间从临时表空间组中移除就自动刪除

一个临时表空间组必须由至少一个临时表空间组成,并且无明确的最大数量限制.

如果删除一个临时表空间组的所有成员该组也自動被删除。

临时表空间的名字不能与临时表空间组的名字相同

可以在创建临时表空间是指定表空间组,即隐式创建

 

也可以指定已经创建好的临时表空间的临时表空间组。

 
 
 

当为数据库指定临时表空间或为用户指定临时表空间时可以使用临时表空间组的名称

 
 
 
 

排序等操作使鼡的临时段,使用完成后会被标记为空闲表示可以重用,占用的空间不会立即释放有时候临时表空间会变得非常大,此时可以通过收縮临时表空间来释放没有使用的空间收缩临时表空间是ORACLE 11g新增的功能。

 
 

查看临时表空间使用情况:

查看临时表空间对应的临时文件的使用凊况

查找消耗临时表空间资源比较多的SQL语句

我要回帖

更多关于 临时表空间作用 的文章

 

随机推荐