回覆列表
  • 1 # ymkkn32126

    資料庫操作的死鎖是不可避免的,本文並不打算討論死鎖如何產生,重點在於解決死鎖,透過SQL Server 2005, 現在似乎有了一種新的解決辦法。 將下面的SQL語句放在兩個不同的連線裡面,並且在5秒內同時執行,將會發生死鎖。 use Northwindbegin tran  insert into Orders(CustomerId) values(@#ALFKI@#)  waitfor delay @#00:00:05@#  select * from Orders where CustomerId = @#ALFKI@#commitprint @#end tran@# SQL Server對付死鎖的辦法是犧牲掉其中的一個,丟擲異常,並且回滾事務。在SQL Server 2000,語句一旦發生異常,T-SQL將不會繼續執行,上面被犧牲的連線中, print @#end tran@#語句將不會被執行,所以我們很難在SQL Server 2000的T-SQL中對死鎖進行進一步的處理。 現在不同了,SQL Server 2005可以在T-SQL中對異常進行捕獲,這樣就給我們提供了一條處理死鎖的途徑: 下面利用的try ... catch來解決死鎖。 SET XACT_ABORT ONdeclare @r intset @r = 1while @r 0begin  declare @ErrorMessage nvarchar(4000);  declare @ErrorSeverity int;  declare @ErrorState int;  select    @ErrorMessage = ERROR_MESSAGE(),    @ErrorSeverity = ERROR_SEVERITY(),    @ErrorState = ERROR_STATE();  raiserror (@ErrorMessage,        @ErrorSeverity,        @ErrorState        );end

  • 中秋節和大豐收的關聯?
  • 黃龍國家地質公國和黃龍風景區是同一個地方嗎?