Oracle LOCK内部机制及最佳实践系列(五)给出一个导致死锁的SQL示例

给出一个导致死锁的SQL示例死锁定义:从广义上讲包括操作系统应用程序数据库,如果2个进程(会话)相互持有对方的资源,都一直等待对方释放,这种情况会造成死锁

给出一个导致死锁的SQL示例

死锁定义:从广义上讲包括操作系统 应用程序 数据库,如果2个进程(会话)相互持有对方的资源,都一直等待对方释放,这种情况会造成死锁。
误解:会话的阻塞可不是死锁,因为其中有一个会话还是可以继续操作的。
释放:Oracle会自动检测死锁并强制干预释放

LEO1@LEO1> create table p1 ( x int primary key );       我们新建一个p1表,设置x字段为主键
Table created.
LEO1@LEO1> insert into leo1.p1 values(10);                 138会话插入的是10
1 row created.
LEO2@LEO1> insert into leo1.p1 values(20);                 156会话插入的是20
1 row created.
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in (‘TM’,’TX’) order by 1,2;
       SID TYPE              ID1        ID2      LMODE    REQUEST      BLOCK
———- ———- ———- ———- ———- ———- ———-
       138 TM              73470          0          3          0          0
       138 TX             327713    1124          6          0          0             138有一个TX排他锁,但当前没有阻塞会话
       156 TM              73470          0          3          0          0
       156 TX             589825      945          6          0          0             156也有一个TX排他锁,但当前也没有阻塞会话
LEO1@LEO1> select object_name from dba_objects where object_id=73470;            看p1表上存在正常的TM  TX锁,都没有阻塞到对方的会话
OBJECT_NAME
——————————————————————————–
P1
LEO1@LEO1> insert into leo1.p1 values(20);              此时我在138会话上再插入20,发现hang住了不能前进,这是什么原因呢?我们看看v$lock视图
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in (‘TM’,’TX’) order by 1,2;
       SID TY        ID1        ID2      LMODE    REQUEST      BLOCK
———- — ———- ———- ———- ———- ———-
       138 TM      73470          0          3          0          0
       138 TX     589825      945          0          4          0     这时138会话就继续插入了,但这个插入动作是成功的没有阻塞,而是由于138|156会话修改值的相同
       138 TX     327713    1124          6          0          0     违反了主键约束从而产生阻塞,实际是对修改值的相同产生了阻塞,所以申请的是4级锁,而非6级锁
       156 TM      73470          0          3          0          0
       156 TX     589825      945          6          0          1     156会话此时正在阻塞138会话,香港虚拟主机,网站空间,因为156会话的事务还没有完成还是一个未决状态

LEO2@LEO1> insert into leo1.p1 values(10);               我在156会话上也插入10,这时死锁的效果就出来了
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in (‘TM’,’TX’) order by 1,2;
       SID TY        ID1        ID2      LMODE    REQUEST      BLOCK
———- — ———- ———- ———- ———- ———-
       138 TM      73470          0          3          0          0
       138 TX     327713    1124          6          0          1     138会话此时正在阻塞156会话,因为138会话的事务还没有完成还是一个未决状态
       156 TM      73470          0          3          0          0
       156 TX     327713    1124          0          4          0     实际上是对修改值的相同产生了阻塞,156会话正在申请4级锁
       156 TX     589825      945          6          0          0
LEO1@LEO1> insert into leo1.p1 values(20);               我们看一下138会话报错,Oracle自动检测死锁并强制干预释放
insert into leo1.p1 values(20)
                 *
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource(等待资源时检测到死锁->释放之)  这时请注意一下,只是释放掉了第一个锁定,但第二个锁定还在等待,所以我们要手工释放

小结:上面讲到了好几种锁的机制,我们崇尚的思想就是先要想一想为什么会出现锁,不出现行不行,锁的作用有哪些,这种启发式的思路能够让我们记忆深刻。
LOCK作用:独占业务资源  保证读一致性  维护事务完整性
LOCK宗旨:没有并发就没有锁,香港空间,一个人操作数据库是不会产生锁的

Leonarding
2012.11.28
天津&winter
分享技术~成就梦想
Blog:
 

本文出自 “leonarding blog” 博客,请务必保留此出处

芦笋演示 芦笋演示

一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。

芦笋演示 34 查看详情 芦笋演示

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/525786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 07:57:35
下一篇 2025年11月9日 08:02:33

