首页 > 数据库 > Oracle > library cache pin模拟与处理
会话一:
SID AUDSID ---------- ---------- 237 9013 create or replace procedure dummy is begin null; end; /
begin Dummy; Dbms_lock.sleep(1000); End; /
知识拓展:
DBMS_LOCK.SLEEP (seconds IN NUMBER); 单位为“秒”
会话二:
SID AUDSID ---------- ---------- 19 36753 alter procedure dummy compile;
卡住
查看当前锁情况:
SELECT RPAD('+', LEVEL, '-') || sid || ' ' || sess.module session_detail,
blocker_sid,
in_wait_secs,
wait_event_text,
object_name,
RPAD(' ', LEVEL) || sql_text sql_text
FROM v$wait_chains c
LEFT OUTER JOIN dba_objects o ON (row_wait_obj# = object_id)
JOIN v$session sess
USING (sid)
LEFT OUTER JOIN v$sql sql ON (sql.sql_id = sess.sql_id AND
sql.child_number = sess.sql_child_number)
CONNECT BY PRIOR sid = blocker_sid
AND PRIOR sess_serial# = blocker_sess_serial#
AND PRIOR INSTANCE = blocker_instance
START WITH blocker_is_valid = 'FALSE';
查看造成问题的数据库对象(一般为存储过程):
SELECT * FROM v$session_wait WHERE event = 'library cache pin' ORDER BY p1raw;
P1 handle address
P2 pin address
P3 100*mode+namespace
SELECT kglnaown "Owner", kglnaobj "Object" FROM x$kglob WHERE kglhdadr = 'p1raw';
SELECT DECODE (lob.kglobtyp, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER', 4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE', 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE', 11, 'PACKAGE BODY', 12, 'TRIGGER', 13, 'TYPE', 14, 'TYPE BODY', 19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB', 22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE', 28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE', 32, 'INDEXTYPE', 33, 'OPERATOR', 34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION', 40, 'LOB PARTITION', 41, 'LOB SUBPARTITION', 42, 'MATERIALIZED VIEW', 43, 'DIMENSION', 44, 'CONTEXT', 46, 'RULE SET', 47, 'RESOURCE PLAN', 48, 'CONSUMER GROUP', 51, 'SUBSCRIPTION', 52, 'LOCATION', 55, 'XML SCHEMA', 56, 'JAVA DATA', 57, 'SECURITY PROFILE', 59, 'RULE', 62, 'EVALUATION CONTEXT', 'UNDEFINED') object_type, lob.KGLNAOBJ object_name, pn.KGLPNMOD lock_mode_held, pn.KGLPNREQ lock_mode_requested, ses.sid, ses.serial#, ses.username FROM x$kglpn pn, v$session ses, x$kglob lob, v$session_wait vsw WHERE pn.KGLPNUSE = ses.saddr AND pn.KGLPNHDL = lob.KGLHDADR AND lob.kglhdadr = vsw.p1raw AND vsw.event = 'library cache pin' ORDER BY lock_mode_held DESC
咋办捏,杀会话
alter system kill session '237,9013' immediate;
会话一:
SQL> begin Dummy; 2 3 Dbms_lock.sleep(1000); 4 End; 5 / begin * ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 16808 Session ID: 237 Serial number: 9013
会话二:
SQL> alter procedure dummy compile; Procedure altered.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3009977/ ,如需转载,请注明出处,否则将追究法律责任。