个人遇到的数据库锁表情况记录

前几天使用oracle数据库的时候,出现了一个问题,由于第一次遇到,所以花了挺多时间排查。

操作oracle数据库的客户端我一般用的plsqldev,由于那天需要修改一下数据库里面的数据,然后就按照软件的提示,在select查询方法后面添加for update,然后点击那个锁的图标修改数据,然后提交事务,习惯性地修改完数据库运行了刚才的查询语句查询了一下数据库,数据已经被修改,完美!

但是在我debug后台JAVA代码的时候,每次进页面的查询方法顺利执行,查询出来数据,但是一走到insert插入或者update修改方法就卡死,然后我就想是不是代码写的有问题啊,从实体类,到dao层,再到mapper.xml文件的sql语句,再到service,controller层,还是没有发现问题,一直在排查代码的问题,耗费了大量时间,但是我把sql语句粘贴到plsqldev执行的时候,我发现语句确实执行了,但是耗时太太太长了,我就确定了,就是语句或者数据库的问题,然后往左上角一瞥,发现我执行完查询语句后那个提交事务的按钮竟然亮了,说明我事务没提交,我提交好,正常执行代码里面的插入修改语句。后来才猛然发现我一开始为了用plsqldev便捷修改数据之前,执行了select * from table for update,问题就出在这个for update,虽然这个语句开头是select,但是因为这个for update,他其实已经是一个更新语句了。问题找到了,那么我们来解决问题吧:

1. `

select *from v$locked_object;

`执行这个语句查看被锁的对象和会话id

2. 杀死那个会话,进行解锁

`

alter system kill session 'sid,serial#'; 

`

我们来复盘一下这个问题的原因,就是因为我们进行了更新操作,没有提交数据,然后我们又用后台代码进行了其他的插入更新操作,同时操作同一条数据就出现了锁表的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值