文章目录

  • 1 概述
  • 2 锁详解
    • 2.1 锁类型
    • 2.2 锁模式
    • 2.3 查询
  • 3 扩展
    • 3.1 select ... for update 进阶
    • 3.2 死锁

1 概述

#mermaid-svg-HgeOOTZ3KxnMQBok {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .error-icon{fill:#552222;}#mermaid-svg-HgeOOTZ3KxnMQBok .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HgeOOTZ3KxnMQBok .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-HgeOOTZ3KxnMQBok .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HgeOOTZ3KxnMQBok .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HgeOOTZ3KxnMQBok .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HgeOOTZ3KxnMQBok .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HgeOOTZ3KxnMQBok .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HgeOOTZ3KxnMQBok .marker.cross{stroke:#333333;}#mermaid-svg-HgeOOTZ3KxnMQBok svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HgeOOTZ3KxnMQBok .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .cluster-label text{fill:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .cluster-label span{color:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .label text,#mermaid-svg-HgeOOTZ3KxnMQBok span{fill:#333;color:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .node rect,#mermaid-svg-HgeOOTZ3KxnMQBok .node circle,#mermaid-svg-HgeOOTZ3KxnMQBok .node ellipse,#mermaid-svg-HgeOOTZ3KxnMQBok .node polygon,#mermaid-svg-HgeOOTZ3KxnMQBok .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HgeOOTZ3KxnMQBok .node .label{text-align:center;}#mermaid-svg-HgeOOTZ3KxnMQBok .node.clickable{cursor:pointer;}#mermaid-svg-HgeOOTZ3KxnMQBok .arrowheadPath{fill:#333333;}#mermaid-svg-HgeOOTZ3KxnMQBok .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HgeOOTZ3KxnMQBok .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HgeOOTZ3KxnMQBok .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-HgeOOTZ3KxnMQBok .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-HgeOOTZ3KxnMQBok .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HgeOOTZ3KxnMQBok .cluster text{fill:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok .cluster span{color:#333;}#mermaid-svg-HgeOOTZ3KxnMQBok div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HgeOOTZ3KxnMQBok :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

锁 lock
一种机制:用于管理对共享资源的并发访问,保证数据的一致性和完整性
说明:咱不用太担心锁的问题,Oracle 会自我管理,但也允许 手动加锁
锁类型
DML 数据锁:保护 '数据' 的一致性和完整性
DDL 字典锁:保护 '数据库对象' 的结构
内部锁和闩(latch):保护 '数据库的内部结构'
锁模式
共享锁 Share Locks,即 S 锁
排他锁 Exclusive Locks,即 X 锁

2 锁详解

2.1 锁类型

1. DML:data locks,数据锁(1) 保护 '数据' 的一致性和完整性(2) insert、update、delete(3) DML 锁主要有以下两种TM 锁(表级锁):锁住整个 '表'TX 锁(事务锁 或 行级锁) :锁住表中的 '某行'2. DDL:dictionary locks,字典锁(1) 保护 '数据库对象' 的结构,如:表、索引等结构定义(2) create、alter 等3. 内部锁和闩(latch)  (1) 保护 '数据库的内部结构'(2) latch:低级别、轻量级的锁,获得和释放的速度都快lock:可能持续很长时间,通过使用队列,先进先出的方式实现

2.2 锁模式

基本锁模式 简称 能否再加锁 能否读数据 能否改数据
共享锁 Share Locks,即 S 锁 ×
排他锁 Exclusive Locks,即 X 锁 ×

“锁模式” 值越大,所影响的行数越多

锁模式 简称 全称 解释 常用 sql 操作
0 none lock requested but not yet obtained 已请求锁,但未获得
1 null 查询 select
2 rows_s(ss) row share lock 行级共享锁
其他对象只能查询这些数据行
Select for update、Lock for update、Lock row share
3 row_x(sx) row exclusive table lock 行排它表锁
在提交前不允许做 DML 操作
Insert、Update、Delete、Lock row share
4 share(s) share table lock 共享表锁 Create table、Lock share
5 s/row-s(ssx) share row exclusive table lock 共享行独占表锁 Lock share row exclusive
6 exclusive(x) exclusive table lock 排它表锁 Alter table、Drop table、Drop index、Truncate table 、Lock exclusive

2.3 查询

select l.sid,l.type,(select lt.namefrom v$lock_type lt -- typewhere lt.type = l.type) 锁类型,l.lmode,decode(l.lmode,0,null,1,'null (NULL)',2,'row-S (SS)',3,'row-X (SX)',4,'share (S)', -- s 锁:共享锁5,'S/Row-X (SSX)',6,'exclusive (X)' -- x 锁:排他锁) 锁模式from v$lock lwhere l.type in ('TM', 'TX') -- 通常关注该两个即可order by l.sid;

3 扩展

3.1 select … for update 进阶

博客链接 简述
Oracle for update skip locked 详解 跳过被锁定的记录,锁定未被锁定的记录
Oracle for update [of column] [nowait] 详解 多表连接时,锁定单个表中的某列

3.2 死锁

