DB2 Mainframe:queryTimeout不适用于SqlTransactionRollbackExceptio



我们在DB2 Mainframe中看到了以下异常。我们确实设置了CallableStatement.querytimeout,但在这种情况下它从未真正起作用。有什么建议吗?谢谢

DB2 SQL错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=00C9008E;00000801;无效。SYSSTAT.5359534C564C3031,DRIVER=3.61.109;嵌套异常为com.ibm.db2.jcc.am.SqlTransactionRollbackException:db2 SQL错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=00C9008E;00000801;无效。SYSSTAT.5359534C564C3031,驱动器=3.61.109

以下异常也是如此。查询超时不起作用。

嵌套异常为com.ibm.db2.jcc.am.SqlException:UNSUCCESSFUL由不可用资源引起的执行。原因00E30083,类型资源00000802和资源名称BINDLOCK

这是一个等待锁(BINDLOCK01到20)解锁的超时。

检查您尝试加载的表是否被另一个执行更新/插入/删除查询的长时间运行的作业锁定。

IBM知识中心建议在可能的情况下增加频繁的COMMIT操作。

Toad World提供了一些优化锁定时间的进一步策略:

建议:ACQUIRE(USE)和RELEASE(DEALLOCATE)提供良好的使用页面或行锁定时的并发性,并最大化表演

为了尽可能短的时间持有独占锁,建议在主机中将INSERT、UPDATE和DELETE语句组合在一起后面跟着COMMIT的语言程序。如果这些SQL语句穿插着宿主语言代码,锁在执行所述主机语言代码。

作为最后的手段,如果你不想优化查询,并且假设它没有死锁,你可以禁用锁定时间mouts:

在DB2for*NIX/Windows上,将"LOCKTIMEOUT"参数更改为"-1"。(不确定它对z/OS有什么影响,或者潜在的影响。)

欢迎使用堆栈溢出。

相关内容

最新更新