ORACLE鎖的總結

楊奇龍發表於2010-06-25

整理了一下ORACLE鎖的東西
------------------------------------------------------------------------------------------------------------
v$lock檢視的各個列及其說明
ADDR
    RAW(4)
    在記憶體中鎖定的物件的地址

KADDR
    RAW(4)
    在記憶體中鎖的地址

SID
    NUMBER
    保持或申請鎖的會話的標識號

TYPE
    VARCHAR2(2)
    鎖的型別。
    TX=行鎖或事務鎖;TM=表鎖或DML鎖;UL=PL/SQL使用者鎖

ID1
   NUMBER
   鎖的第1標識號。
   如果鎖的型別是TM,該值表示將要被鎖定的物件的標識號;
   如果鎖的型別是TX,該值表示撤銷段號碼的十進位制值

ID2
   NUMBER
   鎖的第2標識號。
   如果鎖的型別是TM,該值為0;
   如果鎖的型別是TX,該值表示交換次數

LMODE
   NUMBER
   會話保持的鎖的模式。
   0=None;1=Null;2=Row-S (SS);3=Row-X (SX);
   4=Share;5=S/Row-X (SSX);6=Exclusive

REQUEST
   NUMBER
   會話申請的鎖的模式。與LMODE中的模式相同

CTIME
   NUMBER
   以秒為單位的,獲得當前鎖(或轉換成當前鎖的模式)以來的時間

BLOCK
   NUMBER
   當前鎖是否阻塞另一個鎖。
   0=不阻塞;1=阻塞


V$LOCKED_OBJECT檢視的各個列及其說明

列名
資料型別
說明

XIDUSN
    NUMBER
    撤銷段號碼

XIDSLOT
    NUMBER
    被鎖定的物件在撤銷段中的位置

XIDSQN
    NUMBER
   序列號

OBJECT_ID
    NUMBER
    被鎖定的物件的標識號

SESSION_ID
    NUMBER
    會話的標識號

ORACLE_USERNAME
    VARCHAR2(30)
    Oracle使用者名稱

OS_USER_NAME
    VARCHAR2(30)
    作業系統使用者名稱

PROCESS
    VARCHAR2(12)
    作業系統程式標識號

LOCKED_MODE
    NUMBER
    物件被鎖定的模式。
    0=None;1=Null;2=Row-S (SS);3=Row-X (SX);
    4=Share;5=S/Row-X (SSX);6=Exclusive

DBA_LOCKS檢視的各個列及其說明

列名
資料型別
說明

SESSION_ID
    NUMBER
    保持或申請鎖的會話的標識號

LOCK_TYPE
    VARCHAR2(26)
    鎖的型別

MODE_HELD
    VARCHAR2(40)
    保持的鎖的模式

MODE_REQUESTED
    VARCHAR2(40)
    申請的鎖的模式

LOCK_ID1
    VARCHAR2(40)
    鎖的第1標識號

LOCK_ID2
    VARCHAR2(40)
    鎖的第2標識號

LAST_CONVERT
    NUMBER
    以秒為單位的,獲得當前鎖(或轉換成當前鎖的模式)以來的時間

BLOCKING_OTHERS
   VARCHAR2(40)
   當前鎖是否阻塞另一個鎖。
   Not Blocking=不阻塞;Blocking=阻塞

DBA_WAITERS檢視的各個列及其說明

列名
資料型別
說明

WAITING_SESSION
    NUMBER
    等待鎖的會話(被阻塞的會話)的標識號

HOLDING_SESSION
    NUMBER
    保持鎖的會話(阻塞的會話)的標識號

LOCK_TYPE
    VARCHAR2(26)
    鎖的型別

MODE_HELD
    VARCHAR2(40)
    保持的鎖的模式

MODE_REQUESTED
    VARCHAR2(40)
    申請的鎖的模式

LOCK_ID1
    NUMBER
    鎖的第1標識號

LOCK_ID2
    NUMBER
    鎖的第2標識號

DBA_BLOCKERS檢視的各個列及其說明

列名
資料型別
說明

HOLDING_SESSION
    NUMBER
    顯示阻塞了其他會話的那些會話的標識號

-----------------------------------------------------------------------------------------------------
由sys使用者透過查詢與鎖相關的檢視來了解鎖,瞭解阻塞會話與被阻塞會話的sid、serial#、使用者名稱及其所使用的DML操作語句。
-----------------------------------------------------------------------------------------------------

set pagesize 40 linesize 150
column blockers format a45
column waiters format a45
select '阻塞者('||sb.sid||':'||sb.serial#||'-'||sb.username||')-'||qb.sql_text blockers,
       '等待者('||sw.sid||':'||sw.serial#||'-'||sw.username||')-'||qw.sql_text waiters
from v$lock lb,v$lock lw,v$session sb,v$session sw,v$sql qb,v$sql qw
where lb.sid=sb.sid
  and lw.sid=sw.sid
  and sb.prev_sql_addr=qb.address
  and sw.sql_address=qw.address
  and lb.id1=lw.id1
  and sb.lockwait is null
  and sw.lockwait is not null
  and lb.block=1;
-------------------------------------------------------------------------------------------------------
要了解哪些資料庫使用者的會話鎖定了物件、鎖定的模式是什麼、對應的作業系統使用者是在哪臺計算機上進行操作的、被鎖定的物件及其型別等資訊
-------------------------------------------------------------------------------------------------------
set pagesize 40 linesize 150
column username format a9
column sid format 9999
column serial# format 99999999
column mode_locked format a12
column os_user_name format a16
column object_name format a12
column object_type format a12
select s.username,s.sid,s.serial#,
     decode(lo.locked_mode,
     0,'none',
     1,'null',
     2,'row-s(ss)',
     3,'row-x(sx)',
     4,'share',
     5,'s/row-x(ssx)',
     6,'exclusive',
     to_char(lo.locked_mode)) mode_locked,
     lo.os_user_name,
     do.object_name,do.object_type
from v$session s,v$locked_object lo,dba_objects do
where
   lo.object_id=do.object_id;
--------------------------------------------------------------------------------------------------------
要了解阻塞者會話的sid、serial#資訊
--------------------------------------------------------------------------------------------------------
set pagesize 40 linesize 150
column username format a9
column sid format 9999
column serial# format 99999999
select s.username,s.sid,s.serial#
from v$session s,dba_blockers dbab
where s.sid=dbab.holding_session;

---------------------------------------
解鎖      
---------------------------------------
alter system kill session 'sid,serial#';

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

相關文章