以前的整理

哪些情况下的操作会使用到临时表空间

首先我们要明确下哪些情况下的操作会使用到临时表空间:

  • 排序操作 比如select或dml(ddl)语句中包含order by之类;
  • create index
  • create pk constraint (其实这个跟create index类似,因为创建主键约束时默认会同时创建index)
  • enable constraint操作
  • create table语句

temp表空间的作用

temp表空间的作用,temp表空间主要是用作需要排序的操作。

  • 1.临时表空间 是用于在进行排序操作(如大型查询,创建索引和联合查询期间存储临时数据)每个用户都有一个临时表空间。

  • 2.对于大型操作频繁,(大型查询,大型分类查询,大型统计分析等),应指定单独的临时表空间,以方便管理。

  • 3.分配用户单独临时表空间,一般是针对 大型产品数据库,OLTP数据库,数据库仓库对于小型产品不需要单独制定临时表空间,使用默认临时表空间。

    正常情况下,一个sql执行之后,返回结果后系统会自动收回分配给这个用户的空间,以便可以把此部分空间再分配给其他用户。


临时表空间信息

(查询用户需要具备dba权限)

 select * from dba_tablespaces  where tablespace_name = 'TEMP';--自动扩展字段autoextendsible(yes/no)
select * from dba_temp_files;select * from v$tempfile ;

select tablespace_name,file_name,bytes/1024/1024 "file_size(M)",autoextensible from dba_temp_files;

需要说明的是:
1、sql语句完成之后,需要检查记录的准确性。
2、尽量不要在视图中进行order by ,这是一个非常耗费资源的操作。


Temporary Tablespacs 说明

临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作
时提供临时的运算空间,当运算完成之后系统会自动清理。

当 oracle 里需要用到sort 的时候, PGA 中 sort_area_size 大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间。

正常来说,在完成 Select 语句、 create index 等一些使用 TEMP 表空间的排序操作后, Oracle 是会自动释放掉临时段的。

注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。 所以 Temp 表空间可能会越来越大。

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

Temp 表空间的操作

创建临时表空间

create temporary tablespace TEMP
tempfile '/oradata/cc/temp01.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;  --默认的是local ,可以不加,另外一种是dictionary(数据字典管理)

You can use ALTER TABLESPACE to add a tempfile, take a tempfile offline, or bring a tempfile online, as illustrated in the following examples:

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/cc/temp02.dbf' SIZE 18M REUSE;
SQL>ALTER TABLESPACE TEMPFILE TEMPFILE OFFLINE;
SQL>ALTER TABLESPACE TEMPFILE TEMPFILE ONLINE;

不可以将 Temp 表空间 offline,但是可以将 tempfile offline。 V$TEMPFILE 显示了 tempfile 的状态。


The ALTER DATABASE statement can be used to alter tempfiles.

SQL>ALTER DATABASE TEMPFILE '/oradata/cc/temp02.dbf' OFFLINE;
SQL>ALTER DATABASE TEMPFILE '/oradata/cc/temp02.dbf' ONLINE;

改变临时表空间大小

  alter database tempfile '/oradata/cc/temp01.dbf' resize 1024M;

扩展临时表空间

方法一、增大临时文件大小:

   SQL> alter database tempfile ‘/oradata/cc/temp01.dbf’ resize 100m;

方法二、将临时数据文件设为自动扩展:

 SQL> alter database tempfile ‘/oradata/cc/temp01.dbf’ autoextend on next 5m maxsize unlimited;

方法三、向临时表空间中添加数据文件:

 SQL> alter tablespace temp add tempfile ‘/oradata/cc/temp02.dbf’ size 100m;

Temp 表空间过大的处理方法

11g的shrink方法更加简单快捷,如果是11g的话,建议使用shrink.

替换 Temp 表空间

查看目前 Temp 表空间的信息

