注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风之人生

人生如风,却无法如风般潇洒。

 
 
 

日志

 
 
关于我

一介草民,苟活于上海滩,以甲骨文为生,偶尔对一些国家大事有些兴趣,日常无事常以丝竹之声为乐。

网易考拉推荐
GACHA精选

Oracle Dead lock处理  

2010-03-05 19:04:33|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在Oracle数据库中,我们经常会碰到死锁的情况,死锁,简单的讲,就是一个会话锁定了一个资源,这个资源可以是CPU,内存,或者是某一个锁。而另外一个session也想去获取这个锁定,那么死锁就产生了,但是由于oracle的机制,死锁的情况还是比较少产生的。一般来讲,oracle 会在产生思索后在警告日志里记录下这个错误,所以我们处理的时候就可以根据警告日志来进行排错。
比如alert.log出现了
ORA-00060: Deadlock detected. More info in file /u001/app/oracle/admin/WZP1/udump/wzp1_ora_20451.trc
我们就可以到相应的trace文件里看到以下内容;
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-001c0020-00020281       208     454     X            266      85           X
TX-00150008-00016af6       266      85     X            208     454           X
session 454: DID 0001-00D0-0000034A    session 85: DID 0001-010A-00000291
session 85: DID 0001-010A-00000291    session 454: DID 0001-00D0-0000034A
Rows waited on:
Session 85: obj - rowid = 00007724 - AAAHckAACAAACSUAAC
  (dictionary objn - 30500, file - 2, block - 9364, slot - 2)
Session 454: obj - rowid = 00007724 - AAAHckAACAAACSUAAA
  (dictionary objn - 30500, file - 2, block - 9364, slot - 0)

这个看起来就很容易知道是会话85和454产生了死锁
而且通过查询,可以查到object_number=30500的对象,这个对象上产生死锁。

SQL> select OWNER,OBJECT_NAME
  2   from dba_objects
  3  where OBJECT_ID =30500;

OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
DQ3ADMIN
GE_SUB

然后根据警告日志里的如下信息,就可以判断到底是哪条SQL产生了死锁。
Information on the OTHER waiting sessions:
Session 85:
  pid=266 serial=2912 audsid=16610945 user: 76/APPS
  O/S info: user: wzpapp1, term: , ospid: 20402, machine: gegcfeu50
            program:
  client info:                                             -1        0        
  application name: 01@<app1_11i/wzp1appl/gl/11.5.0/sql/upsgttbs.sql, hash value=1605707836
  Current SQL Statement:
  UPDATE DQ3ADMIN.GE_SUB SET CDR_SUB_DESCS= (SELECT :B2 ||'.'||:B1 ||': '||CDR_SHORT_DESC||'.'||:B3 FROM DQ3ADMIN.GE_CDR_ACCOUNT GECDR WHERE GECDR.CDR_ACCOUNT=:B2 ) WHERE PARENT_CDR=:B2 AND SUB=:B1
End of information on OTHER waiting sessions.
==================================================
然后就可以根据这个SQL来进行继续检查了。


 
  评论这张
 
阅读(768)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017