临时表空间概念

临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 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。

临时表空间信息

 

查看实例的临时表空间

SQL1:

SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE

 

2 FROM DATABASE_PROPERTIES

 

3 WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

 

PROPERTY_NAME                    PROPERTY_VALUE

 

------------------------------ ----------------------------

 

DEFAULT_TEMP_TABLESPACE               TEMP

 

SQL2:

SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS;

 

查看临时表空间信息:

SET LINESIZE 1200

COL NAME FOR A60

SELECT FILE#                        AS FILE_NUMBER

    ,NAME                           AS NAME

    ,CREATION_TIME                  AS CREATION_TIME

    ,BLOCK_SIZE                     AS BLOCK_SIZE

    ,BYTES/1024/1024/1024           AS "FILE_SIZE(G)"

    ,CREATE_BYTES/1024/1024/1024    AS "INIT_SIZE(G)"

    ,STATUS                         AS STATUS

    ,ENABLED                        AS ENABLED

FROM V$TEMPFILE;

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

td {border:solid #9ec9ec; border-width:0px 1px 1px 0px; padding:4px 0px;}
table {border:1px solid #9ec9ec; width:100%;border-width:1px 0px 0px 1px;text-align:left;font-size:12px}

Column

Datatype

Description

FILE#

NUMBER

Absolute file number

CREATION_CHANGE#

NUMBER

Creation System Change Number (SCN)

CREATION_TIME

DATE

Creation time

TS#

NUMBER

Tablespace number

RFILE#

NUMBER

Relative file number in the tablespace

STATUS

VARCHAR2(7)

Status of the file (OFFLINE|ONLINE)

ENABLED

VARCHAR2(10)

Enabled for read and/or write

BYTES

NUMBER

Size of the file in bytes (from the file header)

BLOCKS

NUMBER

Size of the file in blocks (from the file header)

CREATE_BYTES

NUMBER

Creation size of the file (in bytes)

BLOCK_SIZE

NUMBER

Block size for the file

NAME

VARCHAR2(513)

Name of the file

SET LINESIZE 1200

    COL TABLESPACE_NAME FOR A30

   COL FILE_NAME FOR A60

SELECT TABLESPACE_NAME                 AS TABLESPACE_NAME

        ,FILE_NAME                     AS FILE_NAME

        ,BLOCKS                        AS BLOCKS

        ,STATUS                        AS STATUS

        ,AUTOEXTENSIBLE                AS AUTOEXTENSIBLE

        ,BYTES/1024/1024/1024          AS "FILE_SIZE(G)"

        ,DECODE(MAXBYTES, 0, BYTES/1024/1024/1024,

                          MAXBYTES/1024/1024/1024)

                                       AS "MAX_SIZE(G)"

        ,INCREMENT_BY                  AS "INCREMENT_BY"

        ,USER_BYTES/1024/1024/1024     AS "USEFUL_SIZE"

FROM DBA_TEMP_FILES;

DBA_TEMP_FILES describes all temporary files (tempfiles) in the database.

Column

Datatype

NULL

Description

FILE_NAME

VARCHAR2(513)

Name of the database temp file

FILE_ID

NUMBER

File identifier number of the database temp file

TABLESPACE_NAME

VARCHAR2(30)

NOT NULL

Name of the tablespace to which the file belongs

BYTES

NUMBER

Size of the file (in bytes)

BLOCKS

NUMBER

Size of the file (in Oracle blocks)

STATUS

CHAR(9)

File status:

·

· AVAILABLE

RELATIVE_FNO

NUMBER

Tablespace-relative file number

AUTOEXTENSIBLE

VARCHAR2(3)

Indicates whether the file is autoextensible (YES) or not (NO)

MAXBYTES

NUMBER

maximum size of the file (in bytes)

MAXBLOCKS

NUMBER

Maximum size of the file (in Oracle blocks)

INCREMENT_BY

NUMBER

Default increment for autoextension

USER_BYTES

NUMBER

Size of the useful portion of the file (in bytes)

USER_BLOCKS

NUMBER

Size of the useful portion of the file (in Oracle blocks)

SQL> SELECT BYTES,BLOCKS,  USER_BYTES, USER_BLOCKS, 

            BLOCKS -USER_BLOCKS AS SYSTEM_USED 

     FROM DBA_TEMP_FILES;

 

     BYTES     BLOCKS USER_BYTES USER_BLOCKS SYSTEM_USED

---------- ---------- ---------- ----------- -----------

2147483648     262144 2146435072      262016         128

1073741824     131072 1072693248      130944         128

 209715200      25600  208666624       25472         128

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

 

管理临时表空间

 

创建临时表空间

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

http://docs.oracle.com/cd/B10501_01/server.920/a96540/statements_75a.htm

http://docs.oracle.com/cd/B28359_01/server.111/b28310/tspaces002.htm#ADMIN11366

CREATE TEMPORARY TABLESPACE TMP 

 

TEMPFILE '/u01/gsp/oradata/TMP01.dbf'

 

SIZE 8G

 

AUTOEXTEND OFF;

 

 

增加数据文件

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

SQL> ALTER TABLESPACE TEMP

  2  ADD TEMPFILE '/u04/gsp/oradata/temp02.dbf'

  3  SIZE 4G 

  4  AUTOEXTEND ON

  5  NEXT 128M

  6  MAXSIZE 6G;

 

Tablespace altered.

 

 

SQL> ALTER  TABLESPACE TMP

ADD TEMPFILE '/u03/eps/oradata/temp02.dbf'

SIZE 64G

AUTOEXTEND OFF;

 

Tablespace altered.

 

删除数据文件

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

方法1:

SQL> ALTER TABLESPACE TEMP

 

     DROP TEMPFILE '/u01/app/oracle/oradata/GSP/temp02.dbf';

 

Tablespace altered.

 

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

方法2:

SQL> ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/GSP/temp02.dbf' 

 

DROP INCLUDING DATAFILES;

 

Database altered.

 

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

 

调整文件大小

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

SQL> ALTER DATABASE TEMPFILE

 

'/u01/app/oracle/oradata/GSP/temp02.dbf' RESIZE 2G;

 

 

文件脱机联机

SQL> ALTER DATABASE TEMPFILE 

  2  '/u01/app/oracle/oradata/GSP/temp02.dbf' OFFLINE;

 

Database altered.

 

SQL> ALTER DATABASE TEMPFILE 

  2  '/u01/app/oracle/oradata/GSP/temp02.dbf' ONLINE;

 

Database altered.

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

SQL> ALTER TABLESPACE TEMP OFFLINE;

ALTER TABLESPACE TEMP OFFLINE

*

ERROR at line 1:

ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

 

设置文件自动扩展

SQL> ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/GSP/temp03.dbf'

 

2 AUTOEXTEND ON

 

3 NEXT 100M 

 

4 MAXSIZE UNLIMITED;

 

 

移动重命名文件

例如,我需要将/u01/app/oracle/oradata/GSP/temp4.dbf这个文件重命名为/u01/app/oracle/oradata/GSP/temp04.dbf

1: 将临时表空间的临时文件脱机

SQL> ALTER DATABASE TEMPFILE 

  2   '/u01/app/oracle/oradata/GSP/temp4.dbf' OFFLINE;

2:移动或重命名相关的临时文件

mv /u01/app/oracle/oradata/GSP/temp4.dbf /u01/app/oracle/oradata/GSP/temp04.dbf'

3: 使用脚本ALTER DATABASE RENAME FILE

SQL> ALTER DATABASE RENAME FILE 

  2  '/u01/app/oracle/oradata/GSP/temp4.dbf' TO

  3  '/u01/app/oracle/oradata/GSP/temp04.dbf';

4: 将临时表空间的临时文件联机

SQL> ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/GSP/temp04.dbf' ONLINE;

 

Database altered.

删除临时表空间

SQL> DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

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

SQL> DROP TABLESPACE TMP INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

 

DROP TABLESPACE TMP INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS

 

*

 

ERROR at line 1:

 

ORA-12906: cannot drop default temporary tablespace

 

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

 

临时表空间组

临进表空间组:

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

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

A temporary tablespace group contains at least one tablespace. There is no limit for a group to have a maximum number of tablespaces

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

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

It shares the namespace of tablespaces, thus its name cannot be the same as that of any tablespace.

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

SQL>CREATE TEMPORARY TABLESPACE TEMP2 

    TEMPFILE '/u01/app/oracle/oradata/GSP/temp2_1.dbf' SIZE 200M 

    TABLESPACE GROUP GRP_TEMP;

查看临时表空间组:

SQL> SELECT * FROM DBA_TABLESPACE_GROUPS;

 

GROUP_NAME                            TABLESPACE_NAME

------------------------------ ------------------------------

GRP_TEMP                                  TEMP2

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

SQL> ALTER TABLESPACE  TEMP TABLESPACE GROUP GRP_TEMP;

 

    Tablespace altered.

 

SQL> select * from dba_tablespace_groups;

 

GROUP_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

GRP_TEMP                       TEMP

GRP_TEMP                       TEMP2

从组中移除:

SQL> ALTER TABLESPACE TEMP TABLESPACE GROUP '';

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

ALTER USER DM TEMPORARY TABLESPACE GRP_TEMP;

 

切换临时表空间

1:查看旧临时表空间信息

SELECT * FROM V$TEMPFILE

SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS

2:创建中转的临时表空间

3:添加相应的数据文件

4:切换临时表空间。

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TMP;

5:删除旧的临时表空间数据文件

DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;

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

ALTER USER ODS TEMPORARY TABLESPACE TMP;

 

ALTER USER EDS TEMPORARY TABLESPACE TMP;

 

ALTER USER ETL TEMPORARY TABLESPACE TMP;

 

ALTER USER DM TEMPORARY TABLESPACE TMP;

 

 

收缩临时表空间

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

SQL> ALTER TABLESPACE TEMP SHRINK SPACE KEEP 8G;

 

SQL> ALTER TABLESPACE TEMP SHRINK TEMPFILE '/u01/app/oracle/oradata/GSP/temp02.dbf'

 

 

监控临时表空间

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

SELECT TU.TABLESPACE_NAME                                    AS "TABLESPACE_NAME",

       TT.TOTAL - TU.USED                                    AS "FREE(G)",

       TT.TOTAL                                              AS "TOTAL(G)",

       ROUND(NVL(TU.USED, 0) / TT.TOTAL * 100, 3)            AS "USED(%)",

       ROUND(NVL(TT.TOTAL - TU.USED, 0) * 100 / TT.TOTAL, 3) AS "FREE(%)"

FROM (SELECT TABLESPACE_NAME, 

              SUM(BYTES_USED) / 1024 / 1024 / 1024 USED

       FROM GV_$TEMP_SPACE_HEADER

       GROUP BY TABLESPACE_NAME) TU ,

     (SELECT TABLESPACE_NAME,

              SUM(BYTES) / 1024 / 1024 / 1024 AS TOTAL

       FROM DBA_TEMP_FILES

       GROUP BY TABLESPACE_NAME) TT

WHERE TU.TABLESPACE_NAME = TT.TABLESPACE_NAME;

COL TEMP_FILE FOR A60;

SELECT ROUND((F.BYTES_FREE  + F.BYTES_USED)/1024/1024/1024, 2)                         AS "TOTAL(GB)",

       ROUND(((F.BYTES_FREE  + F.BYTES_USED) - NVL(P.BYTES_USED, 0))/1024/1024/1024,2) AS "FREE(GB)",

       D.FILE_NAME                                                                     AS "TEMP_FILE",

       ROUND(NVL(P.BYTES_USED, 0)/1024/1024/1024, 2)                                   AS "USED(GB)" ,

       ROUND((F.BYTES_USED + F.BYTES_FREE)/1024/1024/1024, 2)                          AS "TOTAL(GB)",

       ROUND(((F.BYTES_USED + F.BYTES_FREE) - NVL(P.BYTES_USED, 0))/1024/1024/1024, 2) AS "FREE(GB)" ,

       ROUND(NVL(P.BYTES_USED, 0)/1024/1024/1024, 2)                                   AS "USED(GB)"

FROM SYS.V_$TEMP_SPACE_HEADER F ,DBA_TEMP_FILES D ,SYS.V_$TEMP_EXTENT_POOL P

WHERE F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME

  AND F.FILE_ID(+) = D.FILE_ID

  AND P.FILE_ID(+) = D.FILE_ID;

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

SELECT TABLESPACE_NAME         AS TABLESPACE_NAME    ,

    BYTES_USED/1024/1024/1024    AS TABLESAPCE_USED  ,

    BYTES_FREE/1024/1024/1024  AS TABLESAPCE_FREE

FROM V$TEMP_SPACE_HEADER

ORDER BY 1 DESC;

查找消耗临时表空间资源比较多的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;

 

参考资料:

http://www.orafaq.com/node/2

http://docs.oracle.com/cd/B28359_01/server.111/b28310/tspaces002.htm#ADMIN11359

ORACLE临时表空间总结的更多相关文章

  1. ORACLE临时表空间

    ORACLE临时表空间总结 2014-10-05 11:35 by 潇湘隐者, 临时表空间概念 临 时表空间用来管理数据库排序操作以及用于存储临时表.中间排序结果等临时对象,当ORACLE里需要用到S ...

  2. ORACLE 临时表空间清理

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

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

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

  4. oracle临时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

    今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace,        b.segfile# ...

  5. Oracle临时表空间语句、作用

    在Oracle数据库中:一个表空间只属于一个数据库使用:而一个数据库可以拥有多个表空间.属于"一对多"的关系 我们对照着mysql来理解. 1.Oracle有表空间,mysql没有 ...

  6. oracle临时表空间操作

    1.查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_name,bytes/1024/1024 file_siz ...

  7. oracle 临时表空间

    环境: OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3. ...

  8. Oracle临时表空间组

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

  9. Oracle 临时表空间 temp表空间切换

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

随机推荐

  1. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  2. Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具 ...

  3. Android开发中的menu菜单

    复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...

  4. 在IIS下部署Thinkphp项目,验证码不能显示的解决办法

    由于公司租用的是虚拟空间,而且用的是IIS服务器,所以部署PHP的时候就出现很多问题:比如昨天就碰到这个问题:在IIS下部署Thinkphp项目,验证码不能显示 这是生成验证码的方法: // 制作专门 ...

  5. Spring加载xsd引起的问题小记

    前言 最近要把之前写好的监控系统加上报警功能,就是通过rpc调用发短信发邮件的服务发送报警信息.发短信发邮件的功能是通过dubbo管理提供的.自然使用这些服务就难免用到spring.而我这又是一个st ...

  6. 数据库设计(1/9):数据元(Data Elements)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年 ...

  7. 企业 SOA 设计(1)–ESB 设计

    最近为公司完成了一个 ESB 的设计.下面简要说明一下具体的设计方案.   企业 SOA 整体方案 在前一篇<SOA.ESB.NServiceBus.云计算 总结>中说到,SOA 是面向服 ...

  8. hostingEnvironment与宿主环境

    定义用来控制应用程序宿主环境的行为的配置设置. 配置如下 <hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAs ...

  9. jQuery弹出深色系层菜单

    低调奢华jQuery弹出层菜单,使用新版的jQuery库,兼容多种浏览器.Demo展示: http://hovertree.com/texiao/layer/3/ 本特效可以作为网站的引导页,使用jQ ...

  10. spice server dpkg-buildpackage 打包编译备忘

    一般我们会通过configure,make 编译.但是为了替换版本的方便需要把他编译成deb的包,而且还需要自定义下包名.下面就记录下我的修改过程. 注:前面关于spice server的编译过程掠过 ...