模拟library cache pin并处理

--dbms_lock使用
---安装并赋权
 $ORACLE_HOME/rdbms/admin/dbmslock.sql
 grant execute on dbms_lock to username;
--db版本
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
--sessionA:
---在scoot用户下创建存储过程zyp并执行
SQL> conn scott/123;
Connected.
SQL> create or replace procedure zyp
  2  as
  3  begin
  4  dbms_lock.sleep(100000);
  5  end;
  6  /
Procedure created.
SQL> exec zyp;
--sessionB:
---在sys用户下重新编译存储过程scott.zyp
SQL> show user
USER is "SYS"
SQL> create or replace procedure scott.zyp
  2  as
  3  begin
  4  dbms_lock.sleep(100000);
  5  end;
  6  /

--sessionC:
---查询library cache pin等待事件的相关会话
SQL> set linesize 300
SQL> select saddr,sid,username,event,p1raw from v$session where event='library cache pin';
SADDR           SID USERNAME                       EVENT                                                            P1RAW
-------- ---------- ------------------------------ ---------------------------------------------------------------- ----------------
3D2C0984        145 SYS                            library cache pin                                                000000003D5B1884
---找到持有library cache pin以及等待library cache pin的session
SQL> SELECT s.sid,s.username, kglpnmod "Mode", kglpnreq "Req", SPID "OS Process"
  2    FROM v$session_wait w, x$kglpn p, v$session s, v$process o
  3   WHERE p.kglpnuse = s.saddr
  4     AND kglpnhdl = '&p1raw'
  5     and w.event like '%library cache pin%'
  6     and s.paddr = o.addr;
Enter value for p1raw: 3D5B1884
old   4:    AND kglpnhdl = '&p1raw'
new   4:    AND kglpnhdl = '3D5B1884'
       SID USERNAME                             Mode        Req OS Process
---------- ------------------------------ ---------- ---------- ------------------------
       145 SYS                                     0          3 12884
       143 SCOTT                                   2          0 12823
重新编译存储过程scott.zyp的session是145,从上述结果里我们可以看出来145现在想以Exclusive模式(即Req=3)去持有library cache pin,同时现在持有上述library cache pin的是session 143,且143的持有模式是Share(即Mode=2),也就是说143阻塞了145
      
---获取sid为143的SQL_HASH_VALUE(间隔10s多执行几次)
SQL> select decode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session where sid=143;
DECODE(SQL_HASH_VALUE,0,PREV_HASH_VALUE,SQL_HASH_VALUE)
-------------------------------------------------------
                                             3192006346
SQL> select decode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session where sid=143;
DECODE(SQL_HASH_VALUE,0,PREV_HASH_VALUE,SQL_HASH_VALUE)
-------------------------------------------------------
                                             3192006346
SQL> select decode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session where sid=143;
DECODE(SQL_HASH_VALUE,0,PREV_HASH_VALUE,SQL_HASH_VALUE)
-------------------------------------------------------
                                             3192006346
---根据获得的SQL_HASH_VALUE获得对应的sqltext
SQL> select sql_text from v$sqltext where hash_value='&SQL_HASH_VALUE' order by piece;
Enter value for sql_hash_value: 3192006346
old   1: select sql_text from v$sqltext where hash_value='&SQL_HASH_VALUE' order by piece
new   1: select sql_text from v$sqltext where hash_value='3192006346' order by piece
SQL_TEXT
----------------------------------------------------------------
BEGIN zyp; END;
---kill持有锁的session
SQL> !
[oracle@ora11 ~]$ kill -9 12823
[oracle@ora11 ~]$ exit
exit
---再次查询library cache pin等待消失
SQL> select saddr,sid,username,event,p1raw from v$session where event='library cache pin';
no rows selected

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

转载于:http://blog.itpub.net/28278387/viewspace-749192/

在这个情况下,"impdp library cache pin"是指在使用impdp命令导入数据时,出现了"library cache pin"等待事件。\[2\] "library cache pin"事件是用来管理library cache的并发访问的,当一个session需要修改或检测一个object时,它必须在锁住后取得一个pin。\[2\] 在这个具体的案例中,当执行impdp命令导入数据时,发现所有的DW会话都在等待"library cache lock",并且其中一个session阻塞了自身,形成了一个死锁。\[3\] 这个问题的原因是之前有一次impdp中途终止,再次执行impdp时使用了TABLE_EXISTS_ACTION=REPLACE选项,但是在创建一个TYPE时,另一个TYPE依赖于它,导致无法替换这个TYPE,从而引发了死锁。\[3\] 解决这个问题的办法是先将相关的SCHEMA B删除,然后重新执行impdp命令。这样可以解除死锁并成功导入数据。\[3\] #### 引用[.reference_title] - *1* [一次library cache pin故障的解决过程](https://blog.csdn.net/conglueh193642/article/details/100469095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决library cache pin等待事件](https://blog.csdn.net/weixin_28996271/article/details/116441997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [impdp时卡住,DW等待library cache lock](https://blog.csdn.net/zhou1862324/article/details/46746561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值