相关推荐

  • UNI继续领导分散的交易所

    尽管竞争激烈,但其一致的升级和强大的流动性池有助于保持相关性。 加密货币的价格每天可能会大幅上涨或下降,试图预测价格变动可能有风险。最好投资于您理解和相信的加密货币,并为损益的可能性做好准备。此外,重要的是要注意,加密货币是一种挥发性资产类别,任何预测价格变动的尝试都是投机性的。 加密货币的价格,尤…

    2025年12月8日
    000
  • 5个可能爆炸的病毒令牌:从基础设施播放到最佳模因硬币

    随着比特币壮观的历史最高高点,可显而易见的“ altcoin季节”正在占据,投资者疯狂地寻找下一枚加密货币爆炸。 随着比特币(BTC)出色的辉煌集会升至新的高潮之后,明显的“ Altcoin赛季”正在持续下去,投资者疯狂地寻找下一枚加密货币硬币要爆炸。在这个高能环境中,捕捉巨大社区嗡嗡声的项目是展示…

    2025年12月8日
    000
  • Credefi 3.0重塑贷款带有令牌的附带池

    credefi 3.0的发布象征着区块链借贷领域的变革。其核心在于一种模块化设计,能够实现抵押品的代币化,使现实世界的资产重新融入链上信贷体系。 魔术广场(Magic Square)分享了关于即将推出的Credefi 3.0更新的见解,重点介绍了旨在连接传统金融(TradFI)与去中心化金融(DeF…

    2025年12月8日
    000
  • 这5个加密货币可能是当今最明智的举动吗?

    随着注意力转移超越市值和炒作周期,分析师现在指出了富含基础设施的区块链 注意力正在从市值炒作转向悄悄地改变区块链世界运作方式的项目。随着在关键生态系统中的机构活动变暖和预售利息的回报,寻找今天购买的最佳加密货币的搜索变得更加技术性和针对性。对于那些跟踪潜在的长期收益的人,这一刻少于转瞬即逝的价格趋势…

    2025年12月8日
    000
  • 加密市场正在辐射不可否认的能源

    加密货币市场在2025年5月下旬散发出不可否认的能源,这是由高度积极的新闻和事件的汇合而引起的,这些新闻和事件正在重塑 加密货币市场将在2025年5月下旬以不可否认的能源升温,这是由于高度积极的新闻和事件的融合,这些新闻和事件正在改变投资者对市场的看法。 就在最近,比特币迅速达到了令人惊叹的新历史最…

    2025年12月8日
    000
  • TRB币(Tellor Tributes)详细介绍与2025年末价格预测

    目录 1. TRB币的基本信息2. 当前市场表现(2025年5月)3. 历史价格波动与关键事件4. 2025年末价格预测(单向看涨/看跌)5. 投资建议 截至2025年5月27日,trb价格为 37.2美元。 TRB币英文全称为Tellor,是Tellor系统的实用代币,也是基于以太坊的ERC-20…

    2025年12月8日
    000
  • 尽管最近有报道,但R3 Corda定居者仍使用XRP

    xrp社区成员及研究者smqke正在引发关于r3是否仍会继续将xrp用于其corda settler平台的社区热议。 XRP社区成员及研究者Smqke正持续探讨R3是否会继续采用XRP作为其Corda Settler平台的一部分。 这一讨论起源于Smqke于2018年12月5日分享的R3演示视频,该…

    2025年12月8日
    000
  • 查尔斯·霍斯金森(Charles Hoskinson)在比特币和XRP Defi中看到了数十亿美元的机会

    霍斯金森(hoskinson)多次调侃称,将去中心化金融(defi)引入比特币网络的举措并不明智。近期,他分享了一张带有xrp的图片,似乎在暗示某种潜在的合作。 Cardano的创始人查尔斯·霍斯金森(Charles Hoskinson)表达了希望在Cardano区块链上看到XRP DeFi的愿望,…

    2025年12月8日
    000
  • CETUS协议利用停顿操作,触发2.23亿美元的损失和SUI代币抛售

    2025年5月26日,sui/usdt 4小时图表显示了一个看涨的旗形形态。这种形态通常出现在急剧上涨后,随后进入一个向下倾斜的通道中。 2025年5月26日,在SUI/USDT 4小时图上出现了看涨的旗形。这种形态预示着之前上升趋势可能的延续。 若此看涨旗形得以确认,SUI的价格可能从当前的3.5…

    2025年12月7日
    000
  • SOLV协议加深了与Chainlink的储备证明(POR)系统的整合

    solv协议是一个以比特币为基础的领先defi平台,已经深化了与chainlink储备证明(por)系统的整合。 SOLV协议是比特币生态中的一个重要DeFi平台,现已宣布与Chainlink的储备证明(POR)系统实现更紧密的结合。 这一举措旨在为SOLV的标记化比特币产品SOLVBTC及其20亿…

    2025年12月7日
    000
  • 连锁链接(链接)价格接近突破点,可能触发大量向上移动

    chainlink的价格正接近一个重要的技术转折点,专家认为这可能引发显著的上涨趋势。 Chainlink的价格正靠近一个关键的技术节点,专家指出这可能触发大量的向上波动。Oracles代币在日线图上形成了一个下降楔形形态,最近的价格走势正在测试自2024年底以来一直压制增长的阻力位。 加密货币市场…

    2025年12月7日
    000
  • ChainLink(Link)在开发活动方面继续主导着Crypto的现实资产(RWA)领域

    santiment在社交媒体平台x上的一篇新帖子中指出,chainlink在过去30天内注册了532.43个著名的github事件。 根据分析公司的说法,分散的Oracle网络链链路(Link)继续在加密货币的现实世界中占据主导地位,就开发活动而言。 santiment在社交媒体平台x上的一篇新帖子…

    2025年12月7日
    000
  • LINK币未来如何?2025-2031年Chainlink(LINK)币价格预测

    目录 Chainlink(LINK)币概述Chainlink(LINK)币价格预测:技术分析Chainlink(LINK)币价格分析每日图表上的LINK币价格分析4小时图表上的LINK币价格分析LINK币技术指标:水平和行动每日简单移动平均线 (SMA)每日指数移动平均线 (EMA) Chainli…

    2025年12月7日 好文分享
    000
  • Oracle DATE 类型存储时间戳及如何仅存储日期

    本文旨在解释 Oracle 数据库中 DATE 类型总是包含时间戳的原因,并提供在数据库中存储日期时去除时间部分的方法,重点介绍如何通过格式化函数控制日期显示,而非修改数据库结构。 在 Oracle 数据库中,DATE 类型的设计初衷就是同时存储日期和时间信息。即使你只关心日期部分,DATE 类型仍…

    2025年12月6日 java
    000
  • mysql中事务隔离级别有哪些

    读未提交允许读取未提交数据,易引发脏读、不可重复读和幻读;2. 读已提交确保读取已提交数据,避免脏读但存在不可重复读和幻读;3. 可重复读保证事务内多次读取一致,MySQL默认级别,通过MVCC和间隙锁减少幻读;4. 串行化强制事务串行执行,避免所有并发问题但性能最差。选择隔离级别需权衡一致性与性能…

    2025年12月6日 数据库
    000
  • 优化MySQL电话号码字段搜索:解决空格与格式多样性问题

    本文详细介绍了在mysql数据库中,如何高效地搜索包含空格或多种格式的电话号码字段。针对`like`查询无法识别空格字符的问题,核心解决方案是利用`replace`函数在查询时移除字段中的空格,从而实现准确匹配。教程还将探讨更全面的数据清洗策略和性能优化建议,以提升搜索效率和数据质量。 在数据库管理…

    2025年12月6日 后端开发
    000
  • OpenJPA 在 Oracle 中处理字符串长度限制的警告与解决方案

    本文深入探讨了 openjpa 在与 oracle 数据库交互时,针对字符串字段可能遇到的“值超过 4000 字节/字符”的警告信息。该警告源于 oracle `varchar2` 数据类型的默认 4000 字节限制。教程将详细介绍两种主要的解决方案:通过 `@column(length = n)`…

    2025年12月6日 java
    000
  • Java中死锁如何避免 分析死锁产生的四个必要条件

    预防死锁最有效的方法是破坏死锁产生的四个必要条件中的一个或多个。死锁的四个必要条件分别是互斥、占有且等待、不可剥夺和循环等待;其中,互斥通常无法破坏,但可以减少使用;占有且等待可通过一次性申请所有资源来打破;不可剥夺可通过允许资源被剥夺打破;循环等待可通过按序申请资源解决。此外,reentrantl…

    2025年12月5日 java
    300
  • Java中MANIFEST.MF的作用 详解清单文件

    manifest.mf是java中jar文件的元数据配置文件,位于meta-inf目录下,用于定义版本、主类、依赖路径等关键信息。1. 它允许指定入口类,使jar可直接运行;2. 通过class-path管理依赖,减少类加载冲突;3. 可配置安全权限,如设置沙箱运行;4. 常见属性包括manifes…

    2025年12月5日 java
    000
  • Java中枚举类型怎么定义 掌握Java枚举的定义和常用方法

    java中定义枚举类型使用enum关键字,例如public enum weekday { monday, tuesday,…};枚举可包含字段和方法,如添加中文名称字段及获取方法;可在switch语句中使用,确保覆盖所有值;常用方法包括values()、valueof()、ordinal…

    2025年12月4日 java
    000

发表回复

登录后才能评论
关注微信