Sybase - 远程存储过程超时和/或网络连接被丢弃

时间:2017-09-08 18:00:44

标签: java unix networking jdbc sybase

我们一直试图找到一种方法,使用Sybase的isql客户端或Java远程运行一个长时间运行(3-4小时)的存储过程。存储过程启动正常甚至运行并返回一些打印输出。但是然后点击这个非常大的select *进入#tmp ....语句需要3个多小时才能运行。但是在大约2个小时之后的某个地方,网络连接被丢弃...很可能是由于活动,因为没有打印输出从存储过程返回,并且isql客户端没有发送任何请求。

背景:当我们使用isql命令行客户端从Linux批处理服务器远程运行此存储过程时,它会启动,但由于时间长度(3-4小时),我们的网络层中的某些内容只会丢弃连接和Sybase服务器永远不会响应客户端。当我们尝试使用像我们的笔记本电脑上的DBVisualizer这样的GUI客户端运行存储过程时,同样的问题......远程执行启动,运行,但从不响应。基本上,任何远程运行存储过程的尝试都会失败。

非网络:但是,当我们使用isql客户端在实际的Sybase Unix服务器(即Sybase数据库和isql客户端在同一个Unix服务器上)上运行存储过程时,它就完成了。因此,当在“本地”非远程情况下运行存储过程时,它就可以完成了。

结论:由于活动,网络层中的某些内容会丢弃连接。

那就是说,我们尝试了以下但没有成功:

  • a。)在批处理服务器上将Linux tcp_keepalive更改为4小时。
  • b。)在Sybase服务器上将Unix / AIX tcp_keepidle更改为4小时。
  • c。)编写了一个自定义Java多线程进程,该进程创建了两个线程SQL调用,一个用于存储过程,一个用于简单的“保持活动”选择。但是一旦存储过程开始运行,它就会锁定/阻塞另一个线程。这似乎是Sybase JDBC驱动程序的一个问题,他们根本不允许2个SQL语句并行运行...... Concurrent use of same JDBC connection by multiple threadsIs asynchronous jdbc call possible?

我的问题是,我有什么其他选择吗?我们的数据库管理员告诉我们,Sybase引擎没有设置限制或超时,但是无论如何要确认这一点?我们目前正在检查我们的防火墙,但我怀疑防火墙是否维持“会话”......虽然我不是防火墙专家。无论如何,还有测试防火墙超时吗?

tia,adym

更新时间:09/11/2017 -

我将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 );

0 个答案:

没有答案