Temp 临时表空间

Temporary Tablespacs 说明

            A temporary tablespace contains transient data that persists only for the duration of a session. No permanent schema objects can reside in a temporary tablespace. The database stores temporary tablespace data in temp files.

            Temporary tablespaces can improve the concurrency of multiple sort operations that do not fit in memory. These tablespaces also improve the efficiency of space management operations during sorts.

            When the SYSTEM tablespace is locally managed, a default temporary tablespace is included in the database by default during database creation. A locally managed SYSTEM tablespace cannot serve as default temporary storage.

-- 本地管理的system 表空间,不能作为默认的临时表空间。

            You cannot make a default temporary tablespace permanent.

            You can specify a user-named default temporary tablespace when you create a database by using the DEFAULT TEMPORARY TABLESPACE extension to the CREATE DATABASE statement. If SYSTEM is dictionary managed, and if a default temporary tablespace is not defined at database creation, then SYSTEM is the default temporary storage. However, the database writes a warning in the alert log saying that a default temporary tablespace is recommended.

-- SYSTEM 表空间是数据字典管理时,并且没有定义默认的临时表空间,那么SYSTEM 表空间会作为默认的temporary storage

            关于表空间的两种类型: locally managed 和 dictionary managed的区别,参考我的Blog:

Oracle 自动段空间管理(ASSM:auto segment space management)

            http://blog.csdn.net/tianlesoftware/archive/2009/12/07/4958989.aspx

            A temporary tablespace contains schema objects only for the duration of a session. Locally managed temporary tablespaces have temporary files (temp files), which are special files designed to store data in hash, sort, and other operations. Temp files also store result set data when insufficient space exists in memory.

Temp files are similar to permanent data files, with the following exceptions:

(1)Permanent database objects such as tables are never stored in temp files.

(2)Temp files are always set to NOLOGGING mode, which means that they never have redo generated for them. Media recovery does not recognize temp files.

(3)You cannot make a temp file read-only.

(4)You cannot create a temp file with the ALTER DATABASE statement.

(5)When you create or resize temp files, they are not always guaranteed allocation of disk space for the file size specified. On file systems such as Linux and UNIX, temp files are created as sparse files. In this case, disk blocks are allocated not at file creation or resizing, but as the blocks are accessed for the first time.

Caution:

            Sparse files enable fast temp file creation and resizing; however, the disk could run out of space later when the temp files are accessed.

(6)Temp file information is shown in the data dictionary view DBA_TEMP_FILES and the dynamic performance view V$TEMPFILE, but not in DBA_DATA_FILES or the V$DATAFILE view.

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

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

Temp 表空间的操作

           

            You cannot use the ALTER TABLESPACE statement, with the TEMPORARY keyword, to change a locally managed permanent tablespace into a locally managed temporary tablespace. You must use the CREATE TEMPORARY TABLESPACE statement to create a locally managed temporary tablespace.

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

ALTER TABLESPACE lmtemp

   ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 18M REUSE;

SQL>ALTER TABLESPACE lmtemp TEMPFILE OFFLINE;

SQL>ALTER TABLESPACE lmtemp TEMPFILE ONLINE;

Note:

            You cannot take a temporary tablespace offline. Instead, you take its tempfile offline. The view V$TEMPFILE displays online status for a tempfile.

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

The ALTER DATABASE statement can be used to alter tempfiles.

The following statements take offline and bring online tempfiles. They behave identically to the last two ALTER TABLESPACE statements in the previous example.

SQL>ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' OFFLINE;

SQL>ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE;

The following statement resizes a tempfile: -- resize 表空间

SQL>ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 18M;

The following statement drops a tempfile and deletes its operating system file:

SQL>ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP

    INCLUDING DATAFILES;

-- drop tempfile 和它的物理文件。

            The tablespace to which this tempfile belonged remains. A message is written to the alert log for the tempfile that was deleted. If an operating system error prevents the deletion of the file, the statement still succeeds, but a message describing the error is written to the alert log.

            -- 当我们把temp 表空间的数据文件文件删除之后,表空间的信息还会存在,但是在alert log里会有错误信息。

            It is also possible to use the ALTER DATABASE statement to enable or disable the automatic extension of an existing tempfile, and to rename a tempfile. See Oracle Database SQL Language Reference for the required syntax.

Note:

            To rename a tempfile, you take the tempfile offline, use operating system commands to rename or relocate the tempfile, and then use the ALTER DATABASE RENAME FILE command to update the database controlfiles.

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

            (1)将tempfile offline       

            (2)在操作系统上重命名tempfile

            (3)使用alter database rename file 更新控制文件。

. 临时表空间满时的处理方法

3.1 添加数据文件

            如果Temporary tablespace还不大,那么我们可以增加一些数据文件。SQL 语句如下:

SQL>ALTERTABLESPACE TEMP ADDTEMPFILE'D:/ORADATA/NEWCCS/TEMP02.DBF'SIZE100MAUTOEXTENDOFF;

            一般来说,Temp tablespace 和 Undo Tablespace 是不建议设置为自增长,设置自增长可能会把磁盘给撑满。

3.2 修改数据文件大小

            可以将原来的数据文件改大一点,如:

SQL>ALTERDATABASETEMPFILE'D:/ ORADATA/NEWCCS/TEMP02.DBF'

RESIZE100M;

. Temp 表空间过大的处理方法

            Temp 表空间过大,会占用很多的磁盘空间,这时候,我们可以用一下2中方法来缩小temp 表空间的大小。

4.1  替换Temp 表空间

4.1.1  查看目前Temp 表空间的信息

SQL> select name from v$tempfile;

NAME

———————————————————————

D:/ORACLE/ORADATA/TEST/TEMP01.DBF

SQL> select username,temporary_tablespace from dba_users;

USERNAME            TEMPORARY_TABLESPACE

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

MGMT_VIEW                  TEMP

SYS                           TEMP

SYSTEM                       TEMP

DBSNMP                       TEMP

SYSMAN                       TEMP

            关于用户这块是要特别注意的,如果我们将默认的Temp 表空间指向其他的名称,那么这些用户的信息就会失效,所以,我们特换时,要么创建一个临时的Temp 表空间中转一下,这样切换之后,我们的temp表空间名称不变,要么改变名称,同时更新相关用户的default temp 表空间。

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

4.1.2 创建中转临时表空间

            UNIFORM specifies that the tablespace is managed with uniform extents of SIZE bytes.The default SIZE is 1 megabyte. All extents of temporary tablespaces are of uniform size, so this keyword is optional for a temporary tablespace. However, you must specify UNIFORM in order to specify SIZE. You cannot specify UNIFORM for an undo tablespace.

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

            If you do not specify AUTOALLOCATE or UNIFORM, then the default is UNIFORM for temporary tablespaces and AUTOALLOCATE for all other types of tablespaces.

更多内容参考:

Oracle 表空间创建参数说明

            http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx

创建SQL 如下:

SQL>CREATETEMPORARYTABLESPACE TEMP2 TEMPFILE

'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/TEMP03.DBF'SIZE10MAUTOEXTENDOFF;

EXTENTMANAGEMENTLOCALUNIFORMSIZE1M;

上面是默认情况,等于一下SQL:

SQL>CREATETEMPORARYTABLESPACE TEMP2 TEMPFILE

'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/TEMP03.DBF'SIZE10MAUTOEXTENDOFF

EXTENTMANAGEMENTLOCALUNIFORMSIZE1M;

4.1.3 修改Temp2为默认临时表空间

SQL>alter database default temporary tablespace temp2;

4.1.4. 删除原来临时表空间

SQL>drop tablespace temp including contents and datafiles;

4.1.5.  重新创建临时表空间

SQL>CREATETEMPORARYTABLESPACE TEMP TEMPFILE

'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/TEMP03.DBF'SIZE10MAUTOEXTENDOFF;

