Oracle Lock 概述

时间:2023-06-06 23:08:07

按锁的机制分类

  排他锁( 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