Oracle中临时表空间的清理

作者:iamlaosong

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

索引create或rebuild

Order by 或 group by

Distinct 操作

Union 或 intersect 或 minus

Sort-merge joins

analyze

重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。即使重建了临时表空间,过一段时间后,临时表空间的使用率就达到99%,然后,表空间就开始增长,直到耗尽硬盘空间。如下图所示临时表空间,刚建立时是8G,现在已到32G:

为了防止临时表空间无限制的增加,我采用隔一段时间就重建临时表空间的方法,为了方便,我保留两组语句,轮流执行即可,假定现在临时表空间名称是temp,新建一个tempa表空间,删除temp表空间,方法如下:

create   temporary   tablespace   TEMPA   TEMPFILE   ‘/opt/app/oracle/oradata/orcl/tempa01.dbf ‘   SIZE   8192M   REUSE   AUTOEXTEND   ON   NEXT  1024K   MAXSIZE   UNLIMITED;   --创建中转临时表空间

alter   database   default   temporary   tablespace   tempa;      --改变缺省临时表空间

drop   tablespace   temp   including   contents   and   datafiles;     --删除原来临时表空间

新建的临时表空间如下图所示:

过一段时间,当临时表空间增长到一定的程度,再新建一个temp表空间,删除tempa表空间,即:

create   temporary   tablespace   TEMP   TEMPFILE   ‘/opt/app/oracle/oradata/orcl/temp01.dbf ‘   SIZE   8192M   REUSE   AUTOEXTEND   ON   NEXT  1024K   MAXSIZE   UNLIMITED;   --创建中转临时表空间

alter   database   default   temporary   tablespace   temp;    --改变缺省临时表空间

drop   tablespace   tempa   including   contents   and   datafiles;  --删除原来临时表空间

这样就可以保证临时表空间不至于过大,防止过多的占用有限的硬盘空间。

=====================================================

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

select sess.SID, segtype, blocks * 8 / 1000 "MB", sql_text

from v$sort_usage sort, v$session sess, v$sql sql

where sort.SESSION_ADDR = sess.SADDR

and sql.ADDRESS = sess.SQL_ADDRESS

order by blocks desc;

下面语句查询临时表空间的空闲程度:

select ‘the ‘ || name || ‘ temp tablespaces ‘ || tablespace_name ||

‘ idle ‘ ||

round(100 - (s.tot_used_blocks / s.total_blocks) * 100, 3) ||

‘% at ‘ || to_char(sysdate, ‘yyyymmddhh24miss‘)

from (select d.tablespace_name tablespace_name,

nvl(sum(used_blocks), 0) tot_used_blocks,

sum(blocks) total_blocks

from v$sort_segment v, dba_temp_files d

where d.tablespace_name = v.tablespace_name(+)

group by d.tablespace_name) s,

v$database;

时间: 2024-08-30 10:07:01

Oracle中临时表空间的清理的相关文章

oracle 创建临时表空间、用户表空间、创建用户关联表空间、授权等总结

1.创建临时表空间 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL; 一般从第二步开始就可以 2.创建用户表空间 CREATE TABLESPACE gzjssapce LOGGING DATAFILE

oracle创建临时表空间组

在oracle11g以后,用户可以创建临时表空间组,一个临时表空间组中可以包含一个或多个临时表空间. 临时表空间组中必须由至少一个临时表空间组成,并且无明确的最大数量限制. 如果删除一个临时表空间组的所有成员,该组也自动被删除. 临时表空间的名字不能与临时表空间组的名字相同. 在给用户分配的一个临时表空间时,可以使用临时表空间组的名字代替实际的临时表空间名:在给数据库分配默认临时表空间时,也可以使用临时表空间组的名字. 临时表空间组 创建临时表空间组 临时表空间组不需要特别创建,只需要在创建临时

oracle创建临时表空间、用户表空间、创建用户关联表空间、授权等

1.创建临时表空间 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL; 一般从第二步开始就可以 2.创建用户表空间 CREATE TABLESPACE gzjssapce LOGGING DATAFILE

Oracle查询临时表空间

1.查看临时表分区 SELECT * FROM (SELECT USERNAME, SESSION_ADDR, SQL_ID, CONTENTS, SEGTYPE, BLOCKS * 8 / 1024 / 1024 GB FROM V$SORT_USAGE ORDER BY BLOCKS DESC) WHERE ROWNUM <= 200; 2.查看临时表空间 select * from (Select a.tablespace_name, to_char(a.bytes / 1024 / 10

在Oracle中查询表的大小、表的占用情况和表空间的大小

转载自http://blog.csdn.net/cuker919/article/details/8514253 select segment_name, bytes as 大小 from user_segments where segment_type = 'TABLE' and segment_name in ('VIEW_JLZDH_MP_DL_DAY_01','VIEW_JLZDH_MP_DL_DAY_02','VIEW_JLZDH_MP_DL_DAY_03', 'VIEW_JLZDH_

Oracle临时表空间组

Oracle 10g之前,同一用户的多个会话只可以使用同一个临时表空间,因为在给定的时间只有一个临时表空间默认给用户,为了解决这个潜在的瓶颈,Oracle支持临时表空间组即包含多个临时表空间的集合.临时表空间组逻辑上就相当于一个临时表空间. Example: 1 SQL>create temporary tablespace temp1 tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' size 10M; 2 3 SQL>create tem

转-oracle中比较两表表结构差异和数据差异的方法

oracle中比较两表表结构差异和数据差异的方法 原作者:li2008xue2008ling 出处:http://blog.csdn.net 在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据? 分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于表中的数据那就能多了,更不能靠这种方式比较. 为了思考问题简单和方便测试,首先先建立两个测试表,并插入一些测试数据吧,sql如下: create table t_A

Oracle中的三种Join 方式

基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort merge join: 将两个表排序,然后再进行join. Hash join: 将两个表中较小的一个在内存中构造一个Hash 表(对Join Key),扫描另一个表,同样对Join Key进行Hash后探测是否可以join,找出与之匹配的行. 一张小表被hash在内存中.因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据

Postgresql中临时表(temporary table)的特性和用法

熟悉Oracle的人,相比对临时表(temporary table)并不陌生,很多场景对解决问题起到不错的作用,开源库Postgresql中,也有临时表的概念,虽然和Oracle中临时表名字相同,使用方法和特性也有类似的地方,但还是有很多不同的方面,下面就对比Oracle中临时表举例说明下. 1.Postgresql 临时表的会话隔离性 Oracle中的临时表,创建后,虽然各个会话间的数据是互相隔离的,也就是一个会话看不到其他会话的数据,但定义是共用的.而Postgresql中的临时表,创建后,