如何找出Oracle死锁的原因

2024-03-27

当使用多个用户测试我的应用程序时,我遇到了 ORA-00060 死锁错误。我不确定如何确定此错误的原因,因此如果有人可以帮助我,我将不胜感激。

我查看了为此事件生成的跟踪文件,它显示了哪个查询导致了此事件:

UPDATE TABLE_A SET CK=CK+1 WHERE A_ID=(
    SELECT A_ID FROM TABLE_B WHERE SOME_COLUMN=:SOMECOLUMN
)

它还生成了这个:

[Transaction Deadlock]

The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:

Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-0002a675-00000000        51     200    SX   SSX       52      22    SX   SSX
TM-0002a675-00000000        52      22    SX   SSX       51     200    SX   SSX

session 200: DID 0001-0033-0000014A session 22: DID 0001-0034-0000005A 
session 22: DID 0001-0034-0000005A  session 200: DID 0001-0033-0000014A 

Rows waited on:
  Session 200: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
  (dictionary objn - 173745, file - 20, block - 339, slot - 0)
  Session 22: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
  (dictionary objn - 173745, file - 20, block - 339, slot - 0)

如何使用上述信息找出导致问题的原因? TABLE_A 或 TABLE_B 上没有任何未索引的外键(我认为这通常是导致此类错误的原因)。

当我运行此查询时:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE 
FROM DBA_OBJECTS 
WHERE OBJECT_ID = 173745;

我在完全不同的表上得到了主键的名称!这是否可以作为僵局发生原因的线索?


因为涉及的队列是“TM”队列,并且因为持有锁的模式是“SX”,而等待锁的模式是“SSX”,所以我可以绝对肯定地告诉你,这是由于外键关系,其中引用表(子表)列未建立索引。如果您查找未索引的外键并添加索引,这个问题应该会消失。

希望有帮助......

