求助:系统有死锁,怎么排查

[复制链接]
查看11 | 回复9 | 2014-2-18 16:43:09 | 显示全部楼层 |阅读模式
看了下系统日志,发生死锁了
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 waitsprocess session holds waits
TX-0019002e-003a92c089 119 X
89 119 X
session 119: DID 0001-0059-00001370 session 119: DID 0001-0059-00001370
Rows waited on:
Session 119: obj - rowid = 00120553 - AAEgVTABrAAAta7AAI
(dictionary objn - 1181011, file - 107, block - 186043, slot - 8)
Information on the OTHER waiting sessions:
End of information on OTHER waiting sessions.
发生死锁了,怎么排查?这是自己锁了自己么?


回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
看着应该是同一个会话,有可能是该会话在当前事务中,又发起了一个自治事务。

select * from dba_objects where object_id=1181011;
用这个SQL可以查出死锁发生在哪个对象上(比如表)。
将查出的对象名替换下面SQL中的XXX,可以查出在该象的哪一行记录上发生了死锁。
select * fromxxx where rowid='AAEgVTABrAAAta7AAI'

回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
bfc99 发表于 2016-6-6 22:22
看着应该是同一个会话,有可能是该会话在当前事务中,又发起了一个自治事务。

咨询个类似问题:
可否用sql查看表的某行是否已经被加锁?
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
SELECT
s1.USERNAME blkg_user,
s1.MACHINE blkg_machine,
s1.SID blkg_sid,
s1.SERIAL# blkg_serialnum,
s1.SID
||','
||s1.SERIAL# kill_string,
s2.USERNAME wait_user,
s1.MACHINE wait_machine,
s2.SID wait_sid,
s1.SERIAL# wait_serialnum,
lo.OBJECT_ID blkd_object_id,
do.OWNER obj_own,
do.OBJECT_NAME obj_name
FROM
v$lock l1,
v$session s1,
v$lock l2,
v$session s2,
v$locked_object lo,
dba_objects DO
WHERE
s1.SID=l1.SID
AND s2.SID=l2.SID
AND l1.ID1=l2.ID1
AND s1.SID=lo.SESSION_ID
AND lo.OBJECT_ID=do.OBJECT_ID
AND l1.BLOCK=1
AND l2.REQUEST>0;
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
jxc_hn 发表于 2016-06-07 08:50
咨询个类似问题:
可否用sql查看表的某行是否已经被加锁?
不能,但你可以去试着加锁,加不上,那就是已被其他会话锁了。
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
死锁图下面应该有相应SQL语句的。
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
这个是自治事务。看看存储过程或者包.
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
select * from DBA_HIST_ACTIVE_SESS_HISTORY;
里面有session_id
SESSION_SERIAL#
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
lfree 发表于 2016-6-7 15:14
这个是自治事务。看看存储过程或者包.

不一定是自治事物,要确定是不是,把对应的trc文件发上来~

回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
zergduan 发表于 2016-6-7 15:36
不一定是自治事物,要确定是不是,把对应的trc文件发上来~

blocker 与 waiter 一样的基本就是自治事务.
其他你如何实现自己锁自己的情况.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行