[20180801]insert导致死锁.txt

--//链接http://www.itpub.net/thread-2104135-2-1.html的讨论,自己有点疏忽了,插入主键相同也会导致死锁.
--//自己按照链接http://www.xifenfei.com/2011/05/insert%E5%BC%95%E8%B5%B7%E7%9A%84%E6%AD%BB%E9%94%81.html
--//自己测试看看:

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

2.测试:
--//session 1:
SCOTT@test01p> SCOTT@test01p> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID                     PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
        86         73 6388:6512                DEDICATED 6448                      57          6 alter system kill session '86,73' immediate;

CREATE TABLE t1(ID NUMBER);
ALTER TABLE t1 ADD primary key (ID);
INSERT INTO t1 VALUES(1);

--//session 2:
SCOTT@test01p> @ spid

SID    SERIAL# PROCESS                  SERVER    SPID                     PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
       237         59 6988:424                 DEDICATED 5872                      15          6 alter system kill session '237,59' immediate;

INSERT INTO t1 VALUES(2);

--//现在没事没有冲突.
--//回到session 1:
INSERT INTO t1 VALUES(2);

--//挂起,但是没有死锁.
--//回到session 2:
INSERT INTO t1 VALUES(1);

--//session 1出现如下提示:
SCOTT@test01p> INSERT INTO t1 VALUES(2);
INSERT INTO t1 VALUES(2)
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource

--//但是session 2一样会挂起.因为主键冲突还存在.

--//session 1:
SCOTT@test01p> commit ;
Commit complete.

--//session 2:
SCOTT@test01p> INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(1)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C0011640) violated

--//提示主键冲突.感觉应该在应用很少出现这样的情况.

3.看看转储:

*** 2018-08-01 20:24:23.459
*** SESSION ID:(86.73) 2018-08-01 20:24:23.459
*** CLIENT ID:() 2018-08-01 20:24:23.459
*** SERVICE NAME:(test01p) 2018-08-01 20:24:23.459
*** MODULE NAME:(SQL*Plus) 2018-08-01 20:24:23.459
*** ACTION NAME:() 2018-08-01 20:24:23.459
*** CONTAINER ID:(3) 2018-08-01 20:24:23.459
 
*** 2018-08-01 20:24:23.459
DEADLOCK DETECTED ( ORA-00060 )
 
[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

*** 2018-08-01 20:24:23.460
information may aid in determining the deadlock:
 
Deadlock graph:
                                          ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name                             process session holds waits  process session holds waits
TX-00100015-0000060F-00000000-00000000         57      86     X             15     237           S
TX-00070013-00005F4E-00000000-00000000         15     237     X             57      86           S
 
session 86: DID 0001-0039-00000014    session 237: DID 0001-000F-0000000A
session 237: DID 0001-000F-0000000A    session 86: DID 0001-0039-00000014
 
Rows waited on:
  Session 86: no row
  ~~~~~~~~~~~~~~~~~~~
  Session 237: no row
 ~~~~~~~~~~~~~~~~~~~~
----- Information for the OTHER waiting sessions -----
Session 237:
  sid: 237 ser: 59 audsid: 26211525 user: 109/SCOTT
  pdb: 3/TEST01P
    flags: (0x100045) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x40009) -/-/INC
  pid: 15 O/S info: user: oracle, term: XXX, ospid: 5872
    image: ORACLE.EXE (SHAD)
  client details:
    O/S info: user: XXX\Administrator, term: XXX, ospid: 6988:424
    machine: WORKGROUP\XXX program: sqlplus.exe
    application name: SQL*Plus, hash value=3669949024
  current SQL:
  INSERT INTO t1 VALUES(1)
 
----- End of information for the OTHER waiting sessions -----
 
Information for THIS session:
 
----- Current SQL Statement for this session (sql_id=0s3pjym30ya3w) -----
INSERT INTO t1 VALUES(2)
===================================================
--//太长..
--//链接http://www.itpub.net/thread-2104135-1-1.html比较牛,有4个会话串在一起.
--//实际上我自己有点疑惑的地方:
Rows waited on:
  Session 86: no row
  Session 237: no row

--//no row,按照道理应该有行记录.没想到主键冲突会出现这样的情况.
--//链接的错误应该类似这样:

--//sesion 1:
SCOTT@test01p(86,73)> INSERT INTO t1 VALUES(1);
1 row created.

--//sesion 2:
SCOTT@test01p(237,59)> INSERT INTO t1 VALUES(2);
1 row created.

--//sesion 3:
SCOTT@test01p(161,69)> INSERT INTO t1 VALUES(3);
1 row created.

--//sesion 4:
SCOTT@test01p(156,71)> INSERT INTO t1 VALUES(4);
1 row created.

--//然后分别插入,就会分别挂起!!
--//sesion 1:
SCOTT@test01p(86,73)> INSERT INTO t1 VALUES(2);

--//sesion 2:
SCOTT@test01p(237,59)> INSERT INTO t1 VALUES(3);

--//sesion 3:
SCOTT@test01p(161,69)> INSERT INTO t1 VALUES(4);

--//sesion 4:
SCOTT@test01p(156,71)> INSERT INTO t1 VALUES(1);

*** 2018-08-01 20:50:46.479
DEADLOCK DETECTED ( ORA-00060 )
 
[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
TX-000B0005-000013E2-00000000-00000000         57      86     X             58     156           S
TX-000A0007-000065E1-00000000-00000000         58     156     X             38     161           S
TX-00090002-00006203-00000000-00000000         38     161     X             15     237           S
TX-000F001B-00000835-00000000-00000000         15     237     X             57      86           S
 
session 86: DID 0001-0039-00000014    session 156: DID 0001-003A-0000000A
session 156: DID 0001-003A-0000000A    session 161: DID 0001-0026-0000005B
session 161: DID 0001-0026-0000005B    session 237: DID 0001-000F-0000000A
session 237: DID 0001-000F-0000000A    session 86: DID 0001-0039-00000014
 
Rows waited on:
  Session 86: no row
  Session 156: no row
  Session 161: no row
  Session 237: no row

--//session 1(86)  阻塞 session 4(156)
--//session 4(156) 阻塞 session 3(161)
--//session 3(161) 阻塞 session 2(237)
--//session 2(237) 阻塞 session 1(86)
--//这样就形成环.
--//不过好像对方的情况更复杂!!

转载于:https://www.cnblogs.com/lfree/p/9403939.html

[20180801]insert导致死锁.txt相关推荐

  1. [20160608]自治事务引起死锁.txt

    [20160608]自治事务引起死锁.txt --链接http://www.itpub.net/thread-2060966-2-1.html上的讨论,很久以前也遇到过 --(http://blog. ...

  2. 解决MySQL事务未提交导致死锁报错 避免死锁的方法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xuheng8600/article/d ...

  3. MySQL Innodb表导致死锁日志情况分析与归纳

    案例描述 在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志. 两个sql语句如下: (1)insert into back ...

  4. mysql 表死锁_MySQL Innodb表导致死锁日志情况分析与归纳

    案例描述在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志. 两个sql语句如下:(1)insert into backup ...

  5. update导致死锁

    update delete 操作,如果走的索引,对索引和主键索引加行锁 如果没有走索引,锁整张表. 不开启事务,mysql本身也会加锁 一般MYSQL在执行CREATE,ALTER,INSERT等命令 ...

  6. navicat下对mysql创建索引导致死锁,数据库崩溃,完美解决方案

    文章目录 写在前面 一.短事务场景下,执行DDL语句场景分析 1.短事务场景下,执行表字段添加操作 2.短事务场景下,执行表字段修改操作 3.短事务场景下,执行表字段删除操作 (1)往里添加一条数据试 ...

  7. DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)

    之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因.本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题.(转载请指明出于breaksoftw ...

  8. DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系

    前几篇文章一直没有在源码级证明:DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区.这个论证非常重要,因为它是使其他线程不能进入临界区从而导致 ...

  9. DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2

    本文介绍使用Windbg去验证<DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子>中的结论,调试对象是文中刚开始那个例子.(转载请指明出于breakso ...

  10. DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子

    有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题.首先我们看一段比较经典的"DllMain中死锁"代码.(转载请指明出于breaksof ...

最新文章

  1. linux内核用什么调试,什么是开发/调试Linux内核最有效和最优雅的方式
  2. 变态最大值--nyoj题目811
  3. 深入浅出 PouchContainer 容器化业务实践 Workshop 开放报名
  4. .NET 导出Excel
  5. keepalived(1)——准备
  6. Linux第四章自测习题——Linux系列学习笔记
  7. 安卓linux环境 查看进程,查看基于Android 系统单个进程内存、CPU使用情况的几种方法...
  8. day22 Java学习 IO流(序列流)
  9. 136.只出现一次的数字
  10. linux基础知识总结(四)
  11. 团队项目第二周 - 需求规格说明书 - 天冷记得穿秋裤队
  12. 4步带你从Web前端小白到入门!
  13. Stream介绍及简单操作!
  14. 字符串常量池、堆、栈
  15. bug解决 2021-09-25 Unity人物动画无法正常播放的问题
  16. matlab做挖掘机仿真,基于Proe_Adams_Matlab挖掘机的机电液一体化仿真
  17. android 视频转码需要权限,android 使用 ffmpeg 进行视频转码(一)
  18. java技术面试一定要跳出来的坑,可曾听闻!
  19. ios 中字符串怎么换行
  20. 算法分析----基础知识点

热门文章

  1. java基础---线程
  2. AfxMessageBox详细使用说明
  3. Python2.7学习笔记-定义函数、filter/map/reduce/lambda
  4. 命名空间“Aspose”中不存在类型或命名空间名称“Slides”。
  5. HDOJ-2095 Find your present (2) / NYOJ-528 找球号(三)
  6. [Soft]软件技术的两个趋势
  7. javascript 3月17日
  8. springmvc中校验框架(hibernate)
  9. [浪风分享]推荐一些不错的计算机书籍
  10. 【HANA系列】SAP HANA中null变成问号的问题