oracle执行了一条for update卡住了,没有提交。之后再执行修改就改不了了
发布网友
发布时间:2022-04-08 08:45
我来回答
共3个回答
懂视网
时间:2022-04-08 13:07
可以通过以下办法解决:
先查询锁定记录
Sql代码
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
然后删除锁定记录
Sql代码
ALTER system KILL session ‘SID,serial#‘;
其中 SID填写上文中查到的SID数值,serial#填写serial#列的数值如:
ALTER system KILL session ‘214,23456‘;
oracle执行update时卡死问题的解决办法
标签:
热心网友
时间:2022-04-08 10:15
我根据我遇到的相同问题整理的解决方法
问题场景:
在更新或插入等DML操作中,因网络中断或忘记提交,导致相同记录再次执行时感知为长时间无法执行成功。
解决方法:
一、code处理
1.再次执行相同记录的语句;
2.查询被阻塞的会话
SELECT l.session_id,o.owner,o.object_name, machine, s.sid, s.serial#,s.blocking_session
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
AND s.blocking_session is not null;
3.根据被阻塞会话查找原会话信息
SELECT l.session_id, o.owner, o.object_name, machine, s.sid, s.serial#,s.sid||','||s.serial# kill_session
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
AND s.sid = 759;
SELECT s.sid, s.serial#,s.sid||','||s.serial# kill_session FROM v$session s WHERE sid = 759;
4.杀死原会话
alter system kill session '759,18523';
二、PLSQL处理
原理与code处理一样,先找到现有会话,然后反推阻塞会话,最后将其杀死
1.查询被阻塞的会话,找到Blocking session
2.根据Blocking session查找原会话信息,直接点击kill杀会话
热心网友
时间:2022-04-08 11:33
for update的时候有人锁表了吧,可以先杀死锁表的进程,再次执行。