Oracle中TX锁(行锁)监控,抓TX锁的源头

   日期:2020-05-21     浏览:150    评论:0    
核心提示:DBA小伙子,看到这个文章是不是很开心,解决了你一个大麻烦session 1: update emp_bak set ename=沙雕 where empno=7369;session 2: update emp_bak set ename=大长腿 where empno=7369;session 3: update emp_bak set ename=矮丑穷 where empno=7369;运行下面脚本可以抓到哪个SID,哪个SQL_ID,跑的SQL_TEXT锁住了哪个S

各位DBA,看到这篇文章是不是很开心,解决了你一个大麻烦,赶紧把它部署到实时监控程序吧

(咳咳,转载,抄袭不注明文章出处的人可耻哈)

session 1: update emp_bak set ename='沙雕' where empno=7369;

session 2: update emp_bak set ename='大长腿' where empno=7369;

session 3: update emp_bak set ename='矮丑穷' where empno=7369;

运行下面脚本可以抓到哪个SID,哪个SQL_ID,跑的SQL_TEXT锁住了哪个SID,哪个SQL_ID,哪个SQL语句

需要注意的是:如果V$SQLAREA没有保存SQL,可能抓不到,其次,如果系统并发很高,你可能需要再修改下脚本

select sysdate,
       source_sid,
       source_sql_id,
       source_sql_text,
       blocking_sid,
       blocking_sql_id,
       blocking_sql_text
  from (select b.sid source_sid,
               d.sql_id source_sql_id,
               d.sql_text source_sql_text,
               a.sid blocking_sid,
               a.sql_id blocking_sql_id,
               e.sql_text blocking_sql_text,
               (select object_name
                  from dba_objects
                 where object_id = a.row_wait_obj#) object_name
          from v$session     a,
               v$session     b,
               v$transaction c,
               v$sqlarea     d,
               v$sqlarea     e
         where a.event = 'enq: TX - row lock contention'
           and a.blocking_session = b.sid
           and b.taddr = c.addr
           and to_date(c.start_time, 'mm/dd/yy hh24:mi:ss') =
               d.last_active_time
           and d.command_type in (2, 3, 6)
           and b.user# = d.parsing_schema_id
           and a.sql_id = e.sql_id)
 where instr(upper(source_sql_text), object_name) > 0;

脚本运行示例:

SQL> select sysdate,
  2         source_sid,
  3         source_sql_id,
  4         source_sql_text,
  5         blocking_sid,
  6         blocking_sql_id,
  7         blocking_sql_text
  8    from (select b.sid source_sid,
  9                 d.sql_id source_sql_id,
 10                 d.sql_text source_sql_text,
 11                 a.sid blocking_sid,
 12                 a.sql_id blocking_sql_id,
 13                 e.sql_text blocking_sql_text,
 14                 (select object_name
 15                    from dba_objects
 16                   where object_id = a.row_wait_obj#) object_name
 17            from v$session     a,
 18                 v$session     b,
 19                 v$transaction c,
 20                 v$sqlarea     d,
 21                 v$sqlarea     e
 22           where a.event = 'enq: TX - row lock contention'
 23             and a.blocking_session = b.sid
 24             and b.taddr = c.addr
 25             and to_date(c.start_time, 'mm/dd/yy hh24:mi:ss') =
 26                 d.last_active_time
 27             and d.command_type in (2, 3, 6)
 28             and b.user# = d.parsing_schema_id
 29             and a.sql_id = e.sql_id)
 30   where instr(upper(source_sql_text), object_name) > 0;
 
SYSDATE     SOURCE_SID SOURCE_SQL_ID SOURCE_SQL_TEXT                                  BLOCKING_SID BLOCKING_SQL_ID BLOCKING_SQL_TEXT
----------- ---------- ------------- ------------------------------------------------ ------------ --------------- ------------------------------------------------
2020/5/19 1        192 201c4xcdsjaj0  update emp_bak set ename='沙雕' where empno=7369            4 2hpm4yjuut7cg    update emp_bak set ename='矮丑穷' where empno=7369
 
2020/5/19 1        192 201c4xcdsjaj0  update emp_bak set ename='沙雕' where empno=7369          221 36xb1pyv12k56    update emp_bak set ename='大长腿' where empno=7369
 

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服