关于oracle数据库死锁的解决 以及产生的原因

前段时间写sql语句事物造成了数据库死锁,导致所有更新操作无法执行

1.查死锁

查看关于锁的会话信息

select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID

2.通过查询到的信息,杀掉会话

alter system kill session '49,423';  

其中后面的数字分别是  'sid,serial',即上图红圈内的字段内容

杀掉会话后,锁就会被释放了,操作就能正常进行了

---------------------------------------------------------------------------------

死锁的原因

虽然遇到了死锁,但是对于原因并不知道,现在再次遇到了同样的问题,而且重现了

下面说下造成死锁的原因

之所以会造成死锁,是因为我通过Navicat执行update语句并没有commit导致的,

通常我们通过项目提交的sql语句都会被自动commit的(模板),但是通过Navicat或plsql

手写的sql语句,有时候遇到网络不好或者其他问题,会出现没有commit的情况,语句会导致

数据库出现死锁的现象,这时候可以采用上述的方式杀掉死锁

-------意外情况,没有权限使用上述语句怎么办

我曾遇到过表被锁住的情况,但是客户不会给v$session的权限,

我使用Navicat的禁用表锁定,成功的释放了锁,不确定是否是普遍适用,

而且这种解锁方式肯定有很多局限性,建议大家不要轻易使用这种方式解锁

猜你喜欢

转载自blog.csdn.net/aaronmer/article/details/79812838