2011-09-13 54 views
0

我在爲我的網站的dev版本測試數據庫。不知何故,我創建了一個阻止事務,我不知道如何擺脫。意外的,長時間運行的阻塞事務

我試圖運行下面的查詢:

SELECT COUNT(*) FROM Users 

但查詢並不去任何地方。我發現以下交易封鎖了它:

TransactionID: 19593 
Transaction name: user_transaction 
Total Locks: 158,936 
Transaction Type: Full Transaction 
Isolation Level: Unknown 

此交易已運行90分鐘。

我相信這是與此查詢我跑:

DECLARE @cursor CURSOR 
DECLARE @userid uniqueidentifier 

SET @cursor = CURSOR 
FOR 
SELECT TOP(1000) userid FROM Users 

OPEN @cursor 

FETCH NEXT FROM @cursor INTO @userid 

DECLARE @counter int = 0 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @counter = @counter + 1 
    PRINT @Counter 
    EXEC sp_removeUser @userid, 0 

    FETCH NEXT FROM @cursor INTO @userid 
END 

(我知道遊標是不好的,但通常就沒有必要刪除5000個用戶同時)

然而,這個查詢成功完成,所以我不知道爲什麼它可能仍然存在一個事務。在完成之前,我取消了此查詢的先前版本,是否會產生問題?

什麼可能導致這個阻塞事務,我該如何終止它?

+0

是你運行光標明確的事務?你如何得出光標應該歸咎的結論?你還在哪裏運行它?在SSMS中?如果是,窗戶仍然打開?如果是這樣,SELECT @@ TRANCOUNT'告訴你什麼? –

+0

我認爲它一定是光標,因爲我沒有運行其他可能會阻塞的查詢。是的,它是SSMS。 ......當我試圖關閉窗口時,它提到了一些有關未完成的交易。哎呦。什麼是正確的語法? – Oliver

+0

您需要執行COMMIT足夠多的時間才能將@@ TRANCOUNT設置爲零。 –

回答

相關問題