### The error occurred while setting parameters
### SQL: update ERP_SCjh_zzc_pl set IF_TONGBU=1 where (IF_TONGBU=0 or IF_TONGBU is null) and djno=? and djlb=?
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事務(進程 ID 191)與另一個進程被死鎖在 鎖 | 通信緩沖區 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。
; SQL []; 事務(進程 ID 191)與另一個進程被死鎖在 鎖 | 通信緩沖區 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 事務(進程 ID 191)與另一個進程被死鎖在 鎖 | 通信緩沖區 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。
[2019-08-24 17:26:52,077] [qtp1891502635-26] [ERROR] [ExceptionController.java:26] ==>Exception Msg:
感覺這篇文章寫的不錯,讀了三遍不是太明白,記錄下來:
https://www.cnblogs.com/happyhippy/archive/2008/11/14/1333922.html
解決辦法:
- SQLServer自動選擇一條SQL作死鎖的犧牲品;
- 按同一順序訪問對象;
- SELECT語句加with (onlock)提示;
- 使用較低的隔離級別
- 在SQL前加SET LOCK_TIMEOUT timeout_period,當請求鎖超過設定的timeout_period時間后,就會終止當前SQL的執行
- 使用基於行版本控制的隔離級別
- 使用綁定連接
鎖相關:https://www.cnblogs.com/wynn0123/p/4633776.html