系统的默认临时表空间是无法删除的,但是用户的默认临时表空间是可删除的
但是,如果删除时,这个表空间还被其他会话使用,那么删除的语句就会在TS上等待
就算中断了删除的会话,后续也会导致一些其他SQL语句出现异常。
如下:explain plan竟然会去请求TS6的锁定,而柱塞者是SMON
SMON以模式3持有这个临时表空间上的锁定是正常性能。
SQL> @we
SID NAME OSUSER PROGRAM EVENT P1P2 BLKING STATE SQL_ID OPCOD
----- -------- -------- --------------- ------------------------- -------------------- -------- ---------- --------------- -----
10 CTAIS2 oracle sqlplus@zhangqi enq: TS - contention 1414725638.7 1.66.V WAITING 9kmmjw9ab10za Expla
196 SYS oracle sqlplus@zhangqi SQL*Net message from clie 1650815232.1 WAITED SHO 4tzjv0x70g3hs Query
SQL> select sql_text from v$sql where sql_id='9kmmjw9ab10za';
SQL_TEXT
-------------------------------------------------
explain plan for select * from dual
SQL> select program from v$session where sid=66;
PROGRAM
---------------
oracle@zhangqiaoc (SMON)
SQL> select * from v$lock where type='TS';
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ----- -- ---------- ---------- ---------- ---------- ---------- ----------
000000009F112450 000000009F1124A8 66 TS 8 1 3 0 11834 0
000000009F1137C0 000000009F113818 66 TS 7 1 3 0 6095 1
000000009D256378 000000009D256450 10 TS 7 1 0 6 93 0
SQL> select * from v$lock where sid=10;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ----- -- ---------- ---------- ---------- ---------- ---------- ----------
000000009F1130A8 000000009F113100 10 TO 5124 2 3 0 113 0
000000009F113188 000000009F1131E0 10 AE 100 0 4 0 461 0
000000009F113348 000000009F1133A0 10 TT 7 16 4 0 113 0
000000009F113440 000000009F113498 10 TO 5124 1 3 0 113 0
00002AE948861E98 00002AE948861EF8 10 TM 5124 0 3 0 113 0
000000009D256378 000000009D256450 10 TS 7 1 0 6 113 0
000000009D256378 000000009D2564B8 10 SS 7 1 6 0 113 0
并且,卡住的会话还在临时表空间上一直持有SS6锁定,可能影响后续的很多动作
解决的办法是,切换该用户的临时表空间到另外一个临时表空间
KILL已经被柱塞的会话
删除前,一定要查询v$sort_usage,确认已经没有会话在使用准备删除的临时表空间
PS:20130904 测试发现
DROP TABLESPACE语句一旦发出,就算中断也需要清理
后续新运行的会话,将发起清理(可能是他做,也可能是请求SMON做)
但是DROP TBS以前的占用临时表空间会话未退出,将阻塞这次清理,从而发生问题
操作LOB.XML的动作,都可能导致TEMP段被长期持有
解决的办法,也可以是查询v$sort_usage,把使用这个TEMP表空间的会话干掉。然后等PMON回收掉这些会话的资源
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-769625/
,如需转载,请注明出处,否则将追究法律责任。