EXTENTMANAGEMENTLOCALUNIFORMSIZE1M;

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

SQL>alter database default temporary tablespace temp;

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

SQL>drop tablespace temp2 including contents and datafiles;

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

SQL>alter user dave temporary tablespace temp; 

4.2 Shrinking a Locally Managed Temporary Tablespace

            Large sort operations performed by the database may result in a temporary tablespace growing and occupying a considerable amount of disk space. After the sort operation completes, the extra space is not released; it is just marked as free and available for reuse.

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

            Therefore, a single large sort operation might result in a large amount of allocated temporary space that remains unused after the sort operation is complete. For this reason, the database enables you to shrink locally managed temporary tablespaces and release unused space.

--可以使用shrink 来释放没有使用的空间。

            (1)You use the SHRINK SPACE clause of the ALTER TABLESPACE statement to shrink a temporary tablespace, or 2the SHRINK TEMPFILE clause of the ALTER TABLESPACE statement to shrink a specific tempfile of a temporary tablespace. Shrinking frees as much space as possible while maintaining the other attributes of the tablespace or tempfile. The optional KEEP clause defines a minimum size for the tablespace or tempfile.

            Shrinking is an online operation, which means that user sessions can continue to allocate sort extents if needed, and already-running queries are not affected.

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

示例一:

            The following example shrinks the locally managed temporary tablespace lmtmp1 to a size of 20M.

            SQL>ALTER TABLESPACE lmtemp1 SHRINK SPACE KEEP 20M;

示例二:

            The following example shrinks the tempfile lmtemp02.dbf of the locally managed temporary tablespace lmtmp2. Because the KEEP clause is omitted, the database attempts to shrink the tempfile to the minimum possible size.

            SQL>ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE '/u02/oracle/data/lmtemp02.dbf';

 

附注:

1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)
select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看

2、缩小临时表空间大小
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF' resize 100M;

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

4、创建临时表空间
SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;

5、更改系统的默认临时表空间:
--查询默认临时表空间
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
--修改默认临时表空间
alter database default temporary tablespace temp1;
所有用户的默认临时表空间都将切换为新的临时表空间:
select username,temporary_tablespace,default_ from dba_users;
--更改某一用户的临时表空间:
alter user scott temporary tablespace temp;

6、删除临时表空间
删除临时表空间的一个数据文件:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;
删除临时表空间(彻底删除):
SQL> drop tablespace temp1 including contents and datafiles cascade constraints;

7、查看临时表空间的使用情况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
         GROUP BY tablespace_name) temp_used,
       (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total
          FROM dba_temp_files
         GROUP BY tablespace_name) temp_total
WHERE temp_used.tablespace_name = temp_total.tablespace_name

8、查找消耗资源比较的sql语句
Select se.username,
       se.sid,
       su.extents,
       su.blocks * to_number(rtrim(p.value)) as Space,
       su.tablespace,
       su.segtype,
       s.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

9、查看当前临时表空间使用大小与正在占用临时表空间的sql语句
select sess.SID, sort.segtype, sort.blocks*8/1000 "MB", sql.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 sort.blocks desc;

10、临时表空间组介绍
1)创建临时表空间组:
create temporary tablespace tempts1 tempfile '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;
create temporary tablespace tempts2 tempfile '/home/oracle/temp2_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 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

11、对临时表空间进行shrink(11g新增的功能)
--将temp表空间收缩为20M
alter tablespace temp shrink space keep 20M;
--自动将表空间的临时文件缩小到最小可能的大小
ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’;

临时表空间作用
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。
网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。

临时表空间的主要作用:
  索引create或rebuild;
  Order by 或 group by;
  Distinct 操作;
  Union 或 intersect 或 minus;
  Sort-merge joins;
  analyze。

v$sort_segment字典中,我们可能看到temp的详细的使用情况,

SQL> desc v$sort_segment

v$sort_usage将会提供目前操作的会话.

SQL> desc v$sort_usage;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值