Dm数据库锁问题处理

本文详细描述了一个SQL数据库中出现的锁问题,通过会话Session3的排查,展示了如何通过V$lock、V$trx视图和sp_close_session等工具来定位事务阻塞,并提供了解决事务等待的方法。重点讲解了事务隔离级别和解锁操作在处理锁冲突中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟一个锁
Session1
SQL> create table t1(a int);
SQL> create table t2(a int);
SQL> insert into t1 values(1);
SQL> insert into t2 values(2);
SQL> commit;
SQL> update t1 set a=1000 where a=1;

Session2
SQL> update t2 set a=2000 where a=2;

Session1
SQL> update t2 set a=3000 where a=2;
session1一直处于等待状态:

以上为模拟的锁问题,下面是问题的处理过程

另开一个会话Session3
session3查询执行时间较长的sql:
SQL> SELECT *
2 FROM (SELECT sess_id,
3 sql_text,
4 datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
5 SF_GET_SESSION_SQL (SESS_ID) fullsql,
6 clnt_ip
7 FROM V$SESSIONS
8 WHERE STATE = ‘ACTIVE’)
9 WHERE Y_EXETIME >= 2;

在这里插入图片描述

查询当前数据库实例是否有阻塞
SELECT o.name, l.*
FROM v$lock l, sysobjects o
WHERE l.table_id = o.id AND blocked = 1;

在这里插入图片描述

从v$trx视图中查看事物锁的情况
SQL> select ID,MIN_ACTIVE_ID, STATUS from

v$trx;

行号 ID MIN_ACTIVE_ID STATUS


1 13048 13048 LOCK WAIT
2 13049 13048 ACTIVE
3 13050 13048 ACTIVE

已用时间: 3.454(毫秒). 执行号:613.

查询视图
v$lock

SQL> select ADDR,TRX_ID,LMODE,BLOCKED, TABLE_ID,ROW_IDX, TID from v$lock;
在这里插入图片描述

从以上查询可以看出,事物13048申请的锁,被事物13049持有。
或通过v$trxwait查看等待情况
SQL> select * from

v$trxwait;

行号 ID WAIT_FOR_ID WAIT_TIME


1 13048 13049 4881923

已用时间: 2.123(毫秒). 执行号:817.

解除事务13048的等待,提交或回滚或终止13049的事务。

SQL> sp_close_session(107353480);
DMSQL 过程已成功完成

查看session1的事务已执行成功
SQL> select * from t2;

行号 A


1 2000

已用时间: 2.764(毫秒). 执行号:408.

更多资讯请上达梦技术社区了解:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值