oracle:从Java调用plsql过程时的连接超时

时间:2013-06-18 16:44:40

标签: oracle plsql connection timeout

我们有一个每日批处理作业执行oracle-plsql函数。实际上,quartz调度程序调用一个java程序来调用oracle-plsql函数。这个oracle plsql函数从4个表中删除数据(超过6个月),然后提交事务。

这个批处理作业在测试环境中成功运行,但是当新数据被转储到2周前发生的表时开始失败(代码应该在本周投入生产)。之前每个表中的行数不超过10万行。但现在它在3个表中有100万,在另一个表中有240万。

运行3个小时后,我们在java中遇到错误(写在日志文件中)“...连接重置;嵌套异常是java.sql.SQLException:Io异常:连接重置....”。检查表上的行计数时,很明显没有记录从任何表中删除。

是否可以在oracle数据库中,当连接超时并且调用会话不再处于活动状态时,plsql过程/函数会自动终止/终止?

提前致谢, 普拉迪普。

1 个答案:

答案 0 :(得分:1)

PL / SQL不会终止,因为它是不活动的,因为根据定义它不是 - 它仍在做某事。但它不会产生任何网络流量回到您的客户端。

网络级别的某些内容导致连接终止。这可能是侦听器超时,防火墙超时或其他内容。如果它在三个小时之后一直存在,那么几乎可以肯定是在某个地方配置超时而不是网络故障,这将是更随机的(并且可能是可恢复的)。

当网络连接中断时,Oracle会在某个时候注意到并终止会话。这将导致PL / SQL调用被终止,这将导致它所做的任何工作被回滚,这可能需要一段时间。

即使是几百万条记录,你的删除也需要3个小时。也许你在程序中单独插入时效率低下。当然,这对你没有任何帮助。可能值得指出的是,您的生产环境可能没有任何设置可以终止连接,或者可能具有更短的超时,因此即使减少运行时也可能无法实现防弹。您可能需要找到超时的来源并检查实时环境中的等效项。试图预先解决类似的问题。