檢查Oracle的鎖狀態並清除問題會話

hooca發表於2014-09-29
當多個會話想同時訪問一行資料,就有可能發生鎖的爭用。

查詢會話鎖定狀態:


點選(此處)摺疊或開啟

  1. select /*+ ordered */ username, v$lock.sid, trunc(id1/power(2,16)) rbs,
  2. bitand(id1,to_number('ffff','xxxx'))+0 slot,
  3. id2 seq, lmode, request
  4. from v$lock, v$session
  5. where v$lock.type = 'TX'
  6. and v$lock.sid = v$session.sid;

USERNAME          SID        RBS       SLOT        SEQ      LMODE    REQUEST
---------- ---------- ---------- ---------- ---------- ---------- ----------
SCOTT             146          4         47      21557          0          6
SCOTT             150          4         47      21557          6          0
SCOTT             161          4         47      21557          0          6

LMODE表示當前獲得的鎖,REQUEST表示想要獲得的鎖。
  • 0 - none

  • 1 - null (NULL)

  • 2 - row-S (SS)

  • 3 - row-X (SX)

  • 4 - share (S)

  • 5 - S/Row-X (SSX)

  • 6 - exclusive (X)

從以上結果可以看出,會話150獲得了鎖,會話146和161進入等待。也可以檢視以下檢視獲得結果:


點選(此處)摺疊或開啟

  1. SELECT sid, blocking_session, username, blocking_session_status
  2. FROM v$session
  3. WHERE username='SCOTT'
  4. ORDER BY blocking_session;

SID BLOCKING_SESSION USERNAME   BLOCKING_SESSION_STATUS
---------- ---------------- ---------- -----------------------
146              150 SCOTT      VALID
161              150 SCOTT      VALID
150                  SCOTT      NO HOLDER

VALID            被BLOCK
NO HOLDER    沒有被BLOCK


如果要關閉會話:


點選(此處)摺疊或開啟

  1. alter system kill session '11,18';
單引號中分別是,'SID, SERIAL#',這兩個都是V$SESSION中的列。


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

相關文章