0
点赞
收藏
分享

微信扫一扫

数据库锁大于600秒的session的抓取

create or replace procedure moni_lock is 

 begin 

   insert /* +append */ 

   into moni_lock_block 

     select seq_mlb.nextval, mkb.* 

       from (select /*+rule*/ 

              do.OWNER || '.' || do.OBJECT_NAME, 

              vs.LAST_CALL_ET, 

              vs.USERNAME, 

              vs.OSUSER, 

              vs.MACHINE, 

              vs.PROGRAM, 

              vs.SID, 

              '(' || vs.SID || ',' || vs.SERIAL# || ')', 

              SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), 

              sysdate, 

              vsq.SQL_TEXT 

               from v$lock          a, 

                    v$session       vs, 

                    v$locked_object vl, 

                    dba_objects     do, 

                    v$sqlarea       vsq 

              where exists (select 1 

                       from v$lock b 

                      where a.ID1 = b.ID1 

                        and a.ID2 = b.ID2 

                        and a.SID <> b.SID) 

                and vs.SQL_ADDRESS = vsq.ADDRESS(+) 

                and a.SID = vs.SID 

                and a.SID = vl.SESSION_ID 

                and vl.OBJECT_ID = do.OBJECT_ID 

                and a.BLOCK = 1 

                and vs.LAST_CALL_ET > 600 

              order by SID) mkb 

      where mkb.sid is not null; 

   commit; 

 end moni_lock;

举报

相关推荐

0 条评论