查找Oracle中的死锁信息(oracle查询死锁)

死锁是指两个或多个用户在操作数据库时,由于某种原因,各自持有其它用户所需要的资源,造成彼此情况僵持,从而使得数据库无法继续操作的问题,称之为“死锁”。Oracle中查找死锁信息的方法如下:

(1)查看历史死锁信息

我们可以查看历史的死锁信息,通过v$lock视图可以查看当前在哪一个SESSION死锁,死锁时间等信息。死锁信息应该记录在v$lock_history视图中,只有当发生死锁时,v$lock_history才会被填充有记录。

“`sql

SELECT S.sid,

S.serial#,

L.type,

L.id1,

L.id2,

L.lmode,

L.request,

L.ctime

FROM V$LOCK L, V$SESSION S

WHERE S.SID = L.SID

AND L.REQUEST != 0

AND S.STATUS = ‘ACTIVE’;

“`

上面的查询会查找出活动用户的sid、serial#、type、id1、id2,lmode、request等信息。这可以帮助我们发现是什么用户在哪个表上发生死锁的问题。

(2)通过trace记录动态死锁信息

如果某个用户当发生死锁时,我们可以用trace文件记录下此时系统中每个用户正在执行的SQL,以及等待锁的信息,可以帮助我们查找哪一句SQL出问题,以及应该申请哪一种类型的锁。此时,可以使用下面的SQL来启动trace文件。

“`sql

ALTER SESSION SET events ‘immediate trace name context forever;

alter system set events ‘trace[rdbms.lock], level 16’;

ALTER SYSTEM SET timed_statistics = true;

“`

上述SQL会记录所有用户当发生死锁时,正在执行的SQL以及等待的信息。

综上所述,在Oracle中查找死锁信息的方法主要是查询v$lock_history视图和通过trace文件记录动态死锁信息,通过这两种方式,可以快速查找出造成死锁的原因,从而避免将来再次发生。


数据运维技术 » 查找Oracle中的死锁信息(oracle查询死锁)