锁产生的原因:如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁。
同一张表不同SESSION持有不同记录
SQL> create table t1(id int); Table created. SQL> create table t2(id int); Table created. SQL> select * from t1; ID
----------
1
2 SQL> select * from t2; ID
----------
2
1 开始测试: SESSION 1:
SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE
---------- ---------- ----------
48 0 0 SESSION 2:
SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE
---------- ---------- ----------
38 0 0 SQL> select * from v$lock where sid in (48,38) and type in ('TM','TX'); no rows selected SESSION 1:
SQL> update t1 set id=3 where id=1; 1 row updated. SESSION 2: SQL> update t1 set id=4 where id=2; 1 row updated. 查看此时行锁情况:
SQL> select * from v$lock where sid in (48,38) and type in ('TM','TX'); ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
006EBE84 006EBEB4 48 TM 76908 0 3 0 33 0
006EBE84 006EBEB4 38 TM 76908 0 3 0 15 0
336F4CB0 336F4CF0 48 TX 327711 12767 6 0 33 0
331415AC 331415EC 38 TX 262152 12576 6 0 15 0 SESSION 1:
SQL> update t1 set id=4 where id=2;
此时SESSION 1HANG住: 查看此时行锁信息:
SQL> select * from v$lock where sid in (48,38) and type in ('TM','TX'); ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
3500122C 35001258 48 TX 262152 12576 0 6 17 0
006EBE84 006EBEB4 48 TM 76908 0 3 0 68 0
006EBE84 006EBEB4 38 TM 76908 0 3 0 50 0
336F4CB0 336F4CF0 48 TX 327711 12767 6 0 68 0
331415AC 331415EC 38 TX 262152 12576 6 0 50 1 SESSION 2执行:
update t1 set id=3 where id=1; 此时SESSION1报:
SQL> update t1 set id=4 where id=2;
update t1 set id=4 where id=2
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource ------------------------------------------------------------------------ SESSION 1(48):
SQL> update t1 set id=3 where id=1; 1 row updated. SQL> update t1 set id=4 where id=2;
update t1 set id=4 where id=2
* ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource SESSION 2 (38): SQL> update t1 set id=4 where id=2; 1 row updated. update t1 set id=3 where id=1; 查看trace 文件信息: Session 38:
sid: 38 ser: 190 audsid: 1440036 user: 91/TEST flags: 0x45
pid: 27 O/S info: user: oracle, term: UNKNOWN, ospid: 5535
image: oracle@june (TNS V1-V3)
client details:
O/S info: user: oracle, term: pts/3, ospid: 5534
machine: june program: sqlplus@june (TNS V1-V3)
application name: SQL*Plus, hash value=3669949024
current SQL:
update t1 set id=3 where id=1 ----- End of information for the OTHER waiting sessions ----- Information for THIS session: ----- Current SQL Statement for this session (sql_id=2377z63nmj7ps) -----
update t1 set id=4 where id=2

同一张表不同SESSION相互持有对方记录引发的死锁的更多相关文章

  1. 修改2张表不同SESSION相互持有记录引发的死锁

    死锁产生的原因:如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁. 2张表不同SESSION持有不同记录 SQL> create table t1(id int); Tabl ...

  2. oracle进行一对多关联查询的时候,获取副表(也就是多条记录的那张表)的最新一条记录进行关联,如何获取多条记录最新一条呢?

    例如以下场景: 一条新闻对应多条审核记录,用户想知道这条新闻走到哪一步审核了. 使用:select * from (select b.*,(ROW_NUMBER() OVER (PARTITION B ...

  3. django中有外键关系两张表的相互查找方法

    两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 1  平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列, ...

  4. django中两张表有外键关系的相互查找方法,自定义json编码方法

    两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列,该如何 ...

  5. sqlserver默认隔离级别下并发批量update同一张表引起的死锁

    提到死锁,最最常规的场景之一是Session1 以排它锁的方式锁定A表,请求B表,session2以排它锁的方式锁定B表,请求A表之类的,访问顺序不一致导致死锁的情况本文通过简化,测试这样一种稍显特殊 ...

  6. oracle创建第三方数据接口表,指定特定用户访问某张表

    /*****创建用户并指定操作哪张表开始******/ --1.创建用户并设置默认表空间 CREATE USER CHENGDWY IDENTIFIED BY CHENGDWY DEFAULT TAB ...

  7. 十几张表的join(千万级/百万级表) 7hours-->5mins

    ================START============================== 来了一个mail说是job跑得很慢,调查下原因 先来看下sql: SELECT h.order_ ...

  8. 关于oracle的锁表解决session marked for kill

    oracle 使用的过程中,有时候会遇到锁表的情况,数据库增.删.改.查都是会锁表的,但是锁的类型会不同, 大多是行锁,部分会是表锁. 在oracle运行中,一直是有表在锁的,只不过很快一个操作结束, ...

  9. Hibernate每个层次类一张表(使用注释)

    在上一文章中,我们使用xml文件将继承层次映射到一个表. 在这里,我们将使用注释来执行同样的任务.需要使用@Inheritance(strategy = InheritanceType.SINGLE_ ...

随机推荐

  1. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) { int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出.这样, ...

  2. Qt 学习之路 :Qt Quick Controls

    自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变 ...

  3. linux 上查找pid,筛选出来

    ps -ef | grep httpd find / -name "1000sql.txt" 查找命令

  4. xslt语法之---If Else

    大家都知道,XSL中是没有if else的,那么要想实现if else该怎么办呢? 其实很简单 <xsl:choose> <xsl:when test="position( ...

  5. php代码优化技巧

    搬运: 1. 尽量采用大量的PHP内置函数. 2. echo 比print 快. 3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 4. 在执行for循环之前确定最大循环数,不要每循环 ...

  6. angularJS随笔

    1.作用域 基于作用域的事件传播 作用域可以像DOM节点一样,进行事件的传播.主要是有两个方法: broadcasted :从父级作用域广播至子级 scope emitted :从子级作用域往上发射到 ...

  7. android 利用隐式Intent打开图片

    实现功能   点击"查看图片"时能够跳出提示,选择系统图库打开还是自己编写的应用打开,并且对于下载好的图片也有效. 1.我将 qiaoba.jpg 放在 res/drawable  ...

  8. CI 笔记2,(命令规范等)

    调试模式开启,$this->output->enable_profiler(TRUE); 保留字,不能和控制器重名,有3个,CI_Controller ,Default, index.这三 ...

  9. 在window系统下配置login.sql

    在window系统下配置login.sql 他的位置是登录用户的文件夹,我的win7系统位置是: C:\Users\Administrator 我的login.sql下载地址: http://file ...

  10. oracle数组学习资料

    --oracle数组,所谓数组就是  字段的 个数,数组应该很有用 --可变数组 declare  type v_ar is varray(10) of varchar2(30);   my_ar v ...