Oracle 查詢鎖之間依賴關係的最源頭SID

kunlunzhiying發表於2017-11-22



標題:  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.
v$session 官網註釋  ==   




**  SQL寫的不是很智慧,但能實現我的目的! **黑貓白貓 抓耗子的就是好貓**  等我找到好看的貓也很好抓耗子的時候再和大家解析那隻貓.哈哈!



  【源於本人筆記】 若有書寫錯誤,表達錯誤,請指正...


此條目發表在   SQL、SQL最佳化篇  分類目錄。將固定連線加入收藏夾。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2147617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章