查看锁信息

汇总了部分查看锁信息的方法,供参考。

[@more@]

如何快捷的显示当前锁定和被锁定表的用户,sql等信息
如果是dba用户那么可以使用
一、
阻塞和等待的用户及sql语句
select 'blocker('||wb.holding_session||':'||sb.username||')-sql:'||qb.sql_text blockers,sb.machine,sb.terminal,
'waiter ('||wb.waiting_session||':'||sw.username||')-sql:'||qw.sql_text waiters ,sw.machine,sb.terminal
from dba_waiters wb,
v$session sb,
v$session sw,
v$sqlarea qb,
v$sqlarea qw
where wb.holding_session=sb.sid
and wb.waiting_session=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and wb.mode_held<>'None'

二、如果不是dba那么就不能使用dba_waiters表了,可以使用v$lock来替换

select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers,
'waiter ('||lw.sid||':'||sw.username||')-sql:'|| qw.sql_text waiters
from v$lock lb,
v$lock lw,
v$session sb,
v$session sw,
v$sql qb,
v$sql qw
where lb.sid=sb.sid
and lw.sid=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and lb.id1=lw.id1
and sw.lockwait is not null
and sb.lockwait is null
and lb.block=1

三、也可用此句:

SELECT /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */
'Wait' "Status",
a.username,
a.machine,
a.sid,
a.serial#,
a.last_call_et "Seconds",
b.id1,
c.sql_text "SQL"
FROM v$session a, v$lock b, v$sqltext c
WHERE a.username IS NOT NULL
AND a.lockwait = b.kaddr
AND c.hash_value = a.sql_hash_value
UNION
SELECT /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */
'Lock' "Status",
a.username,
a.machine,
a.sid,
a.serial#,
a.last_call_et "Seconds",
b.id1,
c.sql_text "SQL"
FROM v$session a, v$lock b, v$sqltext c
WHERE b.id1 IN (SELECT /*+ NO_MERGE(d) NO_MERGE(e) */
DISTINCT e.id1
FROM v$session d, v$lock e
WHERE d.lockwait = e.kaddr)
AND a.username IS NOT NULL
AND a.sid = b.sid
AND b.request = 0
AND c.hash_value = a.sql_hash_value;


如果向更详细的显示username的信息可以加入


select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers,sb.machine,sb.terminal,sb.logon_time,
'waiter ('||lw.sid||':'||sw.username||')-sql:'|| qw.sql_text waiters ,sw.machine,sw.terminal,sw.logon_time
from v$lock lb,
v$lock lw,
v$session sb,
v$session sw,
v$sql qb,
v$sql qw
where lb.sid=sb.sid
and lw.sid=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and lb.id1=lw.id1
and sw.lockwait is not null
and sb.lockwait is null
and lb.block=1

三、--根据以上显示的信息可以知道当前产生锁和等待的用户信息
--那么就需要杀掉当前产生阻塞的用户,在执行杀掉用户进程前请咨询dba和该业务的同事,是否产生其他的不当影响

select sid,serial# from v$session sid in (...) --查询产生阻塞用户的 sid,serial#,然后
alter system kill session(sid,serial#); --杀掉产生阻塞的用户

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10455206/viewspace-1031409/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10455206/viewspace-1031409/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值