达梦锁查询及阻塞会话处理测试

新建两个测试表,插入数据提交
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)
 
 
 
 
 
posted @   fangzpa  阅读(819)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示