关于锁问题

[复制链接]
查看11 | 回复4 | 2010-3-1 11:19:59 | 显示全部楼层 |阅读模式
我现在想通过锁信息查找锁语句
开始
select * from V$LOCK where block=1;
找到一条
我怎么根据这一条的信息找到锁语句是哪一条?
select * from v$sqltext;
ps:
这些视图里面的addr,paddr这些选项我有点搞不清,请高手说清楚一下,不胜感激
回复

使用道具 举报

千问 | 2010-3-1 11:19:59 | 显示全部楼层
《【实验】【LOCK】“锁等待”模拟、诊断及处理方法》
http://space.itpub.net/519536/viewspace-605526
《【实验】【DEADLOCK】Oracle“死锁”模拟》
http://space.itpub.net/519536/viewspace-611729
供参考。
secooler
回复

使用道具 举报

千问 | 2010-3-1 11:19:59 | 显示全部楼层
> select * from V$LOCK where block=1;
> 找到一条
> 我怎么根据这一条的信息找到锁语句是哪一条?
Generally there's no way. The blocking session you see in v$lock could have run a DML some time ago and many SQLs were run afterwards, so sql_id and prev_sql_id in v$session for this session are no longer that locking DML. You have to rely on database auditing or logminer to find the original SQL if you really want.
Yong Huang
回复

使用道具 举报

千问 | 2010-3-1 11:19:59 | 显示全部楼层
我是说还存在的(当然,不存在的已经不需要找了),我就是想找出 v$lock,v$session,v$session_wait,v$process,dba_waiters,v$sqltext之间的联系,他们中间有很多字段,我搞不清他们之间的意思。在已知sid的情况下,如何才能查到他的原sql语句
回复

使用道具 举报

千问 | 2010-3-1 11:19:59 | 显示全部楼层
原帖由 wyf646688798 于 2010-1-27 08:56 发表
我是说还存在的(当然,不存在的已经不需要找了),我就是想找出 v$lock,v$session,v$session_wait,v$process,dba_waiters,v$sqltext之间的联系,他们中间有很多字段,我搞不清他们之间的意思。在已知sid的情况下,如何才能查到他的原sql语句


select sql_text
from v$sqltext a
where (a.hash_value, a.address) in

(select DECODE (sql_hash_value,

0, prev_hash_value,

sql_hash_value),

DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)

from v$session b

where b.sid = :sid)
order by piece
/
供您参考。
secooler
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行