oracle 12c 死锁 处理,oracle - PLSQL Oracle 12c死锁,为什么需要对SSX Table锁进行独立删除? - 堆栈内存溢出...
我有以下两个查询导致死锁。 但是不知道为什么在这种情况下Oracle试图使SSX表锁定。
所有测试样本都试图重现该问题,仅行锁定。
------------Blocker(s)----------- ------------Waiter(s)------------
Resource Name process session holds waits serial process session holds waits serial
TM-000386AF-00000000-00000000-00000000 101 298 SX SSX 65474 27 646 SX SSX 21533
TM-000386AF-00000000-00000000-00000000 27 646 SX SSX 21533 101 298 SX SSX 65474
Query:
DELETE FROM VERSANDPALETTE V WHERE V.ID IN (SELECT COLUMN_VALUE FROM TABLE(:B1 ))
----- Information for the OTHER waiting sessions -----
Session 646:
DELETE FROM VERSANDPALETTE WHERE ID IN (SELECT * FROM TABLE(:B1 )) AND ID NOT IN (SELECT * FROM TABLE(:B2 ))
我希望删除独立的行集,并且不创建表锁。
有人暗示为什么会发生吗?
编辑2 :(问题的简化版本,需要2分钟才能复制)
谢谢你的帮助!
我使用以下代码对其进行了进一步测试:
-- setup
create table p ( x int primary key );
create table c ( x references p );
insert into p select rownum from dual connect by level <= 10;
insert into c select * from p;
commit;
-- 2 session test
-- session 1
update c set x = 2 where x = 1;
-- session 2
update c set x = 4 where x = 3;
delete from p where x = 3;
-- session 1
delete from p where x = 1;
-- deadlock is happening now
-- rollback both sessions
这导致了预期的死锁,因为子表fk上没有索引。 (正如您向我指出的那样)
令我困惑的是,当仅使用一个会话时,只有locked_mode 3 v $ locked_object打开。 某处应该有一个locked_mode 5行。
-- 1 session test
update c set x = 2 where x = 1;
update c set x = 4 where x = 3;
delete from p where x = 3;
delete from p where x = 1;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine,
a.locked_mode
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
-- no locked_mode 5 entries...
-- rollback the session
添加索引可以解决该问题:
CREATE INDEX c_index ON c(x);
-- 2 session test
-- session 1
update c set x = 2 where x = 1;
-- session 2
update c set x = 4 where x = 3;
delete from p where x = 3;
-- session 1
delete from p where x = 1;
-- deadlock is not happening :)
所以我猜有一些锁升级在继续吗? 因为单会话测试不会获取相同的表锁。
oracle 12c 死锁 处理,oracle - PLSQL Oracle 12c死锁,为什么需要对SSX Table锁进行独立删除? - 堆栈内存溢出...相关推荐
- impdp 不兼容_oracle - Oracle:使用impdp导入数据库转储时出错:Data Pump客户端与数据库版本12.1.0.2.0不兼容 - 堆栈内存溢出...
我们从Oracle DB v12创建了一个数据库转储. 1使用expdp(导出数据泵)v12.1实用程序,现在我想将其导入另一个DB v12. 1使用impdp(导入数据泵)工具. 对于杂项. 我需要 ...
- oracle 生成 json文件,oracle - PLSQL导入JSON并导出为JSON文件 - 堆栈内存溢出
用于处理json的设置: create table json_from_file (id number, data clob, constraint chk_data_is_json check (d ...
- oracle 内存 无法启动数据库,database - 无法启动Oracle数据库(处理系统参数失败) - 堆栈内存溢出...
我将在Ubuntu 16.04上设置Oracle DB 12c. 我正在遵循本指南 . 但是,当我尝试启动时,失败并显示以下错误: SQL> connect sys as sysdba Ente ...
- oracle 延迟段,oracle - 未启用延迟段创建功能(ORA-00439) - 堆栈内存溢出
我有带有DDL的.sql脚本文件超过60个表. 我正在尝试将脚本复制粘贴到SQL Developer中,连接到"Oracle Database 11g Express Edition Rel ...
- oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...
这是一个愚蠢的问题,但我似乎无法解决. 我有一个查询在OCI程序中引起麻烦,因此我想在SQL * Plus中手动运行它以检查是否有任何区别. 这是查询: select e.label as doc_n ...
- php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...
嗨,我是Oracle的新手. 我试图在PHP中使用oracle将记录插入表中. 但它不起作用,也没有抛出任何错误. 以下是我的代码. 请告诉我我做错了什么. $insertSQL= "INS ...
- oracle 异常返回值,oracle - java.sql.SQLException:无效的列类型:调用具有行类型返回值的函数时为1111 - 堆栈内存溢出...
我在一个名为" MyPackage"的Oracle软件包中有一个函数: FUNCTION MyFunction(name IN VARCHAR2) RETURN MyTable%r ...
- oracle ebcdic 转换,sql - oracle ebcdic sqlldr问题 - 堆栈内存溢出
我有一个关于如何将EBCDIC文件加载到Oracle表中的问题. 我已经阅读了许多有关该问题的主题. 但是,我似乎仍然无法取得进展. 根据COBOL副本给我的定义,我构建了如下控制文件:EBCDIC. ...
- oracle 内存错误的是什么意思,java - 是什么导致此JMS错误连接到OracleAQ? - 堆栈内存溢出...
我从正在侦听OracleAQ的Java服务中收到零星的错误. 它似乎每天晚上都在发生,我不确定发生了什么. 真的是数据库连接问题吗? 还是"出队失败"表明它已连接并且发生了其他事情 ...
- oracle 500错误,oracle - FRM-50016法律字符是0-9 - + E错误Oracle表单 - 堆栈内存溢出
我创建了Oracle Form,其中用户从目标"目标"链接"浏览""CSV"文件,我们将在文本字段项中显示. 用户按下保存按钮后,列值将从& ...
最新文章
- php做gui,php7 图形用户界面GUI如何开发
- 计算机故障报告怎么写,计算机这样的诊断报告是否正常
- html 内部浮动外部不,CSS:外部层高度自适应内部浮动层高度的方法
- 如何做一场高质量的分享
- Java判断字符串是否相同
- php面试专题---2、常量及数据类型考点
- php 负载监控_php记录服务器负载、内存、cpu状态的代码
- redis结合springboot 无法注入redisTemplate问题
- java 合并算法思想_Java实现合并两个有序序列算法示例
- 开课吧Java课堂:什么是流?如何运用字节流和字符流?
- 另类多线程生产者与消费者模式
- js判断时间两小时之内_JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)...
- webstorm中 scss或sass配置自动编译
- 怎么用php跨域请求
- 天力卓越消息服务器是什么意思,开票版药易通出现RPC服务器不可用是什么问 – 手机爱问...
- LibreOffice创建数据透视表
- Python str函数
- 电脑开机启动选择系统
- Qlikview脚本生成日历表
- flutter的坑.dart1与dart2写法的区别