我们一直试图找到一种方法,使用Sybase的isql客户端或Java远程运行一个长时间运行(3-4小时)的存储过程。存储过程启动正常甚至运行并返回一些打印输出。但是然后点击这个非常大的select *进入#tmp ....语句需要3个多小时才能运行。但是在大约2个小时之后的某个地方,网络连接被丢弃...很可能是由于活动,因为没有打印输出从存储过程返回,并且isql客户端没有发送任何请求。
背景:当我们使用isql命令行客户端从Linux批处理服务器远程运行此存储过程时,它会启动,但由于时间长度(3-4小时),我们的网络层中的某些内容只会丢弃连接和Sybase服务器永远不会响应客户端。当我们尝试使用像我们的笔记本电脑上的DBVisualizer这样的GUI客户端运行存储过程时,同样的问题......远程执行启动,运行,但从不响应。基本上,任何远程运行存储过程的尝试都会失败。
非网络:但是,当我们使用isql客户端在实际的Sybase Unix服务器(即Sybase数据库和isql客户端在同一个Unix服务器上)上运行存储过程时,它就完成了。因此,当在“本地”非远程情况下运行存储过程时,它就可以完成了。
结论:由于活动,网络层中的某些内容会丢弃连接。
那就是说,我们尝试了以下但没有成功:
我的问题是,我有什么其他选择吗?我们的数据库管理员告诉我们,Sybase引擎没有设置限制或超时,但是无论如何要确认这一点?我们目前正在检查我们的防火墙,但我怀疑防火墙是否维持“会话”......虽然我不是防火墙专家。无论如何,还有测试防火墙超时吗?
tia,adym
我将DEFAULT_QUERY_TIMEOUT设置为8小时(我认为)。根据我的阅读,您可以在几秒钟内完成。但这没有任何区别。
Properties props = new Properties();
props.put ( "user", getJDBCUsername() );
props.put ( "password", getJDBCPassword(isEncrypted()) );
props.put ( "DEFAULT_QUERY_TIMEOUT", 28800 );
this.connection = DriverManager.getConnection ( getJDBCUrl (), props );