2011-04-11 239 views
12

這是我在生產服務器上遇到的一個奇怪問題。它在過去的兩週裏發生過兩次,而且這是一個獲得大量流量的服務器。我們在執行BEGIN TRAN的Web服務中有一些代碼,然後運行幾個SQL查詢(兩個插入後跟一個更新)。然後在最後執行COMMIT。我們現在兩次收到日誌中的消息:COMMIT TRANSACTION請求沒有相應的BEGIN TRANSACTION

COMMIT TRANSACTION請求沒有對應的BEGIN TRANSACTION。

前兩個插入和更新之間,我們調用另一個Web服務,所以有可能是前兩個刀片和最近更新之間稍有延遲COMMIT被調用之前。這是否會導致我們的問題?我們在IIS 7和Server 2008 R2上運行此應用程序(全部應用更新)。

本來我們雖然可能是應用程序池被回收,但改變了在半夜回收。現在我不確定會導致SQL服務器忘記對BEGIN TRAN的調用。

這個Web服務確實被調用了很多。有沒有人見過這樣的事情?我目前處於全面虧損狀態......

任何幫助或建議大大讚賞!

+0

並且也有與此相關的一個bug - http://support.microsoft.com/kb/810100/en-us – Steam 2014-01-17 00:34:33

回答

21

它看起來像您的交易失敗後,得到了回滾並沒有什麼犯了這樣的事情

例如

CREATE TABLE BlaTest(id INT PRIMARY KEY NOT NULL) 
GO 

現在運行這個

BEGIN TRAN 

INSERT BlaTest VALUES('a') 
GO 

COMMIT TRAN 

以下是錯誤

Msg 245, Level 16, State 1, Line 3 
Conversion failed when converting the varchar value 'a' to data type int. 
Msg 3902, Level 16, State 1, Line 2 
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. 

這會不會有問題

BEGIN TRAN 

INSERT BlaTest VALUES(5) 
GO 

COMMIT TRAN 

上交易一篇好文章是由Error Handling in SQL 2005 and Later厄蘭Sommarskog

+0

這沒有任何意義,我。如果交易失敗,錯誤信息會不一樣嗎? – Sophtware 2011-04-11 15:49:38

+0

查看我添加的代碼我發佈了 – SQLMenace 2011-04-11 15:56:16

+6

+1 - 簡單修復這個@sophtware,是添加'IF @@ TRANCOUNT> 0 COMMIT TRAN'。這將檢查未完成的交易。在「ROLLBACK」之前你可以做同樣的事情。 – JNK 2011-04-11 15:57:56

0

運行我有同樣的問題。這是我做的解決它。

COMMIT TRANSACTION請求有沒有相應BEGIN TRANSACTION

我檢查了SQL查詢並添加BEGIN TRAN它會成功執行後。這裏我的示例代碼。它將工作:

ALTER procedure [dbo].[DeactivateUser] 
    @UserId bigint, 
    @LoginEmail Nvarchar(100), 
    @merchantId int 
    as 
    Begin 
     Begin tran 

     update Users set 
     LoginEmail='inactive'+CONVERT(VARCHAR(11), getdate(), 106)+'-'[email protected], 
     IsActive=0 
     where [email protected] and [email protected]      
     if(@@ERROR=0) 
      begin 
      commit Tran 
      select 0 
      end 
     else 
      begin 
      rollback Tran 
      select -1 
      end 


    end 
+0

它不是一個例子,它發生在我身上。所以我分享了答案任何如何看待這個。謝謝 – Praveen04 2013-08-01 13:46:46

相關問題