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

Posted 奋斗的小鸟_oracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 查找锁之间依赖关系的最源头SID相关的知识,希望对你有一定的参考价值。

注释:
  昨天通过    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 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.

v$session 官网注释  ==   http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3016.htm#REFRN30223


以上是关于Oracle 查找锁之间依赖关系的最源头SID的主要内容,如果未能解决你的问题,请参考以下文章

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

ARP攻击的IP源头怎么查找?

基于MySQL监控利器-Innotop快速定位mysql数据库阻塞事务源头SQL

16lock

简单几招捕获Oracle递归SQL调用源头

Oracle:如何循环并查找表之间的依赖/依赖关系,以便为每个表执行插入/更新操作?