> 数据库 > Oracle >

Oracle数据库的锁类型

 

Oracle中的锁:
锁是数据库用来控制共享资源并发访问的机制。
锁用于保护正在被修改的数据
直到提交或回滚了事务之后,其他用户才可以更新数据
 
锁的特性:
一致性
一次只允许一个用户修改数据
完整性
为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户
并行性
允许多个用户访问同一数据
 
当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X 等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。
在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。
 
行级锁
对正在被修改的行进行锁定,其他用户可以访问除被锁定的行以外的行
在使用insert,delete,update,select…for upadte语句时,Oracle会自动应用行级锁
Select…for update语句允许用户一次锁定多条记录进行更新,可以限制用户等待的时间及防止无限期等待
用户必须通过commit或rollback语句释放锁
 
表级锁
将整个表锁定
Lock table 表名 in share mode;



(责任编辑:IT)