• oracle deadlock


    Basic operation

    su - oracle

      sqlplus / as sysdba

      show parameter background

      show parameter user_dump_dest

        background_dump_dest: path_to_trace_file

      deadlook error code is: ORA-00060

    Refer to dead lock article

          http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1528515465282

    one example of dead lock

      

    I'm going to hypothesize that there is a unique index on some (at least one) of the columns being 
    updated.  
    
    The locks are NOT on a row -- they are due to unique conflicts.  Here is exactly how to simulate 
    this:
    
    --------------------- test.sql -------------------------
    drop table t;
    create table t ( x int primary key );
    insert into t values ( 1 );
    insert into t values ( 2 );
    insert into t values ( 3 );
    insert into t values ( 4 );
    commit;
    update t set x = 5 where x = 1;
    REM in another session, run test2.sql
    pause
    update t set x = 6 where x = 2;
    ---------------------------------------------------------
    
    -------------------- test2.sql ---------------------------
    variable x1 number
    variable x2 number
    exec :x1 := 6; :x2 := 3;
    update t set x = :x1 where x = :x2;
    exec :x1 := 5; :x2 := 4;
    update t set x = :x1 where x = :x2;
    ---------------------------------------------------------
    
    Here, session 1 will get the row updated from 1 to 5 -- 5 will be "locked" in the index.
    
    Session 2 will then update 3 to 6 (no conflict, but 6 is "locked" in the index)
    
    Session 2 will then update 4 to 5 -- this'll be a conflict, unique key violation POSSIBLE at this 
    point.  Session 2 will block here.
    
    Next, session 1 tries to update 2 to 6 -- that'll be another conflict with session 2, unique key 
    violation POSSIBLE at this point.  Session 1 will block and then one of the sessions will get the 
    dead lock.
    
    That is when this trace file will be produced:
    
    *** SESSION ID:(8.3883) 2002-08-07 11:09:23.816
    DEADLOCK DETECTED
    Current SQL statement for this session:
    update t set x = :x1 where x = :x2
    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-0003003d-000011e2        14       8     X              8       7           S
    TX-00020054-0000109e         8       7     X             14       8           S
    session 8: DID 0001-000E-00000002   session 7: DID 0001-0008-00000002
    session 7: DID 0001-0008-00000002   session 8: DID 0001-000E-00000002
    Rows waited on:
    Session 7: no row
    Session 8: no row
    ===================================================
    
    
    So, basically, you have two sessions doing this update (or a similar update) and they are bumping 
    into each other with a unique index.  Look for whats unique in this table.
    
    It isn't a row lock issue -- rather, an index key collision that is happening.
    
    
    Further down in the trace file, you should be seeing something like:
    
    
    ...
    Cursor frame allocation dump:
    frm: -------- Comment --------  Size  Seg Off
     bind 0: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=03 oacfl2=0 size=48 offset=0
       bfp=01a70280 bln=22 avl=02 flg=05
       value=5     <<<<<=== the bind variable values
     bind 1: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=03 oacfl2=0 size=0 offset=24      <<<<<=== 
    the bind variable values
       bfp=01a70298 bln=22 avl=02 flg=01
       value=4
    End of cursor dump
    ***************** dump of cursor xsc=1a7681c **********************
    ........
    
    And that should help you ID where the problem is (you'll see the BR_NO and be able to identify the 
    ROWS being modified) 
     
  • 相关阅读:
    SpringCloud 学习之概述
    定位慢查询
    中止线程
    笨办法41学会说面向对象【pyinstaller安装使用
    pip安装
    笨办法40模块, 类和对象class
    笨办法39字典dict
    笨办法38列表操作
    笨办法35分支和函数
    笨办法34访问列表元素(列表方法)
  • 原文地址:https://www.cnblogs.com/lpthread/p/3410471.html
Copyright © 2020-2023  润新知