SQL> select name from v$tempfile;NAME
--------------------------------------------------
/oradata/cc/temp01.dbf
SQL> select username,temporary_tablespace from dba_users;USERNAME             TEMPORARY_TABLESPACE
------------------------ ------------------------------
SYS                       TEMP
SYSTEM                    TEMP
UCC                       TEMP
CC                        TEMP
.........

关于用户这块是要特别注意的,如果我们将默认的 Temp 表空间指向其他的
名称,那么这些用户的信息就会失效。

所以,我们替换时,
要么创建一个临时的Temp 表空间中转一下,这样切换之后,我们的 temp 空间名称不变,

要么改变名称,同时更新相关用户的 default temp 表空间。

这里用中转的方法来测试.

创建中转临时表空间

Temp 表空间必须是 uniform 的, undo 必须是 autoallocate 的。默认情况 下 uniform 是 1M。

创建 SQL

SQL>CREATE TEMPORARY TABLESPACE TEMP2 TEMPFILE
'/oradata/cc/temp02.dbf' SIZE 10M AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

修改 Temp2 为默认临时表空间

SQL>alter database default temporary tablespace temp2;

删除原来临时表空间

SQL>drop tablespace temp including contents and datafiles;

重新创建临时表空间

SQL>CREATE TEMPORARY TABLESPACE TEMP TEMPFILE
'/oradata/cc/temp02.dbf' SIZE 10M AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

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

SQL>alter database default temporary tablespace temp;

删除中转用临时表空间

SQL>drop tablespace temp2 including contents and datafiles;

如果有必要,重新指定用户表空间为重建的临时表空间

SQL>alter user dave temporary tablespace temp;

对临时表空间进行shrink

11g中针对临时表空间过大的问题推出了SHRINK方法,使用这种方法可以非常便捷的自动化完成缩小临时表空间或临时文件的目的。

SQL> select * from dba_temp_free_space;TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
--------- --------- --------------- ----------
TEMP          1073741824       248512512 1069547520

官方说明dba_temp_free_space视图是11g中新增加的视图,使用这个视图可以很方便的得到临时表空间的使用情况。

当排序操作完成, 占用的空间并没有释放,仅仅是将它标记为空闲,并可重用,可以使用 shrink 来释放没有使用的空间。

shrink 是一个 online 的操作,不影响其他的查询.

使用临时表空间的SHRINK方法缩小临时表空间的大小

–将temp表空间收缩为20M

SQL>alter tablespace temp shrink space keep 20M; 

或者

SQL> alter tablespace temp shrink space;
Tablespace altered.

操作之前,查询下大小,可以方便的比较出效果。

select * from dba_temp_free_space;

收缩表空间中具体的临时文件

SHRINK同样可以作用到具体的临时文件

SQL> select file#,name,bytes/1024/1024 MB from v$tempfile;FILE#             NAME                    MB
---------- ----------------------       ----------1         /oradata/cc/temp01.dbf           1024SQL> alter tablespace temp shrink tempfile '/oradata/cc/temp01.dbf' keep 100m;Tablespace alteredSQL> select file#,name,bytes/1024/1024 MB from v$tempfile;FILE#      NAME                   MB
---------- -------------------- --------------1   /oradata/cc/temp01.dbf    100.992187

或者

SQL>ALTER TABLESPACE temp SHRINK TEMPFILE
'/oradata/cc/temp01.dbf ';--不指定大小,自动将表空间的临时文件缩小到最小可能的大小

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

查询默认临时表空间

select * from database_properties where property_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;

删除临时表空间

删除临时表空间的一个数据文件:

   alter database tempfile '/oradata/cc/temp01.dbf' drop;

删除临时表空间(彻底删除):

   drop tablespace temp including contents and datafiles cascade constraints;

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

GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询 ,拥有DBA权限的用户也不行,必须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 usedFROM GV_$TEMP_SPACE_HEADERGROUP BY tablespace_name) temp_used,(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 totalFROM dba_temp_filesGROUP BY tablespace_name) temp_totalWHERE temp_used.tablespace_name = temp_total.tablespace_name
SQL> conn sys/system as sysdba
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as sys@cc AS SYSDBASQL>   SELECT temp_used.tablespace_name,2              total - used as "Free",3              total as "Total",4              round(nvl(total - used, 0) * 100 / total, 3) "Free percent"5         FROM (SELECT tablespace_name, SUM(bytes_used) / 1024 / 1024 used6                 FROM GV_$TEMP_SPACE_HEADER7                GROUP BY tablespace_name) temp_used,8              (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total9                 FROM dba_temp_files10                GROUP BY tablespace_name) temp_total11        WHERE temp_used.tablespace_name = temp_total.tablespace_name12  ;TABLESPACE_NAME       Free      Total     Free percent
------------------------------ ---------- ----------
TEMP                   787       1024       76.855

tempfile 数据文件重命名的步骤:

( 1)将 tempfile offline
( 2)在操作系统上重命名 tempfile
( 3)使用 alter database rename file 更新控制文件


临时表空间组

概述

Oracle 10g之前,同一用户的多个会话只可以使用同一个临时表空间,因为在给定的时间只有一个临时表空间默认给用户,为了解决这个潜在的瓶颈,Oracle支持临时表空间组即包含多个临时表空间的集合。

临时表空间组逻辑上就相当于一个临时表空间。


操作

SQL>create temporary tablespace temp1 tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' size 10M;SQL>create temporary tablespace temp2 tempfile '/u01/app/oracle/oradata/orcl/temp02.dbf' size 10M;SQL>create temporary tablespace temp3 tempfile '/u01/app/oracle/oradata/orcl/temp03.dbf' size 10M;
SQL>select name from v$tempfile;NAME----------------------------------------------------/u01/app/oracle/oradata/orcl/temp01.dbf/u01/app/oracle/oradata/orcl/temp02.dbf/u01/app/oracle/oradata/orcl/temp01.dbf
SQL>select tablespace_name from dba_tablespaces where contents='TEMPORARY';TABLESPACE_NAME-------------------------------------------------------------
TEMP1TEMP2TEMP3

添加temp1,temp2,temp3到临时表空间组tempgrp中

SQL>alter tablespace temp1 tablespace group tempgrp;SQL>alter tablespace temp2 tablespace group tempgrp;SQL>alter tablespace temp3 tablespace group tempgrp;

启用临时表空间组

SQL>alter database default temporary tablespace tempgrp;
SQL>select * from dba_tablespace_groups;GROUP_NAME                     TABLESPACE_NAME---------------------------------------------------------TEMPGRP                 TEMP1TEMPGRP                 TEMP2TEMPGRP                 TEMP3

此时数据库所有用户的默认临时表空间为tempgrp

SQL>select username,defualt_tablespace,temporary_tablespace from dba_user where username='SCOTT';USERNAME        DEFAULT_TABLESPACE     TEMPORARY_TABLESPACE-------------------------------------------------------SCOTT            USERS                 TEMPGRP

删除临时表空间组

1.必须先删除成员

SQL>alter tablespace temp1 tablespace group '';(表示删除temp1)
SQL>select * from dba_tablespace_groups;GROUP_NAME                    TABLESPACE_NAME----------------------------------------------------------TEMPGRP                 TEMP2TEMPGRP                 TEMP3

同理将temp2,temp3删除

当表空间组是数据库默认表空间时,最后一个成员删除报错:ORA-10919:Defualt temporary tablespace group must be have at least one tablespace

SQL>alter database default temporary tablespace temp;

此时再删除最后一个成员,临时表空间组自动消失

SQL>select * from dba_tablespace_groups;no rows selected

删除temp1表空间及数据文件

SQL>drop temporary tablespace temp1 including contents and datafiles;

