目录

一、临时表空间作用... 2

二、临时表空间释放... 2

法一、重启库... 2

法二、Metalink给出的一个方法... 3

法三、我常用的一个方法... 3

法四、使用诊断事件的一种方法... 3

法五、 重建TEMP 表空间... 3

三、临时表空间增删改... 3

1、改变临时表空间大小... 3

3、创建临时表空间... 3

4、更改系统的默认临时表空间... 3

5、删除临时表空间... 3

6、临时表空间组介绍... 3

7、对临时表空间进行shrink(11g新增的功能)... 3

四、临时表空间查询... 3

1、查看临时表空间是否可用... 3

2、查看临时表空间的使用情况... 3

3、 查找消耗资源比较的sql语句... 3

五、临时表空间回收测试... 3

 

 

 

 

 

 

 

 

 

 

 

关于oracle临时表空间

一、临时表空间作用

临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当oracle里需要用到sort的时候,PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间,正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段的。注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。所以Temp表空间可能会越来越大。

重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。 在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。临时表空间的主要作用:
 (1)索引create或rebuild
 (2)Order by 或 group by
 (3)Distinct 操作
 (4)Union 或 intersect 或 minus
 (5)Sort-merge joins
 (6)analyze

排序是很耗资源的,Temp表空间满了,关键是优化你的语句,尽量使排序减少才是上策.

二、临时表空间释放

法一、重启库

库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。

法二、Metalink给出的一个方法

修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。
SQL>alter tablespace temp increase 1;
SQL>alter tablespace temp increase 0;

法三、我常用的一个方法

1、使用如下语句查看一下认谁在用临时段
SELECT username,
       sid,
       serial#,
       sql_address,
       machine,
       program,
       tablespace,
       segtype,
       contents
  FROM v$session se,
       v$sort_usage su
WHERE se.saddr=su.session_addr 
    2、   那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#';
    3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce;

法四、使用诊断事件的一种方法

1、 确定TEMP表空间的ts#
SQL>select ts#, name from sys.ts$ ;
TS# NAME
-----------------------
0 SYSYEM
1 RBS
2 USERS
3* TEMP
4 TOOLS
5 INDX
6 DRSYS
2、 执行清理操作
SQL>alter session set events 'immediate trace nameDROP_SEGMENTS level 4' ;
说明:
temp表空间的TS# 为 3*, So TS#+ 1= 4

法五、 重建TEMP 表空间

Temporary tablespace是不能直接drop默认的临时表空间的,不过我们可以通过以下方法来做。  

准备:查看目前的TemporaryTablespace

  SQL> select namefrom v$tempfile

1.创建中转临时表空间

create temporarytablespace  TEMP1 TEMPFILE 'E:\ORACLE\ORADATA\ORCL\temp02.DBF' SIZE 512MREUSE AUTOEXTEND ON NEXT  1M MAXSIZE UNLIMITED;

  2.改变缺省临时表空间 为刚刚创建的新临时表空间temp1

  alter databasedefault  temporary tablespace  temp1;

  3.删除原来临时表空间

  drop tablespace tempincluding contents and datafiles;

  4.重新创建临时表空间

  create temporarytablespace  TEMP TEMPFILE 'E:\ORACLE\ORADATA\ORCL\temp01.DBF' SIZE 512MREUSE AUTOEXTEND ON NEXT  1M MAXSIZE UNLIMITED;

  5.重置缺省临时表空间为新建的temp表空间

  alter databasedefault  temporary tablespace  temp;

  6.删除中转用临时表空间

  drop tablespacetemp1 including contents and datafiles;

三、临时表空间增删改

1、改变临时表空间大小

alter database tempfile'C:\ORADATA\ORCL\TEMP01.DBF' resize 21M;   2、扩展临时表空间

方法一、增大临时文件大小:
         SQL> alter databasetempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;
         方法二、将临时数据文件设为自动扩展:
        SQL> alter databasetempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend        on next 5m maxsize unlimited;
         方法三、向临时表空间中添加数据文件:
       SQL> alter tablespace tempadd tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

3、创建临时表空间

create temporary tablespacetemp01 tempfile 'C:\ORADATA\ORCL\TEMP01.DBF' size 10M;

4、更改系统的默认临时表空间

--查询默认临时表空间
  select * from database_properties whereproperty_name='DEFAULT_TEMP_TABLESPACE';
   --修改默认临时表空间
  alter database default temporary tablespace temp02;
  --所有用户的默认临时表空间都将切换为新的临时表空间:
  select username,temporary_tablespace,default_tablespace from dba_users;
  --更改某一用户的临时表空间:
  alter user scott temporary tablespace temp02;

