查看Oracle被锁的表以及如何解锁

–注意权限问题

1.查看是否有被锁的表:

select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id

2.查看是哪个进程锁的

select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time

3.杀掉进程

alter system kill session 'sid,serial#';
  1. 组合
select 'alter system kill session '''|| b.sid||','||b.serial#||''';'
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time

——————————————隔离线———————————————————
5. 万能解锁语句
没研究过这是干啥的,但是好使。

CREATE OR REPLACE PROCEDURE DB_KILL_LOCK_CLIENTS AUTHID DEFINER AS
BEGIN
    FOR REC IN
        (select distinct sid,serial#,inst_id from
        (SELECT object_name, machine, s.sid, s.serial#,s.inst_id,lo.lmode,lo.request,lo.ctime
         FROM gv$locked_object l, dba_objects o, gv$session s,gv$lock lo
         WHERE l.object_id = o.object_id
         AND l.session_id = s.sid
         AND l.session_id = lo.sid
         AND s.inst_id=lo.inst_id
         and lo.lmode=6
         and lo.ctime>10
         and s.username not in ('SYS','SYSTEM')
         AND lo.sid in (select final_blocking_session from gv$session where event='enq: TX - row lock contention' and final_blocking_session is not null)))
    LOOP
      execute immediate 'alter system kill session '''|| rec.sid || ', ' || rec.serial# || ',@'||rec.inst_id||''' immediate' ;
    END LOOP;
END DB_KILL_LOCK_CLIENTS;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菩提树下敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值