注册
dpc锁超时解决方案
技术分享/ 文章详情 /

dpc锁超时解决方案

晚安 2025/05/09 103 0 0

执行超时会话时,同时执行一个报锁超时的sql

    for rec in (select sess_id, 
            SF_GET_EP_SEQNO(ROWID) a 
       from v$sessions 
      where trx_id in (select wait_for_id from v$trxwait) 
        and port_type=0) 
    loop 
        sp_close_session(rec.a,rec.sess_id); 
    end loop;
end;

:::

:::

:::
如果上面的不行再试试这个
执行超时会话时,同时执行一个报锁超时的sql

select 
tw.id as "等待的事务ID",
tw.wait_for_id as "正在运行的事务ID",
s.sess_id as "等待的会话",
ws.sess_id as "正在执行的会话",
s.sql_text as "等待的sql",
ws.sql_text as "正在执行的sql" ,
'SP_CLOSE_SESSION('||ws.sess_id||');' "关闭会话的语句"
from v$trxwait tw left join v$sessions s 
on tw.id=s.trx_id 
left join v$sessions ws 
on tw.wait_for_id=ws.trx_id where s.port_type=0;

其他查询方式
(1)查询delete语句和会话的状态:并查看该delete语句对应的TRX_ID,例如为20187
SELECT * FROM v$sessions where sql_text like ‘delete%t1%’;

(2)查询20187这个事务被哪个事务锁定:查询出产生锁的事务ID,例如为20194
SELECT * FROM v$trxwait WHERE id = 20187;
行号 ID WAIT_FOR_ID WAIT_TIME THRD_ID


1 20187 20194 221348 8880

(3)查询20194这个事务对应的SESS_ID:检查该session的SQL语句是否为业务语句,如果可以停掉在将该会话CLOSE
SELECT * FROM v$trxwait WHERE id = 20194;

159793176这个SESS_ID是20194的SESS_ID
CALL SP_CLOSE_SESSION(159793176);

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服