当前位置: DBARoad > 故障案例 > 文章正文

DROP TEMP TS遭遇enq: TS - contention

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接:http://www.dbaroad.me/archives/2009/07/drop_temp_wait_enq_ts.html

在DROP TEMP表空间时,会话长时间不能结束,查看等待事件为:

enq: TS - contention
 
SQL> select name, parameter1, parameter2, parameter3,wait_class
  2    from v$event_name
  3   where name ='enq: TS - contention';
 
NAME                 PARAMETER1   PARAMETER2      PARAMETER3  WAIT_CLASS
-------------------- ------------ --------------- ----------- ----------
enq: TS - contention name|mode    tablespace ID   dba         Other

找出持有该表空间锁的会话,发现是smon进程,等待事件是smon timer,是个空闲等待事件:

SQL> r
  1  SELECT   DECODE (request, 0, 'Holder: ', 'Waiter: ') status, SID,
  2           inst_id,ctime, id1, id2, lmode, request, TYPE
  3      FROM gv$lock
  4     WHERE (id1, id2, TYPE) IN (SELECT id1, id2, TYPE
  5                                  FROM gv$lock
  6                                 WHERE request > 0)
  7* ORDER BY id1, request
 
STATUS      SID INST_ID    CTIME    ID1    ID2   LMODE    REQUEST TY
-------- ------ ------- -------- ------ ------ ------- ---------- --
Holder:    1099       1  1843932      3      1       3          0 TS
Waiter:     859       1      151      3      1       0          6 TS
 
SQL> select sid,username,type,PROCESS,PROGRAM,EVENT
  2  from v$session where sid=1099;
 
       SID USERNAME   TYPE       PROCESS      PROGRAM         EVENT
---------- ---------- ---------- ------------ --------------- -----------
      1099            BACKGROUND 2494         oracle@jhsit01  smon timer
 
SQL> select name, parameter1, parameter2, parameter3,wait_class
  2    from v$event_name
  3   where name = 'smon timer';
 
NAME              PARAMETER1    PARAMETER2   PARAMETER3  WAIT_CLASS
----------------- ------------- ------------ ----------- ----------
smon timer        sleep time    failed                   Idle

估计是SMON进程正在回收、清理TEMP表空间之类的操作。当时直接了重启数据库,事后想想,还有以下两步可以尝试:
1、查看TEMP表空间的使用情况,找出使用TEMP表空间会话,看看是否可以杀掉:

select TABLESPACE_NAME, TOTAL_EXTENTS, USED_EXTENTS, FREE_EXTENTS
  from v$sort_segment;
 
SELECT se.username username,
       se.SID sid,
       se.serial# serial#,
       se.status status,
       se.sql_hash_value,
       se.prev_hash_value,
       se.machine machine,
       su.TABLESPACE tablespace,
       su.segtype,
       su.CONTENTS CONTENTS 
FROM v$session se,
     v$sort_usage su
WHERE se.saddr=su.session_addr;

2、设置DROP_SEGMENTS事件,手工清理TEMP表空间:

alter session set events 'immediate trace name DROP_SEGMENTS level TS#+1';

— The End —

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |