1

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

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

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

嵌套异常是 com.ibm.db2.jcc.am.SqlException: UNSUCCESSFUL EXECUTION CAUSED BY UNAVAILABLE RESOURCE。原因 00E30083、资源类型 00000802 和资源名称 BINDLOCK

4

1 回答 1

0

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

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

IBM Knowledge Center建议尽可能添加频繁的 COMMIT 操作。

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

建议:ACQUIRE(USE) 和 RELEASE(DEALLOCATE) 在使用页或行锁定时提供良好的并发性并最大限度地提高性能。

为了尽可能短地保持独占锁,建议将 INSERT、UPDATE 和 DELETE 语句组合在一个宿主语言程序中,然后是一个 COMMIT。如果这些 SQL 语句散布有宿主语言代码,则在执行宿主语言代码时会持有锁。

作为最后的手段,如果您不想优化查询,并且假设它不是死锁,您可以禁用锁定超时

在 DB2 for *NIX/Windows 上,将“LOCKTIMEOUT”参数更改为“-1”。(不确定它对 z/OS 是什么,或潜在的影响。)

欢迎来到堆栈溢出。

于 2015-04-19T16:59:04.400 回答