在oracle中主要有3类锁
-
DML锁:一般指select,insert,update,merge和delete语句。DML锁机制允许并发执行修改。例如,DML锁可能是特定数据行的锁,或者是锁定表中所有行的锁。
-
DDL锁:如create和alter语句等。DDL锁可以保护对象的结构定义。
-
内部锁和闩:oracle使用这些锁来保护其内部数据结构。例如,oracle解析一个查询并生成优化的查询计划时,它会把库缓存闩上,将查询计划放在那里,以供其他回话使用。
DML锁
DML锁用于确保一次只有一个会话能修改某一行,而且这时其他会话不能删除这个表。
-
TX锁:事务发起第一个修改时会得到TX锁(事务所)。事务的发起是自动的,TX锁会被一直持有,直至事务执行提交(COMMIT)或回滚(ROLLBACK)。事务中修改或者通过select for update选择的任何行都会“指向”该事务的一个相关TX锁。
-
TM锁:TM锁用于确保在修改表的内容时,表的结构不会发生变化。
DDL锁
在DDL操作过程中会自动为对象加DDL锁,从而保护这个对象不会被其他会话修改。在DDL语句执行期间会一直持有DDL锁。每条DDL语句执行完成之后都会立即提交。如果不想立即提交,可以使用自治事务。DDL锁有以下三类锁:
- 排他DDL锁(exclusive DDL Lock):防止其他会话得到自己的DDL锁或TM锁。在DDL操作期间可以查询一个表,但是无法以任何方式修改这个表。
- 共享DDL锁(share DDL lock):保护锁引用的对象的结构,使之不会被其他会话修改,但是可以修改数据。
- 可中断解析锁。
大多数DDL语句都会带一个排他DDL锁。
闩
闩是轻量级的串行设备,用于协调对共享数据结构、对象和文件的多用户访问。