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呢,是以回滚段的使用作为标准的,通常情况下,使用了回滚段就涉及到了记录行,我们习惯上认为是记录发生了变化(插入、修改、删除)。如下,我们发起一个事务,没有修改任何记录,但是已经使用了回滚段,在回滚段事物表中就能找着记录了。
TX 是事务锁,表示发起了一个事务,发起事务的判别标准,是根据 是否使用回滚段中作为评判标准的。
也就是说, TM表示你锁定了系统中的一个对象,对于数据库系统表来说 可以看作锁定了 一个object的记录别人不能对这个object的记录进行 删除和修改。而tx呢,是以回滚段的使用作为标准的,通常情况下,使用了回滚段就涉及到了记录行,我们习惯上认为是记录发生了变化(插入、修改、删除)。如下,我们发起一个事务,没有修改任何记录,但是已经使用了回滚段,在回滚段事物表中就能找着记录了。
exec dbms_output.put_line( dbms_transaction.local_transaction_id(true) );
然后查看V$LOCK发现产生了TX锁。
select * from v$lock;
表1 Oracle的TM锁类型
锁模式 锁描述 解释 SQL操作
0 none
1 NULL 空 Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select for update、Lock for update、Lock row share
3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share
4 S(Share) 共享锁 Create index、Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁 Alter table、Drop able、Drop index、Truncate table 、Lock exclusive
锁模式 锁描述 解释 SQL操作
0 none
1 NULL 空 Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select for update、Lock for update、Lock row share
3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share
4 S(Share) 共享锁 Create index、Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁 Alter table、Drop able、Drop index、Truncate table 、Lock exclusive
表2 数据字典视图说明
视图名 描述 主要字段说明
v$session 查询会话的信息和锁的信息。 sid,serial#:表示会话信息。
视图名 描述 主要字段说明
v$session 查询会话的信息和锁的信息。 sid,serial#:表示会话信息。
program:表示会话的应用程序信息。
row_wait_obj#:表示等待的对象。
和dba_objects中的object_id相对应。
v$session_wait 查询等待的会话信息。 sid:表示持有锁的会话信息。
v$session_wait 查询等待的会话信息。 sid:表示持有锁的会话信息。
Seconds_in_wait:表示等待持续的时间信息
Event:表示会话等待的事件。
v$lock 列出系统中的所有的锁。 Sid:表示持有锁的会话信息。
v$lock 列出系统中的所有的锁。 Sid:表示持有锁的会话信息。
Type:表示锁的类型。值包括TM和TX等。
ID1:表示锁的对象标识。
lmode,request:表示会话等待的锁模式的信
息。用数字0-6表示,和表1相对应。
dba_locks 对v$lock的格式化视图。 Session_id:和v$lock中的Sid对应。
dba_locks 对v$lock的格式化视图。 Session_id:和v$lock中的Sid对应。
Lock_type:和v$lock中的type对应。
Lock_ID1: 和v$lock中的ID1对应。
Mode_held,mode_requested:和v$lock中
的lmode,request相对应。
v$locked_object 只包含DML的锁信息,包括回滚段和会话信息。 Xidusn,xidslot,xidsqn:表示回滚段信息。和
v$locked_object 只包含DML的锁信息,包括回滚段和会话信息。 Xidusn,xidslot,xidsqn:表示回滚段信息。和
v$transaction相关联。
Object_id:表示被锁对象标识。
Session_id:表示持有锁的会话信息。
Locked_mode:表示会话等待的锁模式的信
息,和v$lock中的lmode一致。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/117819/viewspace-545106/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/117819/viewspace-545106/