oracle查看谁锁表,ORACLE 如何查询哪个用户锁表?

关键字: 锁表

1.select * from v$locked_object

2.select * from v$session where sid = 296

alter   system   kill   session   '95,   5050';

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;

Status有两种状态,LOCK表明该进程锁住了某个资源,WAIT表示该进程正在等待某个资源。

Username,   Machine分别为ORACLE用户名及机器名

SID,SERIAL#可用于随后的解锁操作

Seconds表示该进程最后一次进行操作至当前的时间(秒)

ID1,   锁标识。某个LOCK状态的ID1与某个WAIT状态的ID1相同,可说明锁的正是另一个进程等待的。

SQL:   锁住资源的SQL语句

2.   解除锁

诊断出锁的状态后,若发现该阻塞其它用户进程的进程是正常操作中,则可通知该用户对其进行提交,从而达到释放锁资源的目的;若为非正常操作,即,其状态为"inactive",且其Seconds已为较多长时间,则可执行以下语句将该进程进行清除,系统会自动对其进行回滚,从而释放锁住的资源。

alter   system   kill   session   'sid,   serial#';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值