oracle 锁 详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle 锁详解
Oracle中的锁分为两种:悲观锁和乐观锁。
悲观锁:
悲观锁的思想是认为并发环境中,总有其他会话会修改或者查询同一
数据,因此在操作前先将数据锁住,阻塞其他会话的操作,等待当前会话
完成后再释放锁。
Oracle中的悲观锁主要有行锁和表锁。
行锁:
行锁是针对数据表中特定行的锁定机制。
当一个事务拥有了某行记录
的锁时,其他事务就不能操作该行记录,直到该行记录被锁定的会话释放锁。
Oracle中行锁基于行级锁定机制实现。
通过行级锁定机制,只锁住
需要修改的数据行,而不会锁住整个数据表,这样能大大缩短了锁定时间,提高了并发度。
表锁:
表锁则是针对数据表的锁定机制。
在锁定表后,其他会话便无法进行
任何操作,包括读取、修改、删除等。
表锁的粒度较大,对系统的性能影
响比较大,因此尽可能避免对整个表进行锁定。
乐观锁:
乐观锁认为并发环境下操作冲突的概率较小,因此不会在执行前对数
据进行加锁,而是在提交操作时对数据进行版本控制,若发现数据已被其
他会话修改,则拒绝当前会话的提交。
Oracle中的乐观锁主要基于乐观
并发控制(Optimistic Concurrency Control)实现。
总体上说,悲观锁在并发较高的环境中表现更加稳定可靠,但会增加系统的开销;乐观锁在并发较低且读操作多于写操作的情况下表现更好,但在高并发、写操作频繁的环境中,容易出现冲突,需要进行版本回滚或者重试操作,增加了系统的复杂度。