达梦锁查询及阻塞会话处理测试
新建两个测试表,插入数据提交
create table lock1 (id number,name varchar(50));
insert into lock1 values(1,'aaaa');
insert into lock1 values(2,'bbbb');
create table lock2 (id number,name varchar(50));
insert into lock2 values(1,'ssss');
insert into lock2 values(3,'dddd');
commit;
执行下面更新语句,不要提交
update lock1 set name='sss' where id=1;
update lock2 set name='ss' where id=1;
打开新窗口,执行如下
打开另一个新窗口,执行如下
根据V$SQL_HISTORY可以查看想要的历史记录
通过v$lock视图查到当前数据库中锁的状态,如下可看到有两个事务114326,114327 被事务114320所阻塞
也可根据V$TRXWAIT 查找谁阻塞谁
根据v$trx可看到那些事务处于等待状态
根据V$sessions 和v$lock 查询产生阻塞的事务会话
select s.sess_id,s.SQL_TEXT,s.RUN_STATUS from v$sessions s , v$lock l where l.tid=s.trx_Id and l.blocked=1;
解决方案
1 如上所示查询出产生阻塞的事务会话id,只需要在该会话下提交或回滚事务,锁自然会被释放,阻塞解决
2 使用系统过程SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话
select 'SP_CLOSE_SESSION(' ||s.sess_id||')' from v$sessions s,v$lock l where s.trx_id=l.tid and l.blocked=1;
执行会话之后,可以看到被阻塞的会话已经成功执行
SP_CLOSE_SESSION(2516820264)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了