当前位置: 首页 > news >正文

Oracle数据库数据编程SQL<4.2 锁机制>

锁是Oracle数据库用来管理并发访问的重要机制,它确保数据的一致性和完整性。

目录

一、锁的基本概念

1. 锁的作用

2. 锁的特性

二、锁的分类

1. 按锁定资源分类

(1) DML锁(数据锁)

(2) DDL锁(字典锁)

(3) 内部锁和闩(latch)

2. 按并发性分类

(1) 排他锁(X锁)

(2) 共享锁(S锁)

(3) 行共享锁(RS锁)

(4) 行排他锁(RX锁)

三、常见锁模式 

四、锁的获取方式

1. 自动获取

2. 手动锁定

五、锁的兼容性矩阵

六、锁的监控

1. 查看锁信息

2. 查看锁等待情况

七、锁的常见问题与解决方案

1. 死锁

特征:

解决方法:

2. 锁等待

解决方法:

八、锁的最佳实践

1. 事务设计:

2. 应用设计:

3. SQL优化:

4. 监控:

九、Oracle锁参数配置

十、特殊锁定场景

1. 分区表锁定

2. LOB数据锁定

3. 索引锁定


一、锁的基本概念

对某个数据进行DML操作后但没有提交或者回滚,另一个窗口对同一数据进行操作时,会一直等待,直到第一个操作被提交或者回滚,且另一个窗口看到的是DML操作之前的镜像。

1. 锁的作用

  • 保证数据一致性

  • 防止并发事务间的破坏性交互

  • 实现事务隔离性

2. 锁的特性

  • 排他性:锁定的资源不能被其他事务同时修改

  • 持久性:锁会持续到事务结束(提交或回滚)

  • 可升级性:某些锁可以升级为更严格的锁

二、锁的分类

1. 按锁定资源分类

(1) DML锁(数据锁)

  • 行级锁(TX锁):锁定表中的单行

  • 表级锁(TM锁):锁定整个表

(2) DDL锁(字典锁)

  • 保护数据字典结构

  • 在DDL操作期间自动获取

(3) 内部锁和闩(latch)

  • 保护数据库内部结构

  • 持续时间极短

2. 按并发性分类

(1) 排他锁(X锁)

  • 阻止其他事务获取任何锁

  • 用于修改数据的操作(INSERT,UPDATE,DELETE)

(2) 共享锁(S锁)

  • 允许多个事务同时读取数据

  • 阻止排他锁获取

(3) 行共享锁(RS锁)

  • SELECT...FOR UPDATE使用的锁类型

(4) 行排他锁(RX锁)

  • 更新行时自动获取

三、常见锁模式 

锁模式 简称 描述
Row Share RS 允许并发访问表,但阻止其他会话锁定整个表进行排他访问
Row Exclusive RX 允许并发访问表,但阻止其他会话以共享模式锁定表
Share S 允许并发查询但阻止更新表
Share Row Exclusive SRX 阻止其他会话以共享模式锁定表或更新表
Exclusive X 提供对表的完全排他访问

四、锁的获取方式

1. 自动获取

Oracle在执行DML语句时自动获取适当的锁:

  • INSERT:获取行级排他锁(RX)

  • UPDATE:获取行级排他锁(RX)

  • DELETE:获取行级排他锁(RX)

  • SELECT:默认不获取锁

  • SELECT...FOR UPDATE:获取行共享锁(RS)

2. 手动锁定

-- 锁定表
LOCK TABLE employees IN EXCLUSIVE MODE;

-- 锁定行
SELECT * FROM employees WHERE employee_id = 100 FOR UPDATE;

五、锁的兼容性矩阵

请求\持有

相关文章:

  • YOLO与SSD对比
  • 前端Uniapp接入UviewPlus详细教程!!!
  • 从零到1搭建流媒体服务器
  • C++基础系列【35】巧用assert
  • ARM Cortex-M用于控制中断和异常处理的寄存器:BASEPRI、PRIMASK 和 FAULTMASK
  • 图形渲染: tinyrenderer 实现笔记(Lesson 5 - 7)
  • 【算法学习计划】回溯 -- 二叉树中的深搜
  • WebRTC技术简介及应用场景
  • 解决Spring参数解析异常:Name for argument of type XXX not specified
  • Linux命令-xargs
  • 25.4.3学习总结【Java】
  • Ubuntu 安装 VLC
  • Vue2(15) 自定义事件学习笔记
  • VTK知识学习(50)- 交互与Widget(一)
  • vue3+ts+element-plus 开发一个页面模块的详细过程
  • CExercise04_1位运算符_2 定义一个函数判断给定的正整数是否为2的幂
  • 通过第k个最大元素深入浅出快排和堆排序
  • 开箱即用的可视化AI应用编排工具 Langflow,可调用魔搭免费API作为tool
  • C++实现对象单例模式
  • SQL操作之:连接(JOIN)