一、Oracle 锁机制概述
1.1 锁的作用与分类
Oracle 锁机制是数据库并发控制的核心,用于确保数据一致性和完整性。锁分为行锁(Row Lock)、表锁(Table Lock)、TX 锁(事务锁)和 TM 锁(表级锁),分别在不同粒度上管理并发访问。行锁针对单行数据,表锁锁定整个表,TX 锁管理事务状态,TM 锁协调表级操作。
1.2 锁的获取与释放流程
锁的获取遵循“先申请、后使用、最后释放”的原则,Oracle 通过锁管理器(Lock Manager)协调锁的分配。事务开始时,系统为事务分配 TX 锁;当事务需要访问数据时,申请相应粒度的锁(行锁或表锁);操作完成后,释放锁资源。
该流程图展示了事务从开始到结束的锁获取与释放过程,其中 TX 锁作为事务标识,行锁/表锁根据数据访问粒度动态申请。
二、行锁详解
2.1 行锁的原理与类型
行锁是 Oracle 最细粒度的锁,仅锁定被修改的行,减少锁冲突。行锁分为共享锁(Shared Lock, S)和排他锁(Exclusive Lock, X)。共享锁允许多个事务读取同一行,排他锁阻止其他事务修改或读取该行。
2.2 行锁获取的时序图
当两个事务同时请求同一行时,行锁的获取过程如下:
该时序图显示,事务A先获取共享锁,事务B请求排他锁时被阻塞,直到事务A释放锁后,事务B才获得排他锁。
三、表锁详解
3.1 表锁的原理与类型
表锁是 Oracle 较粗粒度的锁,锁定整个表,适用于大批量数据操作(如全表更新)。表锁分为共享表锁(Share Table Lock, S)和排他表锁(Exclusive Table Lock, X)。共享表锁允许多个事务读取表,排他表锁阻止其他事务读写表。
3.2 表锁获取的流程图
表锁的获取流程需检查表是否已被其他事务锁定,避免冲突:
该流程图说明,当表未被锁定时直接授予锁;若存在共享锁,可授予共享表锁;若存在排他锁,则阻塞等待。
四、TX/TM 锁详解
4.1 TX锁与TM锁的关系
TX 锁(事务锁)管理事务的生命周期,记录事务的状态(如活动、提交、回滚);TM 锁(表级锁)协调表级操作的并发控制。TX 锁是事务的标识,TM 锁是表级锁的具体实现,两者通过事务 ID 关联。
4.2 TX/TM锁的类图
TX 锁和 TM 锁的层次结构如下:
该类图展示 TX 锁通过管理多个 TM 锁实现事务级控制,TM 锁继承基础锁接口,提供兼容性检查方法。
五、死锁排查与处理
5.1 死锁的产生原因
死锁发生在两个或多个事务相互等待对方释放锁时,满足“互斥条件、请求与保持、不剥夺、循环等待”四个条件。例如,事务A持有行锁1并请求行锁2,事务B持有行锁2并请求行锁1,形成循环等待。
5.2 死锁排查的流程图
Oracle 通过 V$LOCK 和 V$SESSION 视图排查死锁,步骤如下:
该流程图说明,通过查询锁视图发现等待事件,分析等待图确认死锁,然后终止死锁事务。
5.3 死锁检测的时序图
Oracle 定期检测死锁,当发现循环等待时,自动终止其中一个事务:
该时序图显示,Oracle 检测到循环等待后,终止其中一个事务(如事务A),释放其锁资源,使另一个事务(事务B)继续执行。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_41840843/article/details/166991339




