2008-12-05 146 views
1

我有一個uniqueidentifier列上具有聚集主鍵索引的表。我有一個運行以下僞功能的程序:在密鑰上的SQL Server 2005死鎖

begin transaction 
read from table 1 
insert into table 2 
update table 1 with pointer to table 2 record 
commit transaction 

,直到同樣的程序是從其他地方同時執行這一切工作正常。一旦發生這種情況,其中一個執行會在主鍵上每次都死鎖並終止。

任何想法我可以做什麼來防止這種情況,簡稱「不同時運行」?事務正在READ COMMITTED隔離級別運行。

回答

2
  1. 增加事務隔離級別eulerfx.myopenid.com的暗示。

  2. 使用sql「mutexes」來簡單地等待一個過程完成,然後再讓另一個運行。 http://weblogs.sqlteam.com/mladenp/archive/2008/01/08/Application-Locks-or-Mutexes-in-SQL-Server-2005.aspx

  3. 使用快照隔離級別。取決於你的應用程序可以工作。然而這會帶來其他問題。 http://msdn.microsoft.com/en-us/library/ms189050.aspx

數2需要更多的代碼變化超過1雖然。但有時你不能只是增加隔離級別。