分享方式:


MSSQLSERVER_1205

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 1205
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 LK_VICTIM
訊息文字 交易 (處理序識別碼 %d) 在 %.*ls 資源上被另一個處理序鎖死,並已被選為死結的犧牲者。 請重新執行該交易。

說明

資源會以不同交易的衝突順序存取,導致 死結。 例如:

  • Transaction1 會更新 Table1.Row1,而 Transaction2 則會更新 Table2.Row2
  • Transaction1 嘗試更新 Table2.Row2 ,但因為 Transaction2 尚未認可且尚未釋放其鎖定而遭到封鎖
  • Transaction2 現在會嘗試更新 Table1.Row1 ,但因為 Transaction1 尚未認可且尚未釋放其鎖定而遭到封鎖
  • 發生死結的原因是 Transaction1 正在等候 Transaction2 完成,但 Transaction2 正在等候 Transaction1 完成。

系統會偵測到此死結,並會選擇其中一個相關交易作為「受害者」。 然後,它會發出此錯誤訊息,回復受害者的交易。 如需詳細資訊,請參閱 死結

使用者動作

死結在大部分情況下與應用程式相關的問題,並要求應用程式開發人員進行程式代碼變更。 收到錯誤 1205 的其中一種方法是再次執行查詢。 如需如何重試的範例,請參閱此部落格 - 處理死結並重新執行查詢:適用於開發人員的死結模擬器應用程式: 如何在您的應用程式中處理 SQL 死結問題

您也可以修改應用程式,以避免死結。 選擇為犧牲者的交易可以重試,而且可能會成功,視同時執行的作業而定。

若要防止或避免發生死結,請考慮讓所有交易以相同順序存取數據列 (Table1,然後 是 Table2)。 如此一來,雖然可能會發生封鎖,但會避免死結。

如需詳細資訊,請參閱處理死結和最小化死結