oracle有两种模式的锁:排他锁(exclusive lock,即X锁)和共享锁(share lock,即S锁)。
共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。(注:共享锁是表级的,比如Select会对表加共享锁)
排他锁:如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的锁。获准排他锁的事务既能读数据,又能修改数据。(注:排他锁一般是行级的,比如DML操作 insert update delete,在执行DML操作时分两步加锁,先加共享锁,后加排他锁。在添加排他锁后,不能添加任何锁直至锁释放 commit或者rollback)
数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
共享锁无法阻止其他用户读取和修改表中的数据,只能阻止其他用户使用ALTER TABLE命令改变指定表的结构或用DROP TABLE命令删除指定表。多个用户可以同时获得相同数据上的共享锁。
执行DML语句时可以获得排他锁,并且正在被修改的所有记录都会获得排他锁。在你启动的事务内,排他锁阻止其他用户获得正在处理的数据上的排他锁,直至执行COMMIT或ROLLBACK语句。这样,两个用户就无法同时更新相同的数据。某个用户试图更新被另一个用户锁定的数据时,第一个用户必须等待至去除排他锁后才能进行操作。
通过DML语句对一张表的某一行数据进行修改,一个事务开始,背后的步骤是:
1.对这张表加一个共享锁。这么做是为了防止别的会话通过DDL语句修改这张表的表结构。DDL语句要修改了这张表,就必须给表加上排他锁。但是现在给表加了共享锁了,也就排斥了DDL去加排他锁;
2.对修改的那一行加一个排他锁,别的会话不能修改这一行。但是我对整张表加的是共享锁而不是排他锁,所以别的会话还是可以修改其他行(也经历1、2两个步骤)。
默认情况下的select … for update语句与DML语句相似,效果相当于启动了一个会话级别的事务,在对应的数据表(select所涉及的所有数据表)上加入一个数据表级共享锁(TM,lmode=3)。同时,在对应的数据行中加入独占锁(TX,lmode=6)。
注意:只有表级的共享锁没有行级共享锁。的确,也是有row share的锁的,只是这个不是代表行的,是代表表锁的种类。指的是在行上加排他锁,在表上加共享锁,表级共享、行级排他。
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
Session 1:
select * from PV_PROFL for update;
Check lock status:
select * from dba_locks where LOCK_TYPE = 'DML';
6289 DML Row-X (SX) None 168261 0 2 Global 0
Session 2:
select * from PV_PROFL; can run
select * from PV_PROFL for update; can run too, but waiting for the lock.
相关推荐
### Oracle Lock 概念与类型详解 #### 一、引言 在数据库管理系统(DBMS)中,锁是一种机制,用于管理多个用户同时访问共享资源(如数据库中的表或行)时可能产生的冲突。Oracle数据库中提供了多种类型的锁来确保数据...
在Oracle中,锁(Lock)和隔离级别(Isolation Level)是确保多用户环境下数据一致性和完整性的关键组成部分。本篇文章将深入探讨这两个概念及其在实际应用中的重要性。 一、Oracle锁机制 1. **锁定类型**: - **...
在Oracle数据库系统中,"lock table" 是一个重要的管理功能,用于控制多个用户对特定表的并发访问。当一个用户对表执行修改操作(如INSERT、UPDATE或DELETE)时,Oracle会自动对表施加锁,以防止其他用户在同一时间...
- Oracle提供了一个PL/SQL包DBMS_LOCK,用于在PL/SQL环境中显式地创建和管理锁。例如,你可以使用`DBMS_LOCK.ALLOCATE_UNIQUE`分配一个锁,然后使用`DBMS_LOCK.REQUEST`请求锁,最后用`DBMS_LOCK.RELEASE`释放锁。 ...
Oracle提供了死锁检测和恢复机制,可以通过`DBMS_LOCK`包或设置参数`deadlock_timeout`来管理。 6. **锁定工具和视图**: - `V$SESSION` 和 `V$LOCK` 视图:用于查看当前会话的锁定信息和系统级别的锁定情况。 - ...
在Oracle数据库系统中,Lock和Latch是两种重要的并发控制机制,它们确保了多用户环境下的数据一致性与安全性。本文将深入探讨Lock与Latch的异同,帮助读者更好地理解和解决可能出现的并发问题。 首先,让我们来看看...
### 彻底理解 Oracle 中 Library Cache Lock 的成因与解决办法 #### 一、引言 在日常数据库管理工作中,经常会遇到一些让人头疼的问题,比如会话挂起(hang)。其中一个常见的情况是当用户尝试执行某些操作时,比如...
### Oracle Session与Lock解除 在Oracle数据库环境中,锁机制是一种重要的资源管理手段,它能够确保数据的一致性和并发性处理。锁(Lock)是数据库管理系统为了控制多个用户对同一数据资源的同时访问而采取的一种...
Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它在处理并发事务时采用了一种称为“Latch”和“Lock”的并发控制机制。Latch(闩锁)和Lock(锁定)都是Oracle用来确保数据一致性、防止数据冲突的关键组件...
在`oracle_lock.txt`文件中,可能包含具体的表锁问题实例和解决方案,例如如何处理死锁,如何通过SQL查询定位锁冲突,以及如何避免不必要的锁等待。 综上所述,理解并熟练掌握Oracle的表锁机制对于优化数据库性能、...
本文将深入探讨如何在分布式事务中实现基于Oracle PL/SQL的Ultra Lock(悲观离线锁)机制。 Ultra Lock是一种加强型的锁定策略,用于在高并发环境下提供更精确的并发控制。 Oracle PL/SQL是一种强大的编程语言,它...
在Oracle数据库管理与性能优化的过程中,遇到“library cache lock”等待事件是常见的问题之一,它直接影响到系统的响应时间和整体性能。本文将深入解析这一事件,包括其产生原因、诊断方法以及可能的解决策略。 ##...
针对oracle性能问题中的library cache pin lock,给出解决方案。
ORACLE 锁机制和 V$LOCK 视图分析 Oracle 数据库为了实现并发操作,使用了锁机制来控制对数据的访问。锁机制是 Oracle 数据库并发控制的核心机制之一。锁机制能够有效地防止多个用户同时访问同一个数据项,避免了...
标题中的“PB连ORACLE10免客户端”指的是使用PowerBuilder(PB)12.5连接Oracle 10g数据库时,不需安装完整的Oracle客户端软件,而是采用一种轻量级或者精简的方式进行连接。这种方法可以减少系统资源的占用,简化...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ### Oracle 学习笔记概览 在Oracle学习过程中,掌握基础的命令与权限管理是至关重要的。以下内容将围绕Oracle数据库的基础操作、用户管理以及...