当前位置: 首页 > 知识库问答 >
问题:

sybase和JDBC。无法提交jdbc事务。读取超时

刘狐若
2023-03-14

在我的应用程序几分钟后尝试提交许多事务后,我会遇到以下异常:

无法提交jdbc事务嵌套异常为java.sql.sqlexception:jz006:catled IOException:java.net.socketTimeoutException:读取超时...“

我正在使用Sybase和带有Spring JDBC的JDBC 4驱动程序,我找到了以下链接:http://infocenter.Sybase.com/help/index.jsp?topic=/com.Sybase.infocenter.dc39001.0707/html/prjdbc0707/prjdbc070714.htm我可以使用以下任何一种吗:

一个想法是成批地进行交易,但我没有时间去发展它。有什么方法可以避免出现这个错误?

共有1个答案

漆雕伟志
2023-03-14

检查您的进程在执行时是否相互阻塞(如果您不确定如何检查,请询问您的DBA)。根据连接属性(特别是autocommit设置为off),在尝试下一个事务之前,您可能不会完全提交每个事务,如果您使用的连接池具有多个线程,它们可能会相互阻塞。与您的DBA交谈并检查表的锁定方案,例如,如果表设置为allpages锁定,您将在数据的页级别而不是行级别上持有锁。您也可以通过sp_help亲自检查。有关各种类型的锁定方案的更多信息,请访问http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20021_1251/html/locking/x25549.htm(旧版本,但在当前版本上仍然有效)。

您可以通过sp_who、sp_lock或直接对照系统表检查锁(选择spid,blocked from master..sysprocesses where blocked!=0是一个非常简单的方法来获取进程,而blocking process,您可以根据需要向其中添加更多列)。

您还应该要求您的DBA检查事务是否是最优的,例如,更新时的表扫描可以很好地将整个表锁定给其他事务,并会导致您在这里看到的超时问题。

 类似资料:
  • 需要JAVA中JDBC事务控制机制的帮助。 问题: 我们的赛贝斯DB中有一些存储过程需要在未链接模式下运行。由于我们在两个不同的数据库(不幸的是,两个都是赛贝斯)上更新数据,如果有任何故障,我们需要能够回滚所有以前的事务。 但是在未限制模式下运行(自动提交-开启)并不能帮助我们进行回滚,因为一些SP已经提交了事务。 理想情况下,如果第3步失败,我们希望有效地回滚第1步和第2步。 当前解决方案: 我

  • 以下是使用事务教程中描述的提交和回滚的代码示例。 此示例代码是基于前面章节中完成的环境和数据库设置编写的。 复制并将以下示例代码保存到:CommitAndRollback.java 中,编译并运行如下 - 编译并运行结果如下 -

  • 我正在应用程序中使用Windows Azure SQL Server,当我连接到应用程序时,它显示以下错误。 hibernate.cfg.xml: .................. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/cont

  • 主要内容:提交和回滚,使用保存点如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。 对于简单的应用程序可能没有问题,但是有三个原因需要考虑是否关闭自动提交并管理自己的事务 - 提高性能 保持业务流程的完整性 使用分布式事务 事务能够控制何时更改提交并应用于数据库。 它将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败。 要启用手动事务支持,而不是使用JDBC驱

  • 我有一个Hibernate和光数据源的Spring Boot项目。如果我使用注入的SessionFactory对象来获取会话对象,几天后,我会发现与数据库操作相关的任何方法都有这样的异常(只有重新启动才能解决这个问题): 似乎手动使用的会话使此问题。(我有类似的项目,具有相同的配置和功能,但没有注入SessionFactory和Session...我根本没有这样的问题) 应用程序. yaml: 数