java.sql.BatchUpdateException:事務(進程ID 58)是 死鎖的鎖資源與另一個進程,並已被選 作死鎖犧牲品。重新運行交易。與SQL Server 2008中移除死鎖問題,同時讀取和寫入數據
我有兩個Java應用程序,一個從sybase讀取數據並寫入到sql server 2008,另一個從sql server 2008表讀取數據並將其寫入其他表。現在這兩個應用程序工作正常。但是我有很多人從mssql表中訪問數據,第二個應用程序每30秒更新一次數據。所以我得到了上述例外。我在這裏看到了類似的螺紋計算器,但 Deadlock troubleshooting in Sql Server 2008 我有問題,在這裏提出的解決方案
行版本
我的用戶rowversioning能避免我的情況死鎖,我怎麼能使用它?
編輯
String selectAllQuery = "Select new_site_id from GIS.MAP.ro";
String selectQuery = "Select siteId from GIS.MAP.status where AlarmCode in ('1','2','3') and localNodeAlias like 'FLM%'";
String updateQuery = "update GIS.MAP.ro set active_site_status = ? where new_site_id = ?";
String updateAllQuery = "update GIS.MAP.ro set active_site_status = site_status where new_site_id = ?";
所以,我從GIS.MAP.status
表和更新更新GIS.MAP.ro
表中選擇。其實GIS.MAP.status
表也更新每30秒(整個表被刪除,插入,但兩種任務
- 插入GIS.MAP.status在前,交易 致力於
- 更新GIS.MAP.ro表去第二和交易 致力於
- 最後,從GIS.MAP.ro的數據是由第三方應用程序許多用戶訪問。 其實僵局occours在這種情況下。
當geoserver訪問正在修改的地圖數據列時發生死鎖。我認爲geoserver只使用select查詢而沒有任何內容。 – kinkajou 2012-01-12 11:30:06
你的選擇有多簡單?例如,如果它使用子查詢,那麼如果其他進程正在修改相同的表,則可能會發生死鎖。 – 2012-01-12 11:46:56
yes表正在被另一個進程修改,並且數據正被使用其他應用程序的人員使用。 – kinkajou 2012-01-12 11:50:16