java.sql.BatchUpdateException:事务(进程ID 58)是 锁定资源与另一个进程死锁并已被选中 作为死锁的受害者。重新运行该交易。
我有两个java应用程序,一个从sybase读取数据并写入sql server 2008,另一个从sql server 2008表读取数据并将其写入其他表。现在两个应用程序工作正常。但我有很多人从mssql表访问数据,其中第二个应用程序每30秒更新一次数据。所以我得到了上述异常。我在stackoverflow中看到类似的线程但是 Deadlock troubleshooting in Sql Server 2008 我对此处提供的解决方案有问题
行版本控制
我可以使用rowversion来避免在我的情况下死锁吗?我怎么能用它?
修改
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秒更新一次(整个表被删除并插入但是两个任务
答案 0 :(得分:1)
在大多数情况下,死锁表明您的实现存在问题 - 查询顺序,锁定顺序或连接顺序存在问题。我建议收集并分析你的死锁(MSDN: Analyzing Deadlocks with SQL Server Profiler),这样你就可以在代码中找到发生死锁的确切位置并修复它们。