2011-02-24 46 views
14

SQL Server會告訴我一個數據庫正在使用中,當我試圖刪除或還原,但是當我運行這個元數據查詢:SQL Server的告訴我數據庫正在使用中,但它不是

select * from sys.sysprocesses 
where dbid 
    in (select database_id from sys.databases where name = 'NameOfDb') 

它什麼都沒有返回。

有時它會返回1個CHECKPOINT_QUEUE等待類型的進程。如果我試圖殺死這個進程,它不會讓我(不能殺死一個非用戶進程)。

任何人都有什麼想法是什麼錯?

+0

您是否嘗試過檢查關閉現有連接選項? – 2011-02-24 13:10:58

+1

你不是*你試圖放棄的數據庫是你嗎?聽起來很愚蠢,你必須在不同的數據庫執行這樣的命令 – 2011-02-24 13:11:26

+0

這個問題可能有更好的機會在http://serverfault.com/ – 2011-02-24 13:42:30

回答

12

可能有很多東西阻塞你的數據庫。例如,如果您在該數據庫上打開了一個查詢窗口,它將被您鎖定。不包括外部訪問,如IIS上的Web應用程序。

如果您確實想強制刪除它,請檢查關閉現有連接選項或嘗試手動停止SQL Server的服務。

+0

是的,因爲它是我已經手動重新啓動服務,但顯然我不能這樣做。我會嘗試關閉現有的連接選項。 – tuseau 2011-02-24 15:40:29

+0

@tuseau如果您嘗試以可視方式刪除數據庫,而不是通過命令行,則該選項可用。此致,我不知道如何以編程方式設置該選項。但是,如果您嘗試以可視方式放棄它,您會注意到該複選框。很高興我能幫上忙。 – Smur 2011-02-24 17:25:41

+1

事實上,我發現即使SQL Server Management Studio中的開放查詢選項卡也會阻止數據庫關閉它。 – Ray 2016-07-11 12:03:21

26

我喜歡這個腳本。不要着力於查殺..

use master 

alter database xyz set single_user with rollback immediate 

restore database xyz ... 

alter database xyz set multi_user 
+1

+1謝謝,非常有用。 – mmdemirbas 2013-04-12 09:21:05

7

我在嘗試從備份恢復數據庫時遇到同樣的問題。對我來說,解決方案是確保在執行還原之前在選項頁面中選中了「覆蓋現有數據庫(WITH REPLACE)」和「關閉與目標數據庫的現有連接」。以下是截圖。

enter image description here

+0

對於那些更偶然或不經常使用SSMS或SQL的用戶,一般知道如何在還原期間選中這些選項是關鍵選項 – MikeJ 2017-11-21 10:21:00

+0

「關閉與目標數據庫的現有連接」並不總是可用。我不知道爲什麼 - 從我的觀察結果來看,它始終可用於具有簡單恢復模式的本地數據庫,但如果我從已設置爲完全恢復模式的服務器還原備份,則永遠不可用。 – 2017-12-08 10:31:17

相關問題