Oracle-临时表空间(组)解读相关推荐

  1. oracle临时表空间组,证明临时表空间组在并发session时的作用

    本帖最后由 zcs0237 于 2013-7-16 20:26 编辑 a.感谢对本帖补充.建议.错误更正 b.为节省篇幅,部分输出结果做了精简 c.可按本文先后顺序复制文中代码进程调试 d.测试环境: ...

  2. oracle内存表与临时表,Oracle 临时表之临时表空间组(TTG)

    环境: sys@ORCL> select * from v$version; BANNER --------------------------------------------------- ...

  3. oracle 创建临时表报权限不足,ORACLE 临时表空间满了的原因解决方案

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

  4. oracle 临时表空间的增删改查

    oracle 临时表空间的增删改查 1.查看临时表空间 (dba_temp_files视图)(v_$tempfile视图) select tablespace_name,file_name,bytes ...

  5. oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法

    临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当oracle里需要用到sort的时候,PGA中sort_area_size大小不 ...

  6. oracle临时表空间暴涨,如何解决Oracle临时表空间过大

    方案一:增加临时表空间的大小 1.临时表空间的使用情况题 SELECT D.tablespace_name, SPACE "SUM_SPACE(M)", blocks " ...

  7. oracle 临时表空间语句,oracle的临时表空间

    经常看到有人说看到temporary tablespace空间不释放等等的问题,整理一篇metalink上的相关文章,入门级的,还算浅显吧.基本上就是翻译了. sort之后临时段不回收 描述 当你监控 ...

  8. oracle临时表空间扩容

    oracle临时表空间扩容 查看临时表空间 select * from (Select a.tablespace_name, to_char(a.bytes / 1024 / 1024, '99,99 ...

  9. Oracle 临时表空间操作

    文章目录 Oracle 临时表空间操作 查看默认临时表空间名称 查询表空间剩余字节大小 -- 临时表空间 查询表空间数据文件路径 -- 临时表空间 为临时表空间增加数据文件 -- TEMP 参考 Or ...

最新文章

  1. ASP.net session 使用总结(2)
  2. ArcGIS API for Silverlight 点沿着线流动
  3. js如何获取jwt信息_学习后端鉴权系列: 基于JWT的会话管理
  4. pytest测试实战 电子书_电子书丨Selenium 3+Python 3自动化测试项目实战:从菜鸟到高手...
  5. Lync开发实例3—自定义客户端
  6. 【java】java 分支预测 Java处理排序后的数组比没有排序的快
  7. mysql rds 迁移_如何实现迁移RDS for MySQL数据到本地 MySQL
  8. 史话下:量子物理学的前世今生
  9. PhpStorm修改字体和主题
  10. MFC CFileDialog使用整理
  11. npm list 报错 extraneous
  12. 湖北师范大学----操作系统实训(c语言)
  13. PXE高效网络装机与Kickstart无人值守
  14. Dennard scaling(MOSEFT scaling)
  15. TF-IDF算法解析与Python实现
  16. 今年元宵月52年来最圆最大
  17. Oxygen PDF Chemistry新功能
  18. TI高精度实验室-运算放大器-第十节-运放稳定性问题
  19. electron项目打包成dmg
  20. c语言count函数的作用,count通达信什么意思,count是啥意思

热门文章

  1. oracle中app文件夹下,Oracle Form开发之folder(文件夹)功能开发(一)
  2. nio2 java_java NIO2(file io)
  3. 118. Leetcode 392. 判断子序列 (动态规划-子序列问题)
  4. 78. Leetcode 264. 丑数 II (堆-技巧二-多路归并)
  5. Leetcode 203. 移除链表元素 (每日一题 20210914)
  6. 机器学习笔记: attention
  7. 文巾解题 50. Pow(x, n)
  8. 文巾解题 1035. 不相交的线
  9. 滴滴出行2020数据分析面试题
  10. tableau应用实战案例(三)-如何用Tableau制作网络关系图