Oracle Lock 概述
按锁的机制分类
排他锁( X ):如果事务T对对象A加上排他锁,则只允许T对A对象读取和修改,其他事务不能对A增加任何锁,直到T释放加载A上的排他锁
共享锁( S ):如果事务T对表A加上共享锁,则事务T可以读该表,但是不能修改该表数据。其他事务也只能对该对象加上共享锁,但是不能加上排他锁。这就保证了其他事务可以读A表数据,但是不能修改A表数据(这就不会影响到读该表的事务了,有利于并发操作)。
按操作行为分类
DML Locks 保证并发情况下的数据完整性
DDL Locks 用于保护数据库对象的结构
System Locks 保护数据库的内部结构
DML Locks:
Row Locks (TX) 称为行级锁。当事务执行 DML 语句(INSERT, UPDATE, DELETE, and SELECT with the FOR UPDATE clause)时会申请TX 类型的锁,TX 的机制是排他锁。
Table Locks (TM) 称为表级锁。当Oracle执行 DML 语句时,系统自动在所要操作的表上申请TM类型的锁。
TM锁类型表细分:
| SQL Statement | Mode of Table Lock | Lock Modes Permitted? | ||||
| RS | RX | S | SRX | X | ||
| SELECT...FROM table... | none | Y | Y | Y | Y | Y | 
| INSERT INTO table ... | RX | Y | Y | N | N | N | 
| UPDATE table ... | RX | Y* | Y* | N | N | N | 
| DELETE FROM table ... | RX | Y* | Y* | N | N | N | 
| SELECT ... FROM table FOR UPDATE OF ... | RS | Y* | Y* | Y* | Y* | N | 
| LOCK TABLE table IN ROW SHARE MODE | RS | Y | Y | Y | Y | N | 
| LOCK TABLE table IN ROW EXCLUSIVE MODE | RX | Y | Y | N | N | N | 
| LOCK TABLE table IN SHARE MODE | S | Y | N | Y | N | N | 
| LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE | SRX | Y | N | N | N | N | 
| LOCK TABLE table IN EXCLUSIVE MODE | X | N | N | N | N | N | 
 RS: row share
   RX: row exclusive
   S: share
   SRX: share row exclusive
   X: exclusive
注:Y的含义是完全不阻塞其它事务对相应锁的申请;Y*的含义是不阻塞其它事务对相应锁的申请(同表不同行),但对同一行数据申请相应的琐时则会发生等待。
DDL Locks:
排他DDL锁(Exclusive DDL lock):阻塞其他会话得到该对象的DDL锁或DML锁。在DDL操作期间你可以查询一个表,但是无法以任何方式修改这个表。
共享DDL锁(Share DDL lock):保护所引用对象的结构,使其结构不会被其他会话修改。
相关视图
- V$LOCK
- V$LOCKED_OBJECT
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号