ITPub博客

首页 > 数据库 > Oracle > ORACLE临时表空间总结

ORACLE临时表空间总结

Oracle 作者:bitifi 时间:2015-09-22 10:45:14 0 删除 编辑

临时表空间概念

 

临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当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的介绍如下


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,如下图所示:

clip_image001

 

管理临时表空间

 

创建临时表空间

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

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.
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30496894/viewspace-1805921/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-09-21

  • 博文量
    211
  • 访问量
    276567