概述
记录一次生产环境中同事在做imp导入某张表的时候窗口不小心关闭了,导致imp进程中断。在针对该表的操作提示资源繁忙,下面主要提供下整体的解决思路。
误操作命令:
imp xx/xx file=t_ksgl_sjmbtxglb.dmp ignore=y full=y
问题:由于在imp导入某个表的时候会话窗口不小心关了,然后想要drop表重来,但是数据库会话级别删不了。
解决过程:
1、查询数据库中的锁
select /*+rule*/s.sid,p.spid,l.type,round(max(l.ctime)/60,0) lock_min,s.sql_id,s.USERNAME,b.owner,b.object_type,b.object_name from v$session s, v$process p,v$lock l,v$locked_object o,dba_objects b where o.SESSION_ID=s.sid and s.sid=l.sid and o.OBJECT_ID=b.OBJECT_ID and s.paddr = p.addr and l.ctime >100 and l.type in ('TX','TM','FB') group by s.sid,p.spid,l.type,s.sql_id,s.USERNAME,b.owner,b.object_type,b.object_name order by 9,1,3,4;
这里可以发现sid是3570,spid是118034(实际上操作系统进程就是118034)
2、查看相关信息
SELECT 'kill -9 ' || p.spid, /*p.spid,p.pid,*/ s.sid, s.username, s.machine, s.sql_hash_value, s.last_call_et 秒, s.last_call_et / 60 运行时间, s.client_info, p.program "OSProgram