ORACLE数据库无法执行UPDATE

今天遇见一个问题,花费了半个小时弄明白了。

今天执行SQL命令的时候,发现UPDATE无法执行。
问题描述:
可以执行insert、select命令。update没有测试。
无任何回执,不报错。一直在提交。
可以撤回对应的SQL命令。
可以在其他表或者数据上执行UPDATE,但是对于某些数据无法执行。(只有一行或者一个表)
可以对无法UPDATE的数据执行SELECT。
数据库正常运行(别人都在用这个数据库,如果出了问题大家还坐得住?)

怀疑被锁。
————————————————————————————

上网查询,发现这种情况很常见。
执行这个SQL,在任何表下都能执行:

select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;

然后,就发现了以自己主机名为地址的OS_user_name,还有我无法UPDATE 的表。
在这里插入图片描述

然后执行命令:

alter system kill session 'sid,serial#';

比如说,要杀掉第一条,要这么写:

alter system kill session '10378,42299';

返回值0。

按照我之前的经验,-1是没有正确执行,0是没有行更新,但是正常执行。
执行之前无法执行的UPDATE,正常插入。
问题解决。
————————————————————————————————————
定位故障发生原因:我怀疑是我开了未提交读,然后执行的时候断网。
所以一直在等待commit。
尝试过提交commit,但是下次获得的游标和之前的游标是不一致的,手工提供commit无法解决。

故障可能会自动清除,但是五分钟之内肯定是不会自动清除的。(我没处理这个故障,第二天来看好了)


故障原因:事务锁。
我开启了一个事务,但是没有提交,一直挂着。
然后我又重新创建一个一个游标做事情,把这个游标给忘了……
找游标又不知道怎么找……

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值