oracle Update语句卡死,详细情况见下文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle Update语句卡死,详细情况见下文相关的知识,希望对你有一定的参考价值。

在使用Update语句修改一个字段的值(只修改一行)直接卡死,Delete也是一样的情况,但是换一条进行Update、Delete时可以执行过去,并且查询过锁表了,没有任何锁表记录,这种情况有哪位大神见过并解决掉了。

参考技术A 按你的描述,应该就是锁表了,并不是卡死。检查是否for update 的操作。
我不知道你是什么检查锁表的,检查锁表时是否有用户名作为条件了?不加条件试试。
怀疑有可能是你操作数据库用户这张表对其他用户进行授权了,被授权的用户进行删除,如果限制了username可能会查不到。
常规查询锁表方法如下:
查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,
任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
--杀掉进程 sid,serial#
例如锁表进程的sid = 210 , serial# = 11562,执行如下命令。
alter system kill session'210,11562';
希望对你有帮助,欢迎采纳!本回答被提问者和网友采纳
参考技术B 尝试用事务进行操作试试

update语句执行卡死现象原因及解决方案

https://blog.csdn.net/wpz0713/article/details/51499654

原因分析:

  可能在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了。

解决方案:

--查询锁定记录 
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; 
--删除锁定记录
ALTER system KILL session SID,serial#;
--示例
ALTER system KILL session 450,10545;

 

以上是关于oracle Update语句卡死,详细情况见下文的主要内容,如果未能解决你的问题,请参考以下文章

oracle Plsql 运行update或者delete时卡死问题解决的方法

update语句执行卡死现象原因及解决方案

for update造成的Oracle锁表与解锁

oracle 执行存储过程时出现卡死

oracle执行update时卡死问题的解决办法

oracle查询同一条语句,第一次查询很快,第二次查询就几乎卡死