或数据结构。DML语句自动获得表锁(TM)和行锁(TX)。
1)表锁(TM):当一个表通过insert、update、delete、merge、select...forupdate
子句或locktable语句修改之前,事务首先获取表锁。DML操作要求保留表锁,防止DDL操
作与事务冲突;
2)行锁(TX):是Oracle限制最大的锁,是排他锁,是表行上的锁。一个事务执行
insert、update、delete、merge或select...forupdate语句为修改的行获得一个行锁。
行锁跟随事务一致存在,直到事务提交或回滚。行锁使用队列机制主要为了防止两个事务修
改相同的行,数据库一直以独占模式锁定这些行。行锁提供很好的细粒度,由此提供了最好
的并发性能。
如下表示,TM根据执行不同的SQL语句和不同的情况,又可以在排他锁和共享锁的基础上
细分为6种模式。
DML表锁6中模式
锁模式号 DML表锁模式 描述
1 NULL锁 空锁
2
行共享(RS)或者子共享表锁
(SS)
事务保持该锁在锁定行的表上,一个行共享锁是最低
限制模式的表锁,提供表最高程度的并行
3
行排它表锁(RX)或子排它表锁
(SX)
通常是事务更新表或执行select...forupdate产生的
表锁,一个SX锁允许其他事务在相同的表中并行查
询、插入、更新、删除或者锁定行。因此,SX锁允
许多个事务在相同的表同时获取SX和SS锁
4 共享表锁(S) 该锁是通过事务保持的,多个事务可能并行地获取S
锁,保持这个锁并不能确保事务能修改这个表。只允
许其他事务查询相同的表,只有获得这个锁模式的事
务能更新数据
5
共享行排它锁(SRX)或共享子排
它锁(SSX)
该锁是通过事务保持的,比S锁有更多限制,只允许
表有一个SSX类型的锁存在,允许其他事务以SS模式
锁定表,不允许其他事务更新表
6 排它表锁(X)
该锁是最大限制的表锁,禁止其他事务执行任何类型
的DML语句以及在表上放置任何其他类型的锁,允
许其他事务查询数据
锁模式编号对应v$lock的lmode和request字段,锁模式编号3和4是最常见的两个模式的表
锁。在表上执行update语句在表上产生锁模式为3的表锁,在表上执行createindex或alter
index...rebuild语句产生锁模式为4的表锁,模式为3和模式为4的表锁可以同时存在于表
上,但update操作和createindex、alterindex...rebuild操作是不兼容的。
评论