问题现象
alter table T1 drop partition P_20140829204004
删除历史表分区时候,提示资源正忙,无法删除。持续删不掉
排查:
自己感觉可能是有数据正在插入历史分区,或者说之前有插入这个分区表的操作一直没有完成
1.查v$locked_object 锁,
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
但并没有发现有该表的锁存在
2.查v$access,
发现有大量MULTI-VERSIONED OBJECT、和TABLE类型的acess。不确定对这个操作有没有影响
请各位帮忙分析下排查思路
------解决思路----------------------
感觉可能session已经是killed状态了,但是资源还未释放,数据库有时会这样卡住,出现类似问题,比较少见
实在不行只能重启数据库了,否则只能等待自己释放,貌似没啥其他好的方法了
------解决思路----------------------
查看已经查杀,但是未被释放的锁,然后在os上面彻底释放。
SELECT a.spid,b.sid,b.serial#,b.username FROM v$session b,v$process a WHERE a.addr = b.paddr AND b.status = 'KILLED';
--SELECT spid,osuser,s.program FROM v$session s,v$process p WHERE s.paddr = p.addr AND s.SID = '149';(上面查到的sid)
--在OS上杀死这个进程
--unix中用root身份执行: #-9 12345 (即上面查询出来的 sid/spid)
--用orakill杀死线程(unix也适用),orakill是oracle提供的一个可执行命令,语法为 orakill sid thread
--其中 sid:要杀死的进程属于的实例名 thread:是要杀掉的线程号,即spid/sid