找到锁表的人

在公司解决 Oracle 锁表问题时查到的资料:

 select a.object_name,
l.session_id,
l.oracle_username,
l.os_user_name,
s.machine,
s.sid,
s.sql_address,
s.sql_hash_value,
s.sql_id,
s.sql_child_number
from v$session s, v$locked_object l, all_objects a
where l.process = s.process
and a.object_id = l.object_id


这段可以查到所有被锁的 session 和表,包括导致锁表的第一次 sql 操作的 session。最重要的,它可以找出是谁锁的,你可直接找他 PK 或者杀掉他的 session。

 select c.object_name,
l.session_id,
l.oracle_username,
s.machine,
l.os_user_name,
s.sid,
s.program,
st.sql_text
from v$session s,
v$locked_object l,
all_objects c,
v$sqltext_with_newlines st
where s.process = l.process
and c.object_id = l.object_id
and st.address = s.sql_address
order by s.sid, st.piece


如果有一条或多条 SQL 被阻塞住了,你可以通过这段 SQL 找出被阻塞的 SQL 是什么,从而定位出是哪位记录被锁住了。

select s.username user_name,
o.owner || '.' || o.object_name object_name,
s.sid || ',' || s.serial# sid_serial#,
s.program,
sq.sql_text
from dba_objects o, v$session s, v$lock v, v$sqltext_with_newlines sq
where v.id1 = o.object_id
and v.sid = s.sid
and (v.type = 'tm' or v.type = 'hw')
and s.sql_address = sq.address
order by program, object_name, s.sid, sq.piece;


这段与上面那段作用一样,不过显示的信息多少有点差别,由我们公司一们大牛提供。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值