达梦数据库表被锁住后解锁方法:
第一步:首先查看当前数据库中锁的状态
执行sql:SELECT * FROM v$lock

此时可以看到 事务2399被阻塞了,阻塞他的事务是2393,同样我们也可以通过 V
T
R
X
W
A
I
T
视
图
查
看
谁
阻
塞
谁
。
执
行
s
q
l
:
S
E
L
E
C
T
∗
F
R
O
M
V
TRXWAIT 视图查看谁阻塞谁。 执行sql:SELECT * FROM V
TRXWAIT视图查看谁阻塞谁。执行sql:SELECT∗FROMVTRXWAIT;

得出同样的结果,ID 为 2399 的事务正在等待 ID 为 2393 的事务,等待时间是1071599 毫秒。
接下来,通过 V
S
E
S
S
I
O
N
S
视
图
查
找
两
个
事
务
对
应
的
会
话
。
执
行
s
q
l
:
S
E
L
E
C
T
s
e
s
s
i
d
,
s
q
l
t
e
x
t
,
s
t
a
t
e
,
t
r
x
i
d
F
R
O
M
V
SESSIONS 视图查找两个事务对应的会话。 执行sql:SELECT sess_id,sql_text,state,trx_id FROM V
SESSIONS视图查找两个事务对应的会话。执行sql:SELECTsessid,sqltext,state,trxidFROMVSESSIONS;

第二步:解决方法
根据需求有两种解决办法:
第一种:提交或回滚产生阻塞的事务,此时,我们只需要在该会话下提交或回滚事务,锁自然会被释放,阻塞解决。
第二种:关闭产生阻塞的会话
同样,我们也可以使用系统过程 SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话,具体使用方法如下。
执行sql:SP_CLOSE_SESSION(SESS_ID)

此时,被阻塞的锁已经被释放,相对应被锁的表已经被解锁可以正常使用,表就可以正常操作了。

4905

被折叠的 条评论
为什么被折叠?



