2011-02-15 45 views
0

可以輕鬆地在您的測試環境中重現此訴訟。打開SSMS並連接到你的服務器。打開連接到MYTEST數據庫的新查詢選項卡(我假設MYTEST在線)。 不要對此標籤執行任何操作。打開連接到相同數據庫的新選項卡。在您的新標籤SSMS選項卡中的阻止

USE master 
GO 
ALTER DATABASE MYTEST 
SET OFFLINE 

您的代碼將頭阻止你從你的第一個標籤運行過程中鍵入下面的代碼。(請參閱活動監視器)。 即使在第一個選項卡中沒有任何與進程相關的任務,爲什麼執行被阻止?

回答

2

你需要告訴SQL踢每一個連接了

ALTER DATABASE MYTEST 
SET OFFLINE 
WITH ROLLBACK IMMEDIATE 

這是by design:到數據庫的連接已共享數據庫鎖定,是否執行或不。

<termination>::=

指定當數據庫從一種狀態轉變爲另一種時回滾未完成的事務。如果省略了終止子句,那麼如果數據庫上存在任何鎖定,ALTER DATABASE語句將無限期地等待。只能指定一個終止子句,並遵循SET子句。

只要運行sp_lock(或任何新的DMV是:-),你會看到他們

+1

ROLLABCK需要改變回滾,以避免「有語法錯誤」的消息。 – 2011-02-15 14:32:17

相關問題