oracle 锁的研究一

acle 的锁从种类上分为2种 共享锁(share) ,排它锁(exclusive).
从锁定的内容上,可以分为三大类:
dml锁,ddl锁,内存锁(latch)

其中
dml 锁包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

在对数据库的操作过程中,先会对表加上TM锁,然后对行加TX锁
(一)关于TM锁和TX锁

SQL> insert into test_lock select * from test_lock;

225556 rows created.

insert 以后,查看v$locked_object有现在哪些对象被锁定.

SQL> select * from v$locked_object;

    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS
---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------
LOCKED_MODE
-----------
         5         43       5401      82284        288 LIJIEBIN                       lijiebin                       28817
          3

我们根据该session的sid察看到了该session有TM锁和TX锁


SQL> select * from v$lock where sid=288;

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
0000000529D9A540 0000000529D9A568        288 TM      82284          0          3          0        165          2
0000000529DF8F20 0000000529DF8F58        288 TX     327723       5401          6          0        165          2

对象在加TX锁之前 会加上TM锁.

 

v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下:

字段名称

类型

说明

SID

NUMBER

会话(SESSION)标识;

TYPE

VARCHAR2

区分该锁保护对象的类型;

ID1

NUMBER

锁标识1

ID2

NUMBER

锁标识2

LMODE

NUMBER

锁模式:0None),1null,2row share, 3row exclusive,4 share,5share row exclusive,6exclusive

REQUEST

NUMBER

申请的锁模式:具体值同上面的LMODE

CTIME

NUMBER

已持有或等待锁的时间;

BLOCK

NUMBER

是否阻塞其它锁申请;

其中在TYPE字段的取值:

 

TYPE

ID1

ID2

TM

被修改表的标识(object_id

0

TX

以十进制数值表示该事务所占用的回滚段号与该事务在该回滚段的事务表(Transaction table)中所占用的槽号(slot number,可理解为记录号)。其组成形式为: 0xRRRRSSSS ( RRRR = RBS number, SSSS = slot )

以十进制数值表示环绕(wrap)次数,即该槽(slot)被重用的次数;

v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:

字段名称

类型

说明

XIDUSN

NUMBER

回滚段号;

XIDSLOT

NUMBER

槽号;

XIDSQN

NUMBER

序列号;

OBJECT_ID

NUMBER

被锁对象标识;

SESSION_ID

NUMBER

持有锁的会话(SESSION)标识;

ORACLE_USERNAME

VARCHAR230

持有该锁的用户的Oracle用户名;

OS_USER_NAME

VARCHAR215

持有该锁的用户的操作系统用户名;

PROCESS

VARCHAR29

操作系统的进程号;

LOCKED_MODE

NUMBER

锁模式,取值同v$lock中的LMODE

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8135069/viewspace-613396/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8135069/viewspace-613396/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值