在做imp导入时,迟迟未能结束,查询imp导入的sid当前操作时,发现已经在做统计分析步骤,等待事件为library cache lock,通过以下步骤,查到阻塞进程的操作为analyze table,为何会造成阻塞,还得继续研究。解决阻塞的办法如下:

通过查询x$kgllk,找阻塞者的saddr信息,进而找到会话信息,然后将相关会话杀掉。
首先查到等待事件为library cache lock的会话的SID和SADDR:
select sid,saddr from v$session where sid=340;

SID SADDR
———- —————-
340 C00000006B996770
接着根据SADDR的值,查询:x$kgllk 数据字典,查询阻塞者的SADDR信息:
select kgllkses saddr, kgllkhdl handle, kgllkmod mod, kglnaobj object
from x$kgllk lock_a
where kgllkmod > 0
and exists (select lock_b.kgllkhdl
from x$kgllk lock_b
where kgllkses = '&SADDR'
and lock_a.kgllkhdl = lock_b.kgllkhdl
and kgllkreq > 0);

SADDR HANDLE MOD OBJECT
—————- —————- ———- ————–
C00000006B991D80 C000000081ED5C58 table_name
阻塞者的会话的SADDR为:C00000006B991D80,接着根据这个去查v$session,从而可以查到阻塞者的SID
select sid,saddr from v$session where saddr='C00000006B991D80';
根据得到的sid,查询当前该sid进行的操作
SELECT sql_text,sql_id
FROM v$sqltext a
WHERE a.hash_value = (SELECT sql_hash_value
FROM v$session b
WHERE b.SID = '&sid')
ORDER BY piece ASC
/
判断阻塞的会话性质,通过kill session解决阻塞