您的位置:首页 > 其它

发现个library cache LOCK AND library cache pin 等待事件

2010-04-09 19:37 471 查看
首先 库位分析库 ORACLE 10G R 2 01

其次 开发了两个过程暂时称为属性过程和交易过程。 从同一个大表获取相关的数据 然后插入不同的表。应该说该两个过程不锁相关对象!

其二 这两个过程测试中都跑的好好的。



后来用TOAD 把过程的运行日志表

ALTER TABLE BA.T_BASE_SP_RUNLOG CACHE;

ALTER TABLE BA.T_BASE_SP_RUNLOG STORAGE ( BUFFER_POOL KEEP );



没多久 其中从EM看到 已经有个过程在运行中 它是属性过程。再启动交易过程 从EM上发现 属性过程既然阻塞了交易过程。

交易过程等待事件 LIBCACHE LOCK AND library cache pin



属性过程 则是DB FILE 顺序读!



这就很纳闷了,它们虽然同时访问流水表,只是SELECT而已,并不能发生冲突啊!

下面语句看被锁定的对象

select xidusn, object_id, session_id, locked_mode from v$locked_object;



属性过程是151会话 在做 update b set time=(select min(addtime) from user_pay_bak where f_username=:B )

只是锁定了B表而已



select * from v$session_wait where sid=64 交易过程 library cache LOCK



交易过程 正在等待 对象 P_BASE_DAY_I_SPRUN_LOG

SELECT KGLNAOWN,KGLNAOBJ

FROM x$kglob

WHERE kglhdadr in( select P1RAW from v$session_wait where sid=64);



而它只是把过程运行的信息写进日志表的过程而已!





属性过程:



update b set time=(select min(addtime) from user_pay_bak where f_username=:B )

前面有四个事务

1 INSERT INTO.... COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);



2 FOR CUR() LOOP UPDATE B SET CUSTIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);

3 FOR CUR() LOOP UPDATE B SET EMAILTIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);

4 FOR CUR() LOOP UPDATE B SET MOBILETIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);



既然已经执行到第五步:update b set time=(select min(addtime) from user_pay_bak where f_username=:B )

那么前面四个应该都执行完了,同时也调用了写日志过程





难道写日志过程 被 属性过程给霸占不释放吗?

用TOAD 释放运行日志表 还是不行,再把交易表终止,再运行 也不行。

最后终止属性过程,然后再运行就OK 了





难道表被CACHE 。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: