[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)
--//这样就形成环.
--//不过好像对方的情况更复杂!!

[20180801]insert导致死锁.txt的更多相关文章

  1. Insert 导致死锁的两种情况

    官档原文,懒得翻译了 https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html INSERT sets an exclusive lo ...

  2. [经验分享] MySQL Innodb表导致死锁日志情况分析与归纳【转,纯学习】

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

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

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

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

    在CSDN中发现这篇文章,讲解的比较详细,所以在这里备份一个.原文链接:http://blog.csdn.net/breaksoftware/article/details/8167641 DllMa ...

  5. [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)

    [译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...

  6. 不要使用 Dispatcher.Invoke,因为它可能在你的延迟初始化 Lazy 中导致死锁

    WPF 中为了 UI 的跨线程访问,提供了 Dispatcher 线程模型.其 Invoke 方法,无论在哪个线程调用,都可以让传入的方法回到 UI 线程. 然而,如果你在 Lazy 上下文中使用了 ...

  7. 在有 UI 线程参与的同步锁(如 AutoResetEvent)内部使用 await 可能导致死锁

    AutoResetEvent.ManualResetEvent.Monitor.lock 等等这些用来做同步的类,如果在异步上下文(await)中使用,需要非常谨慎. 本文将说一个在同步上下文中非常常 ...

  8. [译]async/await中使用阻塞式代码导致死锁

    原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...

  9. 信号处理函数陷阱:调用malloc导致死锁[转]

    概览 因malloc是加锁的,上网了解的相关信息,额外了解到信号处理规范使用,mark 正文 在执行malloc的过程中,跳转到了信号处理函数中.而信号处理函数在调用某个系统api时,内部又调用了ma ...

随机推荐

  1. Spark基础脚本入门实践1

    1.创建数据框架 Creating DataFrames val df = spark.read.json("file:///usr/local/spark/examples/src/mai ...

  2. live-server 快速搭建服务

    原因: 在2018年3月2日偶然情况下听到一个大佬提起“live-server”这东西, 我就研究一下,用过的人才知道live-server多么方便... 功能: 当启动live-server服务的文 ...

  3. Comparable接口和Comparator接口的不同用法

    两者都可用来在定义比较方法,然后用在排序中. Comparable是类本身继承的接口 Comparator实在类外定义一个排序的类 比较而言,觉得Comparator更灵活一些,但是Comparabl ...

  4. 第五章:Android布局

    View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).帧布局(FrameLayout).绝对布局( ...

  5. mysql 开发进阶篇系列 38 mysql日志之错误日志log-error

    一.mysql日志概述 在mysql中,有4种不同的日志,分别是错误日志,二进制日志(binlog日志),查询日志,慢查询日志.这此日志记录着数据库在不同方面的踪迹(区别sql server里只有er ...

  6. Feign禁用Hystrix

    1.完全禁用Hystrix配置yml文件feign.hystrix.enabled=false 2.部分禁用Hystrix2.1.FeignNoHystrixConfigure.java——编写Fei ...

  7. #8 Python数学方法

    前言 前几节了解了Python的不同数据类型,有小伙伴会问,不同的数据类型之间是否可以相互转换?肯定是可以的,本篇博文主要记录数字类型的转换,其他类型的相互转换会在下几节记录,Here we go! ...

  8. IOS获取资源路径

    1. 获取已经添加到xcode工程中的某一资源文件 file.txt 的路径 NSString *filePath_= [[NSBundle mainBundle] pathForResource:@ ...

  9. kubernetes系列(一)安装和配置

    谈到kubernetes(或者说k8s)不得不提到云计算.虚拟化以及容器技术,相关介绍网上一大堆,不再赘述.而kubernetes的出现就是为了高效的管理云端运行的docker容器. 环境 docke ...

  10. centos每天自动备份mysql数据库

    #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #数据库用户名 db ...