让Oracle自动回滚被遗弃的会话吗?

时间:2010-06-24 15:07:50

标签: java sql oracle hibernate jdbc

有没有办法保证应用程序不会在Oracle中释放行锁?如果我确保将commit语句放在finally块中,那就处理了意外错误的情况,但是如果应用程序进程在提交之前突然死亡(或者某人踢掉电源线/ lan电缆)会怎么样。

有没有办法让Oracle在X时间后自动回滚空闲会话?或者当我以某种方式检测到连接丢失时回滚?

从我已经完成的实验中,如果我在提交之前终止应用程序进程,行锁将永远保留,直到我登录数据库并手动终止会话。

感谢。

3 个答案:

答案 0 :(得分:2)

尝试在SQLNET.EXPIRE_TIME中设置sqlnet.ora

SQLNET.EXPIRE_TIME=10

来自documentation

  

<强>目的
  指定时间间隔(以分钟为单位),以发送检查以验证客户端/服务器连接是否处于活动状态。

答案 1 :(得分:1)

最后的COMMIT可能是你应该做的最后一件事,因为你应该(几乎)从不提交任何引发异常的事情。

答案 2 :(得分:0)

我不是DBA所以我相信你能找到更好的解决方案......

但是某些似乎发生的死锁条件不会自行回滚。我的上一个DBA有一个每分钟运行的进程,可以杀死任何运行时间超过10分钟的进程。