锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制。Oracle采用封锁技术保证并发操作的可串行性。Oracle的锁分为两大类:数据锁(也称DML锁)和字典锁。字典锁是Oracle DBMS内部用于对字典表的封锁。字典锁包括语法分析锁和DDL锁,由DBMS在必要的时候自动加锁和释放锁,用户无机控制。
Oracle主要提供了5种数据锁:共享锁(Share Table Lock,简称S锁)、排它锁(Exclusive Table Lock,简称X锁)、行级锁(Row Share Table Lock,简称RS锁)、行级排它锁(Row Exclusive Table Lock,简称RX锁)和共享行级排它锁(Share Row Exclusive Table Lock,简称SRX锁)。其封锁粒度包括行级和表级。
1. 共享锁(Share Table Lock,S):
加锁语法:Lock Table TableName In Share Mode;
允许的操作:一个共享锁由一个事务控制,仅允许其它事务查询被锁定的表。一个有效的共享锁明确地用Select … For update形式锁定行,或执行Lock Table TableName In Share Mode语法锁定整个表,不允许被其它事务更新。允许多个事务在同一个表上加共享锁,这种情况下不允许在该表上加锁的事务更新表(即使有一个事务控制的是形如Select Row … for update这样行锁也是不被允许的)。因此,仅有一个事务的一个共享锁可以更新该表如果其它事务也有相同的事务在该表上的话。
禁止的操作:一个共享锁由一个事务来控制,防止其它事务更新该表或执行下面的语句:
LOCK TABLE TableName IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE TableName IN ROW EXCLUSIVE MODE;
2. 排它锁(Exclusive Table Lock,X):
排它锁是在锁机制中限制最多的一种锁类型,允许加排它锁的事务独自控制对表的写权限。
加锁语法:Lock Table TableName In Exclusive Mode;
允许的操作:在一个表中只能有一个事务对该表实行排它锁,排它锁仅允许其它的事务查询该表。
禁止的操作:拥有排外锁的事务禁止其它事务执行其它任何DML类型的语句或在该表上加任何其它类型的锁。
定义排它锁的语法:
LOCK TABLE TableName IN EXCLUSIVE MODE;
3. 行级锁(Row Share Table Lock,RS):
一个行级锁(有时称为Subshare Table Lock,简称SS,子共享锁)需要该事务在被锁定行的表上用update的形式加锁。当有下面语句被执行的时候行级锁自动加在操作的表上。
SELECT . . . FROM TableName. . . FOR UPDATE OF . . . ;
LOCK TABLE TableName IN ROW SHARE MODE;
行级锁(Row Share Table Lock)在锁类型中是限制最少的,也是在表的并发程度中使用程度最高的。
允许的操作:行级共享锁由一个事务控制,允许其它事务查询、插入、更新、删除或同时在同一张表上锁定行。因此其它事务可以同时在同一张表上得到行级锁、共享行级排它锁、行级排它锁、排它锁。参见数据锁的相容矩阵图
禁止的操作:拥有行级锁的事务不允许其它事务执行排它锁,即:
Lock Table TableName In Exclusive Mode;
4. 行级排它锁(Row Exclusive Table Lock,RX):
行级排它锁(亦称为Subexclusive Table Lock,简称SX,子排它锁)通常需要事务拥有的锁在表上被更新一行或多行。当有下面语句被执行的时候行级排它锁被加在操作的表上。
INSERT INTO TableName. . . ;
UPDATE TableName. . . ;
DELETE FROM TableName. . . ;
LOCK TABLE TableName IN ROW EXCLUSIVE MODE;
行级排它锁比行级锁稍微多一些限制。
允许的操作:在数据锁的相容矩阵图很容易看出行级排它锁由一个事务拥有允许其它事务执行查询、修改、插入、删除或同时在同一张表上锁定行。执有行级排它锁的事务允许其它事务在同一张表上同时得到共享锁和行级排它锁。
禁止的操作:行级排它锁由一个事务拥有防止其它事务手动锁定表来排除其它事务的读写权。因此,其它事务不允许在同一张表上使用以下的语句来执行锁事务。
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE
5. 共享行级排它锁(Share Row Exclusive Table Lock,SRX):
共享行级排它锁有时也称共享子排它锁(Share Subexclusive Table Lock,SSX),它比共享锁有更多限制。定义共享行级排它锁的语法为:
Lock Table TableName In Share Row Exclusive Mode;
允许的操作:仅允许一个事务在某一时刻得到行级排它锁。拥有行级排它锁事务允许其它事务在被锁定的表上执行查询或使用Select … From TableName For update…来准确在锁定行而不能更新行。
禁止的操作:拥有行级排它锁的事务不允许其它事务有除共享锁外的其它形式的锁加在同一张表上或更新该表。即下面的语句是不被允许的:
LOCK TABLE TableName IN SHARE MODE;
LOCK TABLE TableName IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE TableName IN ROW EXCLUSIVE MODE;
LOCK TABLE TableName IN EXCLUSIVE MODE;
DML语句获得的DML自动锁(Oracle隐含锁)
DML自动锁的相容矩阵图:
X:排它锁、RS:行级共享锁、RX:行级排它锁、S、共享锁、RSX:行级共享排它锁
DML语句 有行级锁 锁类型
SELECT ... FROM table
INSERT INTO table ... X RX
UPDATE table ... X RX
DELETE FROM table ... X RX
SELECT ... FROM table ... FOR UPDATE OF ... X RS
LOCK TABLE table IN ...
ROW SHARE MODE RS
ROW EXCLUSIVE MODE RX
SHARE MODE S
SHARE EXCLUSIVE MODE SRX
EXCLUSIVE MODE X
数据字典中与锁有关的表或视图
V_$LOCKED_OBJECT
V_$LOCKS_WITH_COLLISIONS
V_$LOCK_ACTIVITY
V_$LOCK_ELEMENT
V_$_LOCK
DBMS_LOCK
V$DLM_ALL_LOCKS
V$DLM_LOCKS
V$ENQUEUE_LOCK
V$GLOBAL_BLOCKED_LOCKS
V$LOCK
V$LOCKED_OBJECT
V$LOCKS_WITH_COLLISIONS
V$LOCK_ACTIVITY
V$LOCK_ELEMENT
V$_LOCK
解锁及Kill Session:
使用下面的语法查出锁并杀掉Session。
SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID;
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
分享到:
相关推荐
正确理解和应用这些锁机制,能有效避免死锁、提高并发性能并保证数据完整性。在实际操作中,应谨慎使用锁,因为过度的锁定可能会降低系统的并发性能。了解何时使用不同类型的锁以及它们如何相互作用,对于优化Oracle...
- 并发控制:处理多个事务同时操作同一数据时的冲突,如锁机制、多版本并发控制(MVCC)。 6. 数据库恢复 - 备份与恢复:定期备份数据库,以应对数据丢失或损坏。 - 日志记录:跟踪事务对数据库的修改,用于故障...
通过上述总结,我们可以看到该文档主要涵盖了Oracle数据库的基础知识和高级管理技能,从入门到高级应用,涉及了数据库安装、配置、开发、管理等多个方面。对于希望深入了解和掌握Oracle数据库的人来说,这些知识点是...
根据提供的文档内容,我们可以归纳总结出一系列关于Oracle数据库的关键知识点,包括但不限于数据库结构、SQL语言、安全性、事务管理以及备份恢复等方面的知识。下面是对每个问题所涉及知识点的详细解释: ### 1. ...
深入理解JVM内存模型(堆、栈、方法区等)、垃圾回收机制、类加载器以及性能优化策略,对于写出高效、稳定的代码有极大帮助。 四、Java并发编程 并发编程是多线程环境下管理资源和控制执行的手段。Java提供了...
根据提供的文件信息,我们可以归纳出以下关键知识点,这些知识点主要围绕着NC5.7系统中的表空间创建与用户管理。 ### 一、表空间创建 #### 1. 表空间概念 - **定义**:在Oracle数据库中,表空间是逻辑存储结构的...
- **总结**:归纳 Berkeley DB 的主要优点和使用场景。 #### 22. 使用 MinGW 集成编译 QT 和 Berkeley DB - **编译环境**:在 MinGW 环境下集成编译 QT 和 Berkeley DB 的步骤和注意事项。 #### 23. 开源嵌入式...