关于ORACLE锁的总结

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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/127656/viewspace-438622/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值