免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1105 | 回复: 0
打印 上一主题 下一主题

Oracle Bitmap索引导致的死锁 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:53 |只看该作者 |倒序浏览
项目中遇到一个死锁问题,一下是trace文件内容:

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-0030002b-00001695        76     138     X             83     369           S
TX-0006002e-00009522        83     369     X             76     138           S

session 138: DID 0001-004C-000003EC     session 369: DID 0001-0053-00000400
session 369: DID 0001-0053-00000400     session 138: DID 0001-004C-000003EC

Rows waited on:
  Session 138: obj - rowid = 0001A6BF - AAAaa/AAAAAAAAAAAA
  (dictionary objn - 108223, file - 0, block - 0, slot - 0)
  Session 369: obj - rowid = 0001A6BF - AAAaa/AAAAAAAAAAAA
  (dictionary objn - 108223, file - 0, block - 0, slot - 0)

----- Information for the OTHER waiting sessions -----
Session 369:
  sid: 369 ser: 4463 audsid: 8732205 user: 2346/RSW
    flags: (0x41) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x40008) -/-
  pid: 83 O/S info: user: oracle, term: UNKNOWN, ospid: 16436
    image: oracle@svdg0061
  client details:
    O/S info: user: ccms, term: , ospid: 16393
    machine: svdg0061 program: sqlplus@svdg0061 (TNS V1-V3)
    application name: SQL*Plus, hash value=3669949024
  current SQL:
  DELETE RSW_VALUATION WHERE BAT_ID = :"SYS_B_0"

----- End of information for the OTHER waiting sessions -----

Information for THIS session:

----- Current SQL Statement for this session (sql_id=0pdxtvt3mk8cn) -----
UPDATE RSW_VALUATION A SET A.TIP_FLG = :"SYS_B_0" WHERE A.TIP_FLG <> :"SYS_B_1" AND ( a.CLNT_ID,a.SEC_ID,a.POS_TYPE,a.SEC_ID_TYPE,a.LOT_NUM,a.PRTFO_ID,a.AF_DT
, A.BAT_ID ) IN ( SELECT b.CLNT_ID,b.SEC_ID,b.POS_TYPE,b.SEC_ID_TYPE,b.LOT_NUM,b.PRTFO_ID,b.AF_DT, MAX(B.BAT_ID) FROM RSW_VALUATION B  WHERE B.RKSI_ID = :"SYS
_B_2" GROUP BY b.CLNT_ID,b.SEC_ID,b.POS_TYPE,b.SEC_ID_TYPE,b.LOT_NUM,b.PRTFO_ID,b.AF_DT )
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
39be4e4d0       285  package body RSW.RSW_PKG_INB_ROLLBACK
3eaa47f98         1  anonymous block
3fb32fc70       525  package body RSW.RSW_PKG_FRAMEWORK
3fb32fc70       409  package body RSW.RSW_PKG_FRAMEWORK
39bbd07a0         4  anonymous block
===================================================


    这个死锁产生的背景是两个不同的session用不同的参数执行相同的package。这个package先做delete操作,然后做update操作。表rsw_valuation的tip_flg字段上建有bitmap索引。
    从trace文件中可以看出,发生死锁的两个session都持有排他锁(X),等待共享锁(S)。这两个session分别是138,369(红色下划线部分)。
    发生死锁时,current session(下称S1)正在执行update语句,即其delete语句已经操作完成。other session(下称S2)正在执行delete语句。
死锁是这样发生的:
   S1,S2在执行delete(或update)语句都取得了相应索引块的排他锁X,此时S2的delete需要申请相应行的共享锁,由于S1拥有该行的排他锁,故S2被阻塞;同时S1的update语句同样申请相应行的共享锁,但被S2排他,无法取得。所以产生死锁。

oracle 11g 日志路径(Windows):X:/app/$user/diag/rdbms/...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP