我从servlet到DB2一个接一个地调用update语句.我收到错误sqlstate 40001,原因代码68,我发现它是由于死锁超时.
>我该如何解决这个问题?
>可以通过设置查询超时来解决吗?
>如果是,那么如何在servlet中使用更新语句或在何处使用它?
解决方法
原因代码68已经告诉您这是由于锁定超时(死锁是原因代码2)可能是由于其他用户同时运行查询使用您正在访问的相同数据或您自己的多个更新.
首先运行db2pd -db locktest -locks显示db2命令行的详细信息,以查看锁定的位置.然后你需要运行类似的东西:
select tabschema,tabname,tableid,tbspaceid from syscat.tables where tbspaceid = # and tableid = #
使用从db2pd命令输出获得的ID号填入#符号.
一旦你看到锁的位置,这里有一些提示:
◦有时可以通过确保所有应用程序以相同的顺序访问其公共数据来减少解锁频率 – 例如,他们访问(并因此锁定)表A中的行,然后是表B,然后是表C,以及等等.
推荐阅读:http://www.ibm.com/developerworks/data/library/techarticle/dm-0511bond/index.html
附录:如果您的servlet或其他有罪应用程序正在使用被发现参与死锁的select语句,如果新更新(或插入)数据的准确性不重要,您可以尝试将with ur
附加到select语句.