0

我们有一个带有四个克隆的 WebSphere 集群。每个克隆上运行相同的代码。我们让 Quartz 定期启动运行代码的作业。

该代码尝试更新表中的一行,以便只有一个克隆能够成功更新表,然后该克隆将运行其余的作业。就像是:

update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'

当我们执行更新语句时,我们不会启动事务。

我们有时看到的是所有四个克隆都无法更新表,并且都出现锁定超时错误(sql 代码 -913)。

我们还尝试了另一种方法,即启动事务,选择以查看该行是否标记为正在运行,如果没有,则执行更新并提交;否则回滚。

那有同样的问题。

我们尚未尝试的一种解决方案是将选择修改为“选择更新”,尽管从我的谷歌搜索来看,我怀疑这是否会有所帮助。

有什么建议么?

4

1 回答 1

0

这最终不是问题(这就是我听别人而不自己检查的结果)。

我在我们的开发环境中使用两个克隆对此进行了测试。其中一个克隆偶尔会看到 -913 锁定超时错误,而另一个克隆会成功更新表。除了丑陋的日志消息外,一切正常。

然而,通常我们不会得到 -913 错误,而是一个警告,表明没有从其中一个克隆中更新的行。同样,这种行为很好。

因此,正如我们最初所想的那样,Clockwork-Muse 也建议,以这种方式使用 UPDATE 语句来强制锁定在 DB2 中工作得很好。

于 2013-03-05T14:35:23.547 回答