ITPub博客

首页 > 数据库 > Oracle > Oracle 查找锁之间依赖关系的最源头SID

Oracle 查找锁之间依赖关系的最源头SID

Oracle 作者:kunlunzhiying 时间:2017-11-22 16:15:25 0 删除 编辑



标题:  Oracle 查找锁之间依赖关系的最源头SID 

作者:lōττéry©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]



注释:

  昨天通过 
Oracle 查询锁之间的依赖关系 的SQL 查询生产环境锁;

  由于 Oracle 查询锁之间的依赖关系 查询数据比较全(例如:锁和被锁关系,锁的对象,等待事件,操作锁的客户端,会话跑的sql,等状态.)

  若 在 每个SQL锁的对象较多、操作人较多、且最源头锁对象的sid 不断变化时;

  想通过 Oracle 查询锁之间的依赖关系 再右眼查到最源头锁sid比较费事。
  
  所以特写如下sql!




实现 Oracle 查找锁之间依赖关系的最源头SID  (首先得到锁的SID),再通过SID找sql查问题..


*** 思路
    
    1、证明有锁,需要满足v$session.BLOCKING_SESSION[阻塞会话的SID] IS NOT NULL and BLOCKING_SESSION_STATUS = 'VALID'条件;

    2、阻塞会话的SID 不在 SID 中就是最源头的SID (首先得到锁的SID);

    3、注意:v$session单实例,gv$session 多节点;
  
 

SQL:

WITH LOCK_1 AS
 ( SELECT DISTINCT S.INST_ID, S.SID, S.BLOCKING_SESSION, S.LAST_CALL_ET
    FROM GV$SESSION S
   WHERE S.BLOCKING_SESSION IS NOT NULL
     and BLOCKING_SESSION_STATUS = 'VALID' )
SELECT DISTINCT BLOCKING_SESSION
  FROM LOCK_1
  WHERE BLOCKING_SESSION NOT IN ( SELECT SID FROM LOCK_1);




本文用到的2个字段:
V$SESSION displays session information for each current session.
Column Datatype Description
SID NUMBER Session identifier
BLOCKING_SESSION_STATUS VARCHAR2(11) This column provides details on whether there is a blocking session:
VALID - there is a blocking session, and it is identified in the BLOCKING_INSTANCEand BLOCKING_SESSION columns
NO HOLDER - there is no session blocking this session
NOT IN WAIT - this session is not in a wait
UNKNOWN - the blocking session is unknown
BLOCKING_SESSION NUMBER Session identifier of the blocking session. This column is valid only ifBLOCKING_SESSION_STATUS has the valueVALID.




**  SQL写的不是很智能,但能实现我的目的! **黑猫白猫 抓耗子的就是好猫**  等我找到好看的猫也很好抓耗子的时候再和大家解析那只猫.哈哈!



  【源于本人笔记】 若有书写错误,表达错误,请指正...


此条目发表在   SQL、SQL优化篇  分类目录。将固定连接加入收藏夹。


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

请登录后发表评论 登录
全部评论
Oracle搬砖侠,略懂MySQL 、MongoDB运维,积极向自动化,智能化、平台化运运维方向努力。

注册时间:2014-07-28

  • 博文量
    666
  • 访问量
    255565