oracle-tom-dmllock-tx

本文详细介绍了Oracle数据库中的TX锁机制,包括其作用、获取及释放的过程,并通过具体示例展示了不同会话间如何通过TX锁进行操作排队及等待。
ORACLE 的DML锁作用:确保一次,只有一个人能修改某一行,你在处理这个表时,别人不能删除这个表

tx锁--事务锁,当事务发起第一个修改时会得么TX锁,直到事务提交或回滚。
TX锁原理--是一种排队机制,使得其它会话可以等待这个事务执行。

如:
会话1:

SQL> select owner,table_name from t where wner='SCOTT';

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SCOTT                          DEPT
SCOTT                          EMP
SCOTT                          BONUS
SCOTT                          SALGRADE
SCOTT                          SCOTTBK
SCOTT                          DEMO

6 rows selected.

SQL> update t set wner='XXX' where table_name='DEMO';

1 row updated.【这里会话1发起了更新】

会话2去查看这个时候的锁情况,前提假设数据库是单用户!!
SQL> select username,
  2         v$lock.sid,
  3         trunc(id1/power(2,16)) rbs,
  4         bitand(id1,to_number('ffff','xxxx'))+0 slot,
  5         id2 seq,
  6         lmode,
  7         request
  8  from v$lock, v$session
  9  where v$lock.type = 'TX'--查找TX类型锁
 10    and v$lock.sid = v$session.sid
 11    and v$session.username = USER;

USERNAME          SID        RBS       SLOT        SEQ      LMODE    REQUEST
---------- ---------- ---------- ---------- ---------- ---------- ----------
SYS               159          3         12        469          6          0
[LMODE=6]表示是一个排他锁,REQUEST=0说明表示该会话没有发出请求,该会话拥有这个锁

SQL> select XIDUSN, XIDSLOT, XIDSQN
  2    from v$transaction;[对于每个活动的事务都包含一条记录]

    XIDUSN    XIDSLOT     XIDSQN
---------- ---------- ----------
         3         12        469

SQL> 

如果把会话1的更新事务提交,以上的两个查询都没有记录。因为提交以后事务结束了,锁就释放了。

TX锁原理---排队机制

会话1:


SQL> update emp set ename=upper(ename);

14 rows updated.
会话2:

SQL> conn scott/scott
Connected.
SQL> update dept set deptno=deptno-10;

这个时候发现会话2中无法更新,因为会话2已经被阻塞了。

会话3.

SQL> col blocker format a10
SQL> col blockee format a10
SQL> select
  2        (select username from v$session where sid=a.sid) blocker,
  3         a.sid,
  4        ' is blocking ',
  5         (select username from v$session where sid=b.sid) blockee,
  6             b.sid
  7    from v$lock a, v$lock b
  8   where a.block = 1
  9     and b.request > 0
 10     and a.id1 = b.id1
 11     and a.id2 = b.id2;

BLOCKER           SID 'ISBLOCKING'  BLOCKEE           SID
---------- ---------- ------------- ---------- ----------
SCOTT             159  is blocking  SCOTT             145

SQL> 


这个时候一会话1如果提交,那会话2马上会跟着提交,也就是说会话2在等待会话1释放掉TX锁,排队等候机制。


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

转载于:http://blog.itpub.net/15720542/viewspace-722027/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值