Oracle中临时表空间的清理

标签: oracle 空间 清理 | 发表时间:2015-06-05 23:17 | 作者:iamlaosong
出处:http://blog.csdn.net

作者: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;


作者:iamlaosong 发表于2015/6/5 15:17:34 原文链接
阅读:56 评论:0 查看评论

相关 [oracle 空间 清理] 推荐:

Oracle中临时表空间的清理

- - CSDN博客推荐文章
作者:iamlaosong. Oracle临时表空间主要用来做查询和存放一些缓冲区数据. 临时表空间消耗的主要原因是需要对查询的中间结果进行排序. 索引create或rebuild. Order by 或 group by. Union 或 intersect 或 minus. 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长.

Oracle表空间(tablespaces)

- - 博客园_首页
  我们知道oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间. 一个数据库可以包含多个表空间,一个表空间只能属于一个数据库. 一个表空间包含多个数据文件,一个数据文件只能属于一个表空间.

oracle 表空间操作

- - 数据库 - ITeye博客
1.通过sql plus 命令登录数据库.   在命令行下输入sqlplus “登录用户名/口令 as 登录类型”就可以登录,系统内建的用户名常用的是sys,密码是在安装oracle过程中设置的密码,清务必牢记,如果用sys帐户登录,登录类型一定要是sysdba. 2.查看各表空间分配情况. 3.查看各表空间空闲情况.

Oracle修改表空间大小

- - 数据库 - ITeye博客
1.通过sql plus 命令登录数据库.   在命令行下输入sqlplus “登录用户名/口令 as 登录类型”就可以登录,系统内建的用户名常用的是sys,密码是在安装oracle过程中设置的密码,清务必牢记,如果用sys帐户登录,登录类型一定要是sysdba. 2.查看各表空间分配情况. 3.查看各表空间空闲情况.

Oracle字段占用空间测试

- - 数据库 - ITeye博客
插入110W条数据,只插入grade字段. 用truncate table amwu_graderecord 重新插入数据. insert into amwu_graderecord(grade,sno,sname,dormitory) select rownum, '小李子小李子', '小李子小李子', '小李子小李子' from dual connect by level<=1100000;.

Oracle 如何释放数据库空间

- - 数据库 - ITeye博客
        当需要释放数据库空间的时候,通常的方案会用有truncate、delete、drop/re-creating等处理. 其中truncate 后会立即释放,并且不能回滚;但delete不能立即释放数据库空间,还会产生archive log.     如: Truncate table xxxx; 我们可以直接去查user_segments对应table的bytes就变小,数据库空间释放,并且不能回滚.

Oracle DB 执行表空间时间点恢复

- - CSDN博客推荐文章
• 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作. • 阐释TSPITR 使用的术语的定义. • 确定适合将TSPITR 用作解决方案的情况. • 确定时间点恢复的正确目标时间. • 确定不能使用TSPITR 的情况以及解决方法. 表空间时间点恢复(TSPITR):概念. • 通过执行TSPITR 可将一个或多个表空间快速恢复到以前的某个时间.

Oracle 各种删除操作对空间返还的说明

- - IT技术博客大学习
标签:   oracle   空间. Oracle 各种删除操作对空间返还的说明. 操作 表空间是否回收空间. 文件系统或ASM是否回收空间. 在本地管理表空间(LMT 9i以后)是否造成表空间碎片. 在字典管理表空间(DMT 9i以前)是否造成表空间碎片. 注意现在的oracle版本不太可能用DMT 是否造成索引碎片.

(总结)Oracle 11g常用管理命令(用户、表空间、权限)

- - 服务器运维与网站架构|Linux运维|X研究
PS:下面是Oracle 11g最常用的基本管理命令,包括创建用户、表空间,权限分配等. 以下命令本人都验证操作过,加上了本人的小结说明. 从root切换到oracle用户进入:. 进入sqlplus环境,nolog参数表示不登录:. 注:要把Linux下的Oracle配置成服务自启动,请看:. (原创)CentOS Linux下配置Oracle 11gR2为系统服务自动启动.

oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)详解

- - Oracle - 数据库 - ITeye博客
    数据文件和日志文件是数据库中最重要的文件. 每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多. 要了解这些内容我们首先必须理解什么是表空间(tablespace)、段(segment)、区(extent)、块(block),这些都是oracle数据库在数据文件中组织数据的基本单元.