基于以下链接:
https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.regvars.doc/doc/r0005657.html
我打开DB2_CAPTURE_LOCKTIMEOUT=ON
,然后我检查我是否成功更改了它db2set -all
,我可以看到它已经打开了。
之后,我通过以下链接成功模拟了锁定超时:
https://db2forum.wordpress.com/2011/10/17/new-options-for-analyzing-lock-timeouts-in-db2-9-5/
我成功地得到了Reason code "68". SQLSTATE=40001
.
但是,我仍然无法在/home/db2inst1/sqllib/db2dump
获得任何db2locktimeout
日志。
我只能在这条路径中看到db2diag.log
,而看不到db2locktimeout
日志。
我可以知道我犯了什么错误吗?
正如您引用的 V10.5 页面,我假设您的 Db2 服务器至少在该版本。在寻求帮助时,请始终编写 Db2 版本和修订包。
此已弃用(但仍有效)变量仅对新编译的SQL 语句有效。 这意味着,如果您的包缓存已经缓存了 SQL 语句(用于重新创建 -911 原因码 68 的语句),那么如果这些 SQL 涉及 -911,则不会显示这些文件。
如果您的创建方案可以在开发数据库或测试数据库上工作,那么您可以刷新动态语句高速缓存(不要在生产环境中执行此操作),也可以退回 Db2 实例(这具有清除包高速缓存的副作用)。
如果您的重新创建场景仅使用 static-SQL,那么需要重新绑定这些包(不要在生产环境中执行此操作),或者您可以退回 Db2 实例。
如果只能在生产环境中重现问题,并且刷新、反弹或重新绑定对该环境的侵入性太大,则建议使用事件监视器进行锁定的替代方法,尽管这需要更多的努力。
要了解有关 Db2 如何编译 SQL,以及如何将动态 SQL 语句及其访问计划及其访问计划存储在内存中(称为包缓存)的更多信息,请学习 Db2-Knowledge Center 或查阅任何 Db2 参考书。