5、删除临时表空间

--删除临时表空间的一个数据文件:
  alter database tempfile 'C:\ORADATA\ORCL\TEMP03.DBF' drop;
  --删除临时表空间(彻底删除):
  drop tablespace temp including contents and datafiles cascadeconstraints;

6、临时表空间组介绍

--1)创建临时表空间组:
    create temporary tablespace tempts1 tempfile'C:\ORADATA\ORCL\TEMP1_01.DBF' size 2M  tablespace group group1;
     create temporary tablespace tempts2 tempfile'C:\ORADATA\ORCL\TEMP1_02.DBF' size 2M tablespace group group2;
     
    --2)查询临时表空间组:dba_tablespace_groups视图
    select * from dba_tablespace_groups;
   GROUP_NAME                    TABLESPACE_NAME
    ------------------------------------------------------------
   GROUP1                        TEMPTS1
    GROUP2                        TEMPTS2
    --3)将表空间从一个临时表空间组移动到另外一个临时表空间组:
    alter tablespace tempts1 tablespace group GROUP2 ;
    select * from dba_tablespace_groups;
   GROUP_NAME                    TABLESPACE_NAME
    ------------------------------ ------------------------------
   GROUP2                        TEMPTS1
   GROUP2                        TEMPTS2
     --4)把临时表空间组指定给用户
    alter user scott temporary tablespace GROUP2;
     --5)在数据库级设置临时表空间
    --alter database <db_name> default temporarytablespace GROUP2;
    alter database orcl default temporary tablespace GROUP2;
     --6)删除临时表空间组 (删除组成临时表空间组的所有临时表空间)
    drop tablespace tempts1 including contents and datafiles;
    select * from dba_tablespace_groups;
    GROUP_NAME                    TABLESPACE_NAME
    ------------------------------------------------------------
   GROUP2                        TEMPTS2
    drop tablespace tempts2 including contents and datafiles;
    select * from dba_tablespace_groups;
   GROUP_NAME                    TABLESPACE_NAME

7、对临时表空间进行shrink(11g新增的功能)

--将temp表空间收缩为20M
    alter tablespace temp02 shrink space keep 20M;
    --自动将表空间的临时文件缩小到最小可能的大小
    ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’;

四、临时表空间查询

1、查看临时表空间是否可用

SELECT D.TABLESPACE_NAME,SPACE"SUM_SPACE(M)",BLOCKS SUM_BLOCKS,

SPACE-NVL(FREE_SPACE,0)"USED_SPACE(M)",

ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2)"USED_RATE(%)",

FREE_SPACE"FREE_SPACE(M)"

FROM  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,

SUM(BLOCKS) BLOCKS  FROM DBA_DATA_FILES  GROUP BY TABLESPACE_NAME) D,

(SELECTTABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE

FROM DBA_FREE_SPACE  GROUP BY TABLESPACE_NAME) F

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)

UNION ALL  --if have tempfile

SELECT D.TABLESPACE_NAME,SPACE"SUM_SPACE(M)",BLOCKS SUM_BLOCKS,

USED_SPACE"USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2)"USED_RATE(%)",

NVL(FREE_SPACE,0) "FREE_SPACE(M)"

FROM  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,

SUM(BLOCKS) BLOCKS  FROM DBA_TEMP_FILES  GROUP BY TABLESPACE_NAME) D,

(SELECTTABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,

ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE

FROM V$TEMP_SPACE_HEADER  GROUP BY TABLESPACE_NAME) F

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);

2、查看临时表空间的使用情况

(GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询)
    --GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小
    --dba_temp_files视图的bytes字段记录的是临时表空间的总大小
    SELECT temp_used.tablespace_name,
           total - used as"Free",
           total as"Total",
           round(nvl(total -used, 0) * 100 / total, 3) "Free percent"
      FROM (SELECT tablespace_name, SUM(bytes_used) /1024 / 1024 used
             FROM GV_$TEMP_SPACE_HEADER
             GROUPBY tablespace_name) temp_used,
           (SELECTtablespace_name, SUM(bytes) / 1024 / 1024 total
             FROM dba_temp_files
             GROUPBY tablespace_name) temp_total
     WHERE temp_used.tablespace_name = temp_total.tablespace_name

3、 查找消耗资源比较的sql语句
  Select se.username,
         se.sid,
         su.extents,
         su.blocks *to_number(rtrim(p.value)) as Space,
         tablespace,
         segtype,
         sql_text
    from v$sort_usage su, v$parameter p, v$session se, v$sql s
   where p.name = 'db_block_size'
     and su.session_addr = se.saddr
     and s.hash_value = su.sqlhash
     and s.address = su.sqladdr
   order by se.username, se.sid
  4、查看当前临时表空间使用大小与正在占用临时表空间的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;

