oracle内存锁,ORACLE锁的总结

下午无事,整理了一下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#';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值