您的位置:首页 > 数据库 > Oracle

oracle 临时表空间-再续

2013-11-18 22:45 295 查看

   oracle 临时表空间-再续

 

     今天是2013-11-18,前段时间我同事数据库出现了一次临时表空间不足问题,今天对临时表空间在复习一下,记录一下笔记。

之前写过临时表空间的日志:

http://blog.csdn.net/xiaohai20102010/article/details/10431903

 第一:shrink 临时表空间:

当我们执行一个很大的排序操作语句的时候,如果内存排序空间不足,那么就会占用临时表空间以满足需求,但是当执行完毕后,临时表空间不会自动的是否空间,而是将占用的空间变为free可以available reuse。但是我可以使用shrink space将临时表空间进行空间释放,或是使用shrink tempfile对临时文件大小进行resize。

eg:

SQL> alter tablespace temp shrink space;

Tablespace altered.

SQL> select * from dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE

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

TEMP                                   7331840         5234688    3145728

SQL>

可以看出在线shrink的过程中会根据使用的最低占用空间大小进行分配,操作过程不影响正常使用,可以使用keep字段对表空间指定最小大小。

如:

alter tablespace temp shrink space keep 100M;

对tempfile进行shrink操作如下:

SQL> alter tablespace temp shrink tempfile '/opt/app/oracle/oradata/RHYS/temp01.dbf'; 

Tablespace altered.

SQL>  alter tablespace temp shrink tempfile '/opt/app/oracle/oradata/RHYS/temp01.dbf' keep 20M;

Tablespace altered.

SQL>

第二:查看临时表空间内容

在此总结一下11g临时表空间常用视图:

dba_temp_files(查看临时表空间文件信息)

v$temp_files(动态查看临时表空间文件信息)

dba_temp_space_free(查看临时表空间空闲大小)

v$sort_segment(查看排序段信息)

v$tempseg_usage(查看临时段的使用信息)

eg:

 

SQL> select * from dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE

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

TEMP                                   7331840         5234688    5242880

SQL>

查看哪些用户占用了临时表空间:

  1* select username,user,session_addr,session_num,sqladdr,sql_id ,segtype,contents from v$tempseg_usage

USERNAME                       USER       SESSION_ADDR     SESSION_NUM SQLADDR          SQL_ID        SEGTYPE   CONTENTS

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

SYS                            SYS        000000007B4836E0           5 000000007BC35AF0 0fr8zhn4ymu3v DATA      TEMPORARY

SQL>

查看哪些用户占用临时段,并查处执行的sql信息是什么:

col sql_text for a70

col username for a20

col program for a30

col osuser for a10

col allo_M for 99999999

select distinct(s.sid),s.serial#,s.username,s.osuser,s.program,t.segfile#,t.segtype,t.segblk#,(t.blocks*8082/1024/1024) allo_M,x.sql_text from v$session s,v$sql x,v$tempseg_usage t

where s.saddr=t.session_addr and t.sql_id=x.sql_id and x.sql_text not like 'select distinct(s.sid),s.serial#%';

查看排序操作使用情况参考v$sort_segment视图。

 

That‘s all!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: