如遇临时表无法删除

select object_id from dba_objects where object_name=UPPER('临时表表名');
select sid from v$lock where id1=91037; //91037是上一步查询出的结果
select serial# from v$session where sid=303; //303是上一步查询出的结果
alter system kill session '303,13987'; //13987是上一步查询出的结果  
303 是上面的303然后再删除临时表就可以了

一键处理黑科技SQL

select /*+ rule */
s.inst_id,
LPAD(' ', DECODE(L.XIDUSN, 0, 3, 0)) || L.ORACLE_USERNAME USER_NAME,
O.OWNER,
O.OBJECT_NAME,
O.OBJECT_TYPE,
'alter system kill session ''' || SID || ',' || SERIAL# || ',@' ||
s.INST_ID || ''' immediate;' killsql,
L.LOCKED_MODE,
s.event,
s.module,
s.action
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id = o.object_id
and L.SESSION_ID = S.sid
and l.inst_id = s.inst_id
and o.object_name = upper('&tab_name')
ORDER BY o.object_id, xidusn DESC;

原文地址:https://www.cnblogs.com/kawashibara/p/9737841.html