關於ORACLE鎖的總結

perry_shi發表於2008-08-28

v$lock檢視的各個列及其說明

ADDR

    RAW(4)

    在記憶體中鎖定的物件的地址

 

KADDR

    RAW(4)

    在記憶體中鎖的地址

 

SID

    NUMBER

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

 

TYPE

    VARCHAR2(2)

    鎖的型別。

    TX=行鎖或事務鎖;TM=表鎖或DML鎖;ULPL/SQL使用者鎖

 

ID1

   NUMBER

   鎖的第1標識號。

   如果鎖的型別是TM,該值表示將要被鎖定的物件的標識號;

   如果鎖的型別是TX,該值表示撤銷段號碼的十進位制值

 

ID2

   NUMBER

   鎖的第2標識號。

   如果鎖的型別是TM,該值為0

   如果鎖的型別是TX,該值表示交換次數

 

LMODE

   NUMBER

   會話保持的鎖的模式。

   0None1Null2Row-S (SS)3Row-X (SX)

   4Share5S/Row-X (SSX)6Exclusive

 

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

    物件被鎖定的模式。

    0None1Null2Row-S (SS)3Row-X (SX)

    4Share5S/Row-X (SSX)6Exclusive

 

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使用者通過查詢與鎖相關的檢視來了解鎖,瞭解阻塞會話與被阻塞會話的sidserial#、使用者名稱及其所使用的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;

--------------------------------------------------------------------------------------------------------

要了解阻塞者會話的sidserial#資訊

--------------------------------------------------------------------------------------------------------

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#';

 

補充:

 

TX:行級鎖,事務鎖

l         在改變資料時必須是排它模式(mode 6)

l         每一個活動事務都擁有一個鎖。它將在事務結束(commit/rollback)時釋放。

l         如果一個塊包括的列被改變而沒有ITL(interested transaction list)槽位(entries),那麼session將鎖置於共享模式(mode 4)。當session獲得塊的ITL槽位時釋放。

l         當一個事務首次發起一個DML語句時就獲得一個TX鎖,該鎖保持到事務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行DML語句時,第一個會話在該條記錄上加鎖,其他的會話處於等待狀態。當第一個會話提交後,TX鎖被釋放,其他會話才可以加鎖。

l         指出回滾段和事務表項

按下列項以避免競爭:

l               避免TX6型別競爭,需要根據您的應用而定。

l               避免TX4型別競爭,可以考慮增加物件INITRANS引數值。

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

相關文章