ITPub博客

首页 > 数据库 > Oracle > oracle查询v$lock锁里面block和被block的sql_text

oracle查询v$lock锁里面block和被block的sql_text

原创 Oracle 作者:zzzzzs 时间:2020-12-18 16:13:19 0 删除 编辑

首先在三个窗口执行SQL,依次执行,后一个窗口涉及到前一个窗口中修改的表


然后执行查询语句

---被阻塞事务的SQL

SELECT DISTINCT B.SID,

                B.SERIAL#,

                B.USERNAME,

                B.MACHINE,

                B.OSUSER,

                B.PROGRAM,

                A.MODULE,

                TO_CHAR(B.LOGON_TIME, 'yyyy-mm-dd hh24:mi:ss'),

                B.EVENT,

                A.SQL_ID,

                A.SQL_TEXT,

                DECODE(C.REQUEST, 0, '', 'BLOCKED') BLOCKED,

                DECODE(C.BLOCK, 0, '', 'BLOCKING') BLOCKING,

                'alter system kill session ' || '''' || B.SID || ',' || B.SERIAL# || '''' || ';' AS FIX_SQL

  FROM V$SQL A, V$SESSION B, V$LOCK C

 WHERE C.TYPE = 'TX'

   AND C.REQUEST <> 0

   AND A.SQL_ID = B.SQL_ID

   AND B.SID = C.SID

UNION ALL

--未提交或回滚的事务,有可能阻塞其他事务的SQL

SELECT DISTINCT ST.SID,

                ST.SERIAL#,

                ST.USERNAME,

                ST.MACHINE,

                ST.OSUSER,

                ST.PROGRAM,

                ST.MODULE,

                TO_CHAR(ST.LOGON_TIME, 'yyyy-mm-dd hh24:mi:ss'),

                ST.EVENT,

                Q.SQL_ID,

                Q.SQL_TEXT,

                DECODE(L.REQUEST, 0, '', 'BLOCKED') BLOCKED,

                DECODE(l.BLOCK, 0, '', 'BLOCKING') BLOCKING,

                'alter system kill session ' || '''' || st.SID || ',' || SERIAL# || '''' || ';' AS FIX_SQL

  FROM V$SQL Q,

       v$lock l,

       (SELECT S.SID,

               S.SERIAL#,

               S.USERNAME,

               S.MACHINE,

               S.OSUSER,

               S.PROGRAM,

               S.MODULE,

               S.EVENT,

               S.LOGON_TIME,

               T.START_DATE

          FROM V$SESSION S, V$TRANSACTION T

         WHERE S.SADDR = T.SES_ADDR) ST

 WHERE ST.START_DATE = Q.LAST_ACTIVE_TIME

   and l.TYPE = 'TX'

   and l.sid = st.sid

   and l.block <> 0

   AND REGEXP_LIKE(LOWER(SQL_TEXT),

                   (SELECT LISTAGG((LOWER(ALL_OBJECTS.OBJECT_NAME)), '|') WITHIN GROUP(ORDER BY OBJECT_NAME)

                      FROM V$LOCKED_OBJECT, ALL_OBJECTS

                     WHERE V$LOCKED_OBJECT.OBJECT_ID = ALL_OBJECTS.OBJECT_ID));


可以看到被block的SQL和block其他事务的事务的SQL

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

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-12-18

  • 博文量
    2
  • 访问量
    1739