我们有一个包含四个克隆的WebSphere集群。相同的代码在每个克隆上运行。我们让Quartz定期启动运行代码的作业。
代码尝试更新表中的行,以便只有一个克隆能够成功更新表,然后该克隆将运行其余的作业。类似的东西:
update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'
执行update语句时,我们不会启动事务。
我们有时会看到所有四个克隆都无法更新表,并且都会出现锁定超时错误(sql代码-913)。
我们还尝试了另一种方法,我们开始一个事务,选择查看该行是否被标记为正在运行,如果没有,则执行更新和提交;然后回滚。
那有同样的问题。
我们尚未尝试的一个解决方案是将选项修改为&#34;选择更新&#34;虽然从我的googleing,我怀疑这是否会有所帮助。
有什么建议吗?
答案 0 :(得分:0)
这最终不是一个问题(这就是我在没有自己检查的情况下听取某人的意见)。
我在开发环境中用两个克隆测试了这个。其中一个克隆偶尔会看到-913锁定超时错误,而另一个克隆会成功更新表格。除了丑陋的日志消息之外,一切都按预期工作。
但是,通常情况下,我们不会得到-913错误,而是一个警告,指示没有要从其中一个克隆更新的行。再次,这种行为很好。
因此,正如我们原先认为的那样,Clockwork-Muse也建议,以这种方式使用UPDATE语句来强制执行锁定在DB2中运行得很好。