在Oracle中最主要的锁是DML锁,保证事务并发操作时的 数据完整性。DML锁主要包括TM锁(表级锁)和TX锁(行级 锁)。
当Oracle执行DML语句时,系统自动在所要操作的表上申 请TM模式的锁。当获得TM锁后,系统再自动申请TX模式的 锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务 加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁是在表上添加的锁。当一个事务执行INSERT、 UPDATE、MERGE、DELETE语句,或使用SELECT…FOR UPDATE语句进行查询,或执行LOCK TABLE语句时,事务获得操作表的TM锁。Oracle数据库中TM锁分为行级共享锁、行级排它锁、共享 锁、共享行级排它锁和排它锁5种模式:
行级共享锁(Row Share Lock,RS):
行级共享锁表明 在表上获取行级共享锁的事务已经对表中的数据加锁了,可以 对该表进行更新操作。行级共享锁是表级锁中限制最少的锁模 式,提供最高的并发度。
行级排它锁(Row Exclusive Table Lock,RX):
行级排 它锁表明在表上获得行级排它锁的事务已经更新了表中数据或 执行了SELECT…FOR UPDATE语句。行级排它锁允许其他事 务执行查询、修改、插入、删除或并发锁定同一个表。因此, 允许几个事务同时在一个表上获得行级排它锁。
共享锁(Share Table Lock,S):
在一个表上获取共享锁 的事务允许其他事务查询该表(SELECT…FOR UPDATE语句 除外)。当只有一个事务在表上拥有共享锁时,该事务才可以 修改表中数据。因为多个事务可以同时拥有同一个共享锁,因 此拥有共享锁不能保证事务可以修改数据。
共享行级排它锁(Share Row Exclusive Table Lock, SRX):
共享行级排它锁比共享锁有更多限制。仅允许一个事 务在某一时刻获取表的共享行级排它锁。拥有共享行级排它锁 的事务允许其他事务在被锁定的表上执行查询操作(不能执行 SELECT…FOR UPDATE语句),但不能执行更新操作。
排它锁(Exclusive Table Lock,X):
排它锁是限制最多 的一种锁模式,获取排它锁的事务独自控制对表的写权限。只 允许一个事务获取表的排它锁,拥有排它锁的事务禁止其他事 务执行任何DML类型的语句或在该表上添加任何其他模式的锁。
TX锁是添加在表记录上的锁。当一个事务执行INSERT、 UPDATE、MERGE、DELETE语句,或使用SELECT…FOR UPDATE语句进行查询时,事务在每个操作的记录上获得一个 TX锁,直至该事务提交或回滚时,TX锁才被释放。TX锁主要 用于创建一个事务排队机制,避免多个事务同时修改一条记 录。TX锁以排他模式锁定记录,其他事务不能修改该记录, 直到当前事务结束释放该锁为止。