原因:互相等待对象释放资源。 -- 我让你先走,你让我先走,结果大家都不走解决:找到 'SID' 和 'SERIAL#',并执行下列语句alter system kill session 'SID, SERIAL#';

’SID’ 和 ‘SERIAL#’ 获取方式

select l.sid         "会话ID",s.serial#     "会话序列号",p.spid        "会话进程号",l.type        "锁类型",s.username    "所属用户",s.machine     "客户端",o.object_name "被锁对象",o.object_type "被锁对象类型",l.ctime       "被锁时间(S)"from v$lock      l, -- addrv$session   s, -- saddr dba_objects o, -- object_id v$process   p -- addr where s.sid = l.sidand o.object_id = l.id1and p.addr = s.paddrand l.type in ('TM', 'TX')
-- and s.username = ''
;

Oracle 锁详解(lock)相关推荐

  1. Oracle 错误代码详解

    Oracle 错误代码详解及解决方式–ORA ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事 ...

  2. 多线程锁详解之【临界区】

    更多的锁介绍可以先看看这篇文章:多线程锁详解之[序章] 正文: 一般锁的类型可分为两种:用户态锁和内核态锁.用户态锁是指这个锁的不能够跨进程使用.而内核态锁就是指能够跨进程使用的锁.一般书中会说,wi ...

  3. mysql默认使用悲观锁_mysql乐观锁和悲观锁详解

    mysql乐观锁和悲观锁详解 相信很多朋友在面试的时候,都会被问到乐观锁和悲观锁的问题,如果不清楚其概念和用法的情况下,相信很多朋友都会感觉很懵逼,那么面试的结果也就不言而喻了. 那么乐观锁和悲观锁到 ...

  4. 可重入锁详解(什么是可重入)

    可重入锁详解 概述 什么是 "可重入",可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁.例如 package com.test.reen;// 演示可重入锁是什么 ...

  5. 公平锁非公平锁的实际使用_java 线程公平锁与非公平锁详解及实例代码

    java 线程公平锁与非公平锁详解 在ReentrantLock中很明显可以看到其中同步包括两种,分别是公平的FairSync和非公平的NonfairSync.公平锁的作用就是严格按照线程启动的顺序来 ...

  6. Redis分布式锁详解

    Redis分布式锁详解 1. 分布式所概述 1.1 分布式锁 2. 缓存数据库Redis 2.1 redis简介 2.2 Springboot整合Redis两种方式 3. 实现验证 3.1 环境准备 ...

  7. 旋转矩阵、欧拉角、万向锁详解

    旋转矩阵.欧拉角.万向锁详解 一:物体的姿态描述 物体的姿态可由固定于此物体的坐标系描述,为了规定空间某刚体B的姿态,设置一直角坐标系{B}与此刚体固接.用坐标系{B}的三个单位主矢量{Xb,Yb,Z ...

  8. Oracle ASM 详解 收藏

    Oracle ASM 详解 ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也 ...

  9. oracle分区表编程,Oracle分区表详解

    当前位置:我的异常网» 编程 » Oracle分区表详解 Oracle分区表详解 www.myexceptions.net  网友分享于:2013-10-28  浏览:25次 Oracle分区表详解 ...

  10. oracle有哪两种内存结构,Oracle体系结构详解(物理构造,内存结构和逻辑结构)...

    当前位置:我的异常网» 数据库 » Oracle体系结构详解(物理构造,内存结构和逻辑结构 Oracle体系结构详解(物理构造,内存结构和逻辑结构) www.myexceptions.net  网友分 ...

最新文章

  1. iOS开发-自己定义重用机制给ScrollerView加入子视图
  2. 使用PHP将HTTP标头设置为UTF-8
  3. [云炬创业基础笔记]第四章测试23
  4. Android开发之如何保证Service不被杀掉(前台服务)
  5. 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
  6. java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中
  7. Dash的快速入门将使您在5分钟内进入“ Hello World”
  8. [MM9]复制格式的快捷操作
  9. SPOJ D-query(莫队算法模板)
  10. Floppy Zip Disk Rescue注册码分析
  11. java 集合教程_Java Collections
  12. matlab fft函数画幅度谱,如何在FFT幅度谱上绘制掩模线
  13. Cocos2d-x 着色器
  14. 网络附加存储技术与磁盘阵列柜的对比
  15. 信号完整性和电源完整性基本介绍
  16. RFID读写---RFID读卡
  17. python 拉丁超立方抽样
  18. 如何制作视频画面水平镜像播放特效
  19. 一个H.265/HEVC码流分析工具
  20. 集成电路之父Jack Kilby鲜为人知的故事

热门文章

  1. 如何清除本地计算机搜索记录,怎么深度清理电脑使用痕迹?
  2. SPOJ - DQUERY D-query
  3. L Norms 范数
  4. ollvm编译出现的问题纪录
  5. XP IIS5.1安装文件
  6. Tell Me Where to Look: Guided Attention Inference Network论文翻译
  7. 【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
  8. 代码写的太烂了,所以我干不下去了
  9. 库存管理中常见的5大问题
  10. 计算机函数countifs使用,countifs函数(countifs使用方法举例)