1、因为oracle执行更新、插入操作都是需要提交事务(commit)的,而非正常的中断会话会导致oracle锁定该条进程
2、select * from tableName where id=? for update;执行for update 时,借助for update子句,我们可以在应用程序的层面手工实现数据加锁保护操作。
3、行级锁,锁定where条件之后的符合条件的数据;当符合条件的数据没有commit的时候,再次去update或者delete的时候是不可以操作的,
4、解决方法://查看锁表进程select object_name,machine,s.sid,s.serial#from v$locked_object l,dba_objects o ,v$session swhere l.object_id = o.object_id and l.session_id=s.sid;
5、kill掉这个死锁的进程:alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
6、在之后的操作建议使用 for update nowait.他会试探的加锁,如果有锁,立即返回错误,不会去等待;
7、这种锁定方式是建立在数据库连接的基础上,一旦连接断开或者锁定进程commit时,这种锁定就自动解除。同时这种锁定方式是一种update锁定,锁定时不影响其他的select操作。