oracle依赖查询,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 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.

ColumnDatatypeDescription

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 theBLOCKING_INSTANCEandBLOCKING_SESSIONcolumnsNO HOLDER- there is no session blocking this sessionNOT IN WAIT- this session is not in a waitUNKNOWN- the blocking session is unknown

BLOCKING_SESSION

NUMBER

Session identifier of the blocking session. This column is valid only ifBLOCKING_SESSION_STATUShas the valueVALID.

**  SQL写的不是很智能,但能实现我的目的! **

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值