Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2583785
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2008-05-26 16:54:38

DML锁包括table-level locks(TM)和Row-level locks(TX)

A table-level lock (TM type) is set for any DML transaction that modifies a table: INSERT, UPDATE, DELETE, SELECT...FOR UPDATE, or LOCK TABLE. The table lock prevents DDL operations that would conflict with the transaction.
--说明table lock(TM type)是防止和事务冲突的DDL操作,比如在insert时防止表被drop。

The row-level lock (TX type) is automatically acquired for each row modified by INSERT, UPDATE, DELETE, or SELECT...FOR UPDATE statements. The row-level lock ensures that no other user can modify the same row at the same time. Therefore, there is no risk that a user can modify a row that is being modified and not yet committed by another user.
--说明row-level lock(TX type)是为了确保其它用户不可以在相同的时间修改相同的行。
 
TM 是对象锁,表示可能在这个对象上做了什么操作,还没有结束,所以不允许ddl。update  0 条记录,因为锁定发生在真实修改发生之前,不知道会修改多少记录,所以tm先产生了,结果却没有更新到任何记录,也就没使用回滚段,于是没有tx产生

TX 是事务锁,表示发起了一个事务,发起事务的判别标准,是根据 是否使用回滚段中作为评判标准的。
也就是说,TM表示你锁定了系统中的一个对象,对于数据库系统表来说 可以看作锁定了 一个object的记录别人不能对这个object的记录进行 删除和修改。而tx呢,是以回滚段的使用作为标准的,通常情况下,使用了回滚段就涉及到了记录行,我们习惯上认为是记录发生了变化(插入、修改、删除)。如下,我们发起一个事务,没有修改任何记录,但是已经使用了回滚段,在回滚段事物表中就能找着记录了。
exec dbms_output.put_line( dbms_transaction.local_transaction_id(true) );
然后查看V$LOCK发现产生了TX锁。
select * from v$lock;


阅读(2689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~