Oracle故障排查之oracle解决锁表问题

本文介绍了一种解决Oracle数据库中出现的死锁问题的方法,包括如何检查被阻塞的会话及其等待事件,查找并确定阻塞源头,以及如何通过杀死阻塞会话来解除死锁。

--step 1:查看被阻塞会话等待事件

select sid, event, username, lockwait, sql.sql_text
  from v$session s, v$sql sql
where s.sql_id = sql.sql_id
   and sql.sql_text like '%&sql%';

-------------------------------------------------------------------------
    22    enq: TX - row lock contention    SCOTT    000000007F8C4DD8    update emp set ename='dbking' where empno=7369
    23    enq: TX - row lock contention    SCOTT    000000007F8C4F98    delete from emp where empno=7499

--step 2:查找阻塞的blocker

select sid, inst_id, blocking_instance, blocking_session
  from gv$session
where sid = 22;

-----------------------------------------------------------------------
    22    1    1    142

    或

select sid, inst_id, blocking_instance, blocking_session
  from gv$session
where sid in (22, 23);

----------------------------------

22    1    1    142
23    1    1    142


--step 3:清除blocker

确认要清除会话的sid和serial#:

select sid, serial#
  from gv$session
where inst_id = 1
   and sid = 142;

--------------------------------------
    142    873

清除会话:

SQL> alter system kill session '142,873';

System altered.

------------------TOP-----------------------

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.paddr = (select addr from v$process c where c.pid = '&pid'))
order by piece asc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值