你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2017-11-24] 来源:Linux社区  作者:maohaiqing0304 [字体: ]

注释:

这里通过  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 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写的不是很智能,但能实现我的目的! **

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-11/148847.htm

linux
相关资讯       Oracle SID  Oracle锁 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款