ITPub博客

首页 > Linux操作系统 > Linux操作系统 > library cache lock问题处理

library cache lock问题处理

原创 Linux操作系统 作者:7sba6531 时间:2012-09-26 23:34:33 0 删除 编辑

在做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' /* blocked session */
           and lock_a.kgllkhdl = lock_b.kgllkhdl
           and kgllkreq > 0);

SADDR             HANDLE             MOD           OBJECT
 —————-  —————-   ———-    ————–
 C00000006B991D80  C000000081ED5C58   3             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解决阻塞

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15115188/viewspace-745158/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2012-08-28

  • 博文量
    10
  • 访问量
    35497