附:我的演示文稿“理解和解释死锁,或者如何处理 ORA-00060”,可以在 OakTable 站点下载,http://www.oaktable.net http://www.oaktable.net。查看“贡献的文件”部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找出Oracle死锁的原因 的相关文章

  • 在 C# 中多次使用单个参数的更好方法

    我刚开始使用准备好的语句从数据库查询数据 并且在实现 C 参数 特别是 OracleParameters 时遇到问题 假设我有以下 SQL string sql select from table1 t1 table2 t2 where t
  • 显示多个表的账户余额

    我有以下两个表 其中存储有关贷记和借记记录的信息 couponCr 表包含 voucherType voucherPrefix voucherNo crparty cramount SALES S 1 1 43000 SALES S 2 1
  • 单向关系和双向关系的区别

    我想知道这两个词是什么意思 我遇到他们是在教义的文档 http www doctrine project org documentation manual 2 0 en association mapping 但我不明白他们的意思 这与常见
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • 如何使用 EclipseLink 处理以 Oracle 类型作为输入或输出的 Oracle 存储过程调用

    我进行了概念验证 以了解使用 EclipseLink 调用存储过程的效率如何 我能够使用带有标量 原始数据类型 链接整数 varchar 等 的 EclispeLink 来调用 Oracle 存储过程 我想了解如何使用集合 Oracle 类
  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • 使用 SQL 确定子网掩码的 cidr 值

    我想找到一种方法来执行 SQL 查询 该查询将计算存储在数据库中的子网掩码的 cidr 位表示 例如 我在数据库中存储了 255 255 255 0 或其十进制值 4294967040 我想通过查询进行选择并返回 24 表示 我已经执行了类
  • 在单个查询中设置和选择?

    我想知道是否可以在单个查询中设置和选择 像这样的事情 SET LOCAL search path TO 1 SET LOCAL ROLE user SELECT from posts 你可以这样做 with some set as sele
  • 当我耗尽 bigint 生成的密钥时会发生什么?怎么处理呢?

    我自己无法想象一个好的答案 所以我想在这里问 在我心里 我总是想知道 如果AUTO INCREMENT PRIMARY ID我的专栏MySQL表用完了吗 举例来说 我有一个有两列的表 一个ID auto increment primary
  • JOOQ 查询 JOIN ON WITH 子句

    如何编写 JOOQ 查询来连接 with 子句中的字段 例如 我尝试过 create with a as select val 1 as x val a as y select from tableByName a join ANOTHER
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • 如何在 Doctrine 中使用 andWhere 和 orWhere ?

    WHERE a 1 AND b 1 Or b 2 AND c 1 OR c 2 我怎样才能在教义中做到这一点 q gt where a 1 q gt andWhere b 1 q gt orWhere b 2 q gt andWhere c
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • SQL:将一个表中的所有记录插入到另一表中,而不指定列

    我想将备份表 foo bk 中的所有记录插入到 foot 表中 而不指定特定的列 如果我尝试这个查询 INSERT INTO foo SELECT FROM foo bk 我会收到错误 插入错误 列名称或提供的值的数量与表定义不匹配 是否可
  • 如何在 SQL 中存储目标(例如 RPG Quest)

    今天有人问我他们应该如何将任务目标存储在 SQL 数据库中 在这种情况下 请考虑角色扮演游戏 目标可能包括以下一些内容 发现 地点 杀死 n MOB 类型 获取 对象 的 n 个 实现 技能组 中的 技能 你在角色扮演游戏中获得的所有其他东
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐

  • 如何 rbind 与其列名称匹配的向量?

    rbind 在将向量绑定在一起时不检查列名 l list row1 c 10 20 row2 c 20 10 names l row1 c A B names l row2 c B A l row1 A B 10 20 row2 B A 2
  • 水豚与 :js => true 导致测试失败

    我对 Capybara 和 Rails 测试都很陌生 所以如果这是一个简单的答案 请原谅我 我有这个测试 it should be able to edit an assignment do visit dashboard path sel
  • 在 RabbitMQ 监听器中隐藏运行时异常

    在某些故意发生的情况下 我使用了一些异常来拒绝消息 但在控制台中显示了乍一看似乎不太正常的异常 如何在登录控制台 文件时隐藏该特定异常 我正在使用 spring boot 和默认记录器 public static class Undispa
  • 用于平滑开放 3D 网格边缘的算法

    我有一个 3D 网格 它代表一个具有一些粗糙边界的表面 我想对其进行平滑处理 我使用半边数据结构来存储几何图形 因此我可以轻松地迭代边界边 顶点和面 我还可以使用点积和叉积轻松确定给定的一对边是否是凸 凹的 平滑边缘的最佳方法是什么 使它们
  • MSBuild 使用错误版本的程序集来编译 RDLC 文件

    我正在使用 VS 2010 中的 reportviewer 控件来创建客户端报告 rdlc 在我的开发机器上一切正常 当我手动编译 通过 VS2010 并手动部署到没有安装开发工具的测试机器时 为了让测试机正常工作 无需安装 VS2010
  • 启动失败。未找到二进制文件。 Eclipse Helios 上的 CDT

    我在 Ubuntu 10 04 上使用 Eclipse Helios 并尝试在其上安装 CDT 插件 我从这里下载here http www eclipse org downloads download php file tools cdt
  • 换行 NSButton 标题

    有什么方法可以让 NSButton 标题在宽度比按钮宽度长时换行 而不是被剪裁 我正在尝试创建一个单选按钮 其中的文本可能很长并且有多行 我考虑让它工作的一种方法是使用 NSRadioButton 类型的 NSButton 但无法让多行文本
  • 合并 2 个视频文件时出现问题 [匹配规格后]

    基本上我得到了一个 mp4 和一个 flv 文件 我想连接它们 mp4 应该是简介 所以在问了一个之前关于此的问题 https stackoverflow com questions 34029123 combine 2 flv video
  • 捆绑包标识符与保留捆绑包标识符不同

    我正在尝试在 iTunes 上上传我的应用程序 为此 我创建了一个应用程序 ID 并保留了一个包标识符 在我的项目中 我更改了 info plist 文件中的包标识符 但是 当我尝试在 itunes 上上传我的应用程序时 它显示错误 捆绑包
  • 如何使模式弹出窗口随页面滚动其内容?

    我有一个模式弹出窗口 当它加载高于浏览器高度的内容时 我无法向下滚动以查看其余信息 相反 背景可以滚动 但弹出窗口不会 相反 我想让弹出窗口保持不变 当用户向上或向下滚动时 它会将弹出窗口保留在适当的位置 并让他们滚动到内容的底部 如果您在
  • 为 libcurl 添加自签名 SSL 证书

    我在我的 C 应用程序中使用 libcurl 与我设置的 HTTPS 服务器进行通信 我在该服务器上生成了一个自签名证书 我希望将其与curl 一起使用 我知道将 CURLOPT SSL VERIFYPEER 设置为 0 可以绕过 SSL
  • SQL Server 2014 中具有多个条件的情况

    我有一个表 FinancialTrans 其中有很多字段 但其中只有 3 个字段与我有关 AcctID TransTypeCode DateOfTrans Field 4 Field 5 Field 6 123 TOLL 2016 06 0
  • 如何在 yii 的更新视图中加载多选列表框中选定的列表项?

    我有一个multiple select list box for Staff in Create Service Form 用于在创建新服务时选择多名员工 为此 我可以在一项服务上分配多名员工 I saved staff id字段为 mod
  • 如何对特定文件夹设置777权限? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何对文件夹设置777权限 我需要将以下文件夹的权限设置为777 管理 包含 模块 安装 我不知道如何在 Windows 7 中的特定文件
  • System.Runtime,Version=4.2.1.0,PublicKeyToken=b03f5f7f11d50a3a 的版本高于引用的程序集

    我将 ASP NET CORE 应用程序从 sdk NET Core 2 0 升级到 NET Core 2 1 我可以在本地主机中运行该解决方案 但是当我将其部署到另一台服务器时出现异常 例外情况如下 到目前为止 我为解决该问题所做的步骤如
  • 单击按钮后 React hooks useInterval 重置

    我有钩子 useInterval 它每 10 秒自动下载一次数据 但是我也有按钮 可以在每时每刻手动下载数据 当我单击按钮时 我很难重新启动间隔计时器 所以基本上 如果间隔计数到 5 但我同时单击按钮 间隔应该重新启动 并在下载数据之前再次
  • link_to image_tag 与 Rails 中的内部文本或 html

    我想用 Ruby on Rails 输出以下内容link to and image tag方法 a href Lorem Ipsum img src images menu arrow down gif a Rails 中什么是好方法 您可
  • 为什么在 window 对象中定义 body [重复]

    这个问题在这里已经有答案了 我只是在控制台上玩 注意到如果我输入 body它返回 这显然与window body 因此也返回了 Then document body也返回 正如预期的那样 因为身体是身体的一部分document对象 据我所知
  • CakePhp - 关联数据未保存(但主模型数据确实保存)

    所以 我在 CakePhp 中有一个使用 Formhelper 的表单 此表单中有两个关联模型 Booking 和 Guest 数据库表似乎设置正确 因为页面通过模型中的关联足够准确地填充了值 保存表单数据时 会保存预订信息 但不会保存宾客
  • 如何找出Oracle死锁的原因

    当使用多个用户测试我的应用程序时 我遇到了 ORA 00060 死锁错误 我不确定如何确定此错误的原因 因此如果有人可以帮助我 我将不胜感激 我查看了为此事件生成的跟踪文件 它显示了哪个查询导致了此事件 UPDATE TABLE A SET