我們擁有一個包含四個克隆的WebSphere集羣。相同的代碼在每個克隆上運行。我們Quartz定期啓動一個運行代碼的工作。DB2鎖定超時
代碼嘗試更新表中的一行,以便只有一個克隆能夠成功更新表,然後該克隆將運行剩餘的工作。例如:
update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'
當我們執行更新語句時,我們不啓動事務。
我們有時看到的是,所有四個克隆都無法更新表,並且全部都獲得鎖超時錯誤(sql代碼-913)。我們還嘗試了一個替代方案,我們開始一個事務,選擇查看該行是否標記爲正在運行,如果沒有,則執行更新和提交;否則回滾。
這有同樣的問題。
我們還沒有嘗試的一個解決方案是將select修改爲「select for update」,雖然從我的googleing中,我懷疑這是否會有所幫助。
有什麼建議嗎?
什麼版本的DB2?什麼是完整的錯誤信息?你確定沒有別的東西在觸摸那張桌子,並且沒有觸發器(或類似的)?語句的運行頻率如何 - 是否有可能以前的事務仍在運行?像這樣運行'UPDATE'可能是你最好的選擇。 – 2013-03-01 18:22:38