五、临时表空间回收测试

详细测试步骤见附件。

Oracle (temporary tablespace)临时表空间说明相关推荐

  1. Oracle 原理:临时表空间的操作方式

    临时表空间用于存放用户的临时数据,允许被覆盖,关闭数据库后,临时表空间的数据会自动删除.在专有连接模式下,一个用户进程对应的一个服务器进程.临时表空间在硬盘中,SQL查询取出来的数据放在在PGA(程序 ...

  2. Oracle中关于临时表空间无法释放问题

    一.日常工作中出现的"灵异事件" 利用BI工具在进行整体流程跑批的时候,一段时间就会报错:临时表空间不足 生产环境中为了保证系统的稳定,一般不采取重启数据库的方式.所以扩充表空间或 ...

  3. oracle如何查询临时表空间,Oracle查询临时表空间的占用

    可以使用以下语句查询是哪个session number的哪个sql占用了较大的临时表空间 select inst_id,username,session_num,sql_id,tablespace,s ...

  4. oracle清除temp表空间,Oracle 11G清理临时表空间

    一. 临时表空间收缩 1.1 说明 关于Oracle 的临时表空间,之前有整理过一篇Blog: 以下操作会占用大量的temporary: 1.用户执行imp/exp 导入导出操作时,会使用大量的tem ...

  5. oracle 5632,Oracle系统默认临时表空间以及redo日志文件问题处理

    本人现在要把Oracle的数据同步到MySQL,运用的ETL工具,由于数据量很大,而且有子查询要用到临时表空间,导致原来的该临时表空间 问题:本人现在要把Oracle的数据同步到MySQL,运用的ET ...

  6. oracle查询数据放入临时表,ORACLE Temporary Tables临时表更适合做插入和查询操作

    1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交 ...

  7. Oracle数据库创建表空间及用户授权

    /*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace test_temp tempfile 'E:\app\Administrator\orad ...

  8. Oracle 12c创建表空间、用户

    目录 一.前言 二.创建表空间 三.创建用户 四.删除表空间.用户 五.CDB与PDB相关文章 一.前言 Oracle 12c 中新增加了可插入数据库的概念,即PDB(Pluggable Databa ...

  9. oracle建表语句空间,oracle建表空间语句

    一.能帮我解释一下oracle创建表空间的语句吗 1. 创建表空间,名称为db_name; 2. 表空间有一个数据文件*.dbf,大小为200MB; 3. 允许表空间自动扩展(autoextends) ...

  10. oracle 19c创建表空间、用户及授权

    oracle从12c开始增加了增加了CDB和PDB的概念,数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB).CD ...

最新文章

  1. 135. Leetcode 46. 全排列 (回溯算法-排列问题)
  2. sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6)
  3. 周学习进度----03
  4. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
  5. 反编译获取线上任何微信小程序源码(转)
  6. x光肺部分割数据集_一个超小型分割检测数据集
  7. PowerDesigner生成Oracle数据库时,表名会带引号问题
  8. 程序员常用的软件(附下载地址)
  9. .Net framework 3.5缺失解决
  10. 不用校园网如何下载论文文献|DOI号|文献免费下载
  11. 明月当空照,python3D编程初阶:坐标、模型、纹理与光
  12. (翻译)简化模式(Reduce)
  13. 英语学习口诀大全be 的用法口诀
  14. 「效率工具」HHKB的常用快捷键
  15. qq邮箱里面html的图片无法显示,QQ邮箱如何不显示图片? QQ邮箱如何不显示图片?...
  16. WorksheetFunction 成员 (Excel)
  17. 赛意SMOM和金蝶云星空单据接口对接
  18. 游戏开发笔记十六 讲解一个完整的回合制游戏demo
  19. 什么是cmnet和cmwap
  20. 面经01-CET中电技术

热门文章

  1. 笔记本计算机的清洁保养知识,笔记本电脑怎么清洁卫生 笔记本清理灰尘要注意什么...
  2. win10 + ubantu双系统 彻底删除Ubantu
  3. 游戏王计算机兽,召唤兽(游戏王卡组系列)_百度百科
  4. 爬虫实战爬取豆瓣电影Top250榜单电影
  5. 溢出英语计算机,查看溢出(简述计算机溢出原理)
  6. 平时杂技,串口摄像头+portmon.exe
  7. lol封号维护服务器,LOL手游:各大服务器突然断开,众主播账号被永久封停
  8. T32 dump 连续寄存器
  9. Windows权限维持1:账号隐藏
  10. Uniapp Base64码 播放音频(MP3)