你曾遇到过 delete from A 没反应吗?明明感觉sql语句写对了,为啥删除不了呢?是程序代码问题?还是sql问题?
然后把sql语句搬到客户端中,比如PLSQL中,咋也没有反应?
若PLSQL反应好点,会在执行过程中,有个Excuting。。。。。
若PLSQL反应不好点,就明明执行了,就是没反应【比如我的PLSQL就是不给点提示】
若遇到以上情况,前提sql语句正确 ,但是始终不起作用,初步确定此表已被锁。
若遇到以下情况,前提程序代码正确,但是始终无反馈,初步确定此标已被锁。
使用Ajax调用,比如删除时,一直返回失败,并且返回的state是0.
此时跟踪代码,你会发现 执行到后台的jdbctemplate的batchupdate时,就不动了,然后持续N久,前台弹框包括失败,打印结果状态为0
反复跟踪,都是如此。。。。
查看到底是不是表被锁住的问题:
select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid ;
若有记录,则是;无记录则不是;
若有记录,则使用以下sql kill
alter system kill session '5434,19740'
第一个参数:sid,第二参数:serial
当你kill完毕后,发现刚才跟踪代码的代码,无论曾经跟踪多少次,竟然都通通执行了一遍。前台返回理所当然了。
出现锁住的现象的主要原因是:
当你执行事务级别的,比如insert、update、delete时,没有真正的同步到数据库中。
比如你使用plsql时,delete时,直接F8,而没有F10(具体按钮不画了。。。)
其实即使你的表被锁住,select也是照常执行的,因为select不是事务范围,比如咱们写代码时,select一般不开启事务的。
知道了原因,又知道了方案。O(∩_∩)O哈哈~