ITPub博客

首页 > 数据库 > Oracle > Oracle Edit product卡死不动,引起的等待事件‘library cache pin’解决方案

Oracle Edit product卡死不动,引起的等待事件‘library cache pin’解决方案

Oracle 作者:dbhelper 时间:2015-01-17 23:04:05 0 删除 编辑


标题: Oracle Edit product卡死不动,引起的等待事件‘library cache pin’解决方案

作者:lōττéry©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]



注释:
 
前段时间Edit product卡死不动,根据视图v$session_wait获取等待事件为:‘library cache pin’
  关于‘library cache pin’ 参看博客:library cache lock和library cache pin到底是什么 、library cache pin等待事件
  本文重点介绍如果遇到‘library cache pin’ 等待的解决方案


--查询哪些会话有关于library cache pin/library cache lock 等待事件的信息【会话状态/进程/SID/用户..等】


SQL> SELECT C.SPID,A.SID, A.SERIAL#, A.USERNAME, A.STATUS /*进程状态*/,A.OSUSER,A.MACHINE,A.PROGRAM,B.ADDR
            FROM V$SESSION A, X$KGLPN B,V$PROCESS C
            WHERE A.SADDR = B.KGLPNUSE
            AND C.ADDR=A.PADDR
            AND B.KGLPNMOD <> 0
            AND B.KGLPNHDL IN
       (SELECT P1RAW FROM V$SESSION_WAIT WHERE upper(EVENT) LIKE upper('LIBRARY CACHE%'))
   /*AND A.STATUS= 'KILLED'*/; 
 
SPID   SID    SERIAL# USERNAME           STATUS   OSUSER             MACHINE                            PROGRAM                   ADDR
----- ---- ---------- ------------------ -------- -------------------- ---------------------------------- -------------------------- ----------------
11949  963       2079 MIDTEST_3          KILLED   Administrator      WORKGROUP\2012-20121008 OS         plsqldev.exe              00007F85060DC8B8
 
SQL>


若status=active,确认不适用后 可以选择用Oracle kill 或者OS kill 来释放资源

Oracle kill
alter system kill session '963,2079' immediate;
alter system kill session '963,2079' ;


操作系统kill [由于本环境status=killed,所以直接OS kill 如下]
[root@xcd ~]# ps -ef| grep 13309
oracle   11949       1  0 13:19 ?        00:00:00 oraclekfdb (LOCAL=NO)
root     15263 15236  0 15:38 pts/0    00:00:00 grep 11949 
[root@xcd ~]# kill -9 11949
[root@xcd ~]# ps -ef| grep 11949
root     15259 15236  0 15:38 pts/0    00:00:00 grep 11949
[root@xcd ~]#
 
SQL> select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status= 'KILLED';
 
SPID           SID    SERIAL# USERNAME
---------------- ---------- ------------------------------
 
SQL>

 再重新编译 问题解决了~



--多个会话同时操作可能引起的报错【 ORA-04021: 等待锁定对象  时发生超时】
--如果是多个的话查询如下SQL
select * from v$access where object = 'IES_INV_MTL_OUT_APPLY' ;
select kglnaown, kglnaobj, kglnadlk
  from x$kglob t, v$session_wait sw
  where t.kglhdadr = sw.p1raw
   and sw.sid in (select sid
                    from v$session a, x$kglpn b
                   where a.saddr = b.kglpnuse
                     and b.kglpnmod <> 0
                     and b.kglpnhdl in
                         ( select p1raw
                            from v$session_wait
                           where event like 'library cache%'));
  


此条目发表在 Oracle 分类目录。将固定连接加入收藏夹。

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

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

注册时间:2017-10-14

  • 博文量
    651
  • 访问量
    392210