ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Cancel 删除 正在使用的临时表空间的操作 将导致异常

Cancel 删除 正在使用的临时表空间的操作 将导致异常

原创 Linux操作系统 作者:westzq1984 时间:2013-08-29 17:56:47 0 删除 编辑
系统的默认临时表空间是无法删除的,但是用户的默认临时表空间是可删除的
但是,如果删除时,这个表空间还被其他会话使用,那么删除的语句就会在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博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-769625/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    957705