因為資料庫正在使用中,所以無法取得對資料庫的獨佔存取權。
-- 1. 強制設為 OFFLINE,立即回滾所有未完成交易
ALTER DATABASE [YourDB] SET OFFLINE WITH ROLLBACK IMMEDIATE;
-- 2. 執行還原、刪除或其他獨佔操作
-- RESTORE DATABASE [YourDB] ... / DROP DATABASE [YourDB];
-- 3. 作業完成後設回 ONLINE
ALTER DATABASE [YourDB] SET ONLINE;
SET OFFLINE 會關閉資料庫、斷開所有連線、回滾開啟中交易。WITH ROLLBACK IMMEDIATE 不等待交易認可/回滾完成,直接強制中斷,確保立即取得獨佔鎖定。-- 單一使用者模式(舊版常用)
EXEC sp_dboption 'YourDB', 'single user', 'true';
-- 執行作業
EXEC sp_dboption 'YourDB', 'single user', 'false';
-- 或殺掉所有連線的 SPID(需動態產生 KILL 指令)
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'KILL ' + CAST(session_id AS NVARCHAR(10)) + N';'
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('YourDB') AND session_id <> @@SPID;
EXEC (@sql);
推薦仍以 SET OFFLINE WITH ROLLBACK IMMEDIATE 為首選,語法簡潔、行為確定、不需游標動態 SQL。
RESTORING、RECOVERY_PENDING 等異常狀態,可能需先 SET EMERGENCY 再處理。BACKUP LOG ... WITH NORECOVERY 再執行離線。