立即中斷所有SQL Server連線

立即中斷所有SQL Server連線

 

1.針對單一資料庫的連線

範例:將Northwind資料庫設定為只能有一個連線,並中斷其他連線
--中斷Northwind資料庫的所有連線
USE master
GO
ALTER
DATABASE [Northwind]
SET SINGLE_USER
WITH ROLLBACK
IMMEDIATE;
GO

--復原為一般多人連線
USE master
GO
ALTER
DATABASE [Northwind]
SET MULTI_USER
WITH ROLLBACK
IMMEDIATE;
GO

2.針對所有SQL Server連線
(1)查出現有連線,一一刪除
EXEC
sp_who

KILL spid號碼

(2)使用T-SQL 的SURSOR取出所有非系統spid,一次全部刪除

USE master
GO
DECLARE @spid_number
int
DECLARE @sql_text varchar(100)

DECLARE CUR CURSOR FOR
SELECT
[spid] FROM master..sysprocesses
WHERE [spid] > 50 and [spid] <>
@@spid

OPEN CUR
FETCH CUR INTO @spid_number

WHILE
(@@FETCH_STATUS=0)
BEGIN

SET @sql_text = 'KILL ' + CAST(@spid_number
as varchar)

EXEC(@sql_text)

FETCH CUR INTO
@spid_number
END

CLOSE CUR
DEALLOCATE CUR
GO

-- Update on 2009-01-18
3.最快速的方式
(1)SQL Server 2005 - 設定資料庫為單一使用者連線
使用SSMS,針對要進行清除連線的資料庫,進入[屬性]設定的頁面

在左邊點選[選項],再到右下方限制存取項目修改為SINGLE_USER,再按確定

跳出此視窗,按一下[是],即可清除對此資料庫的所有連線

此時資料庫狀態已變成(單一使用者)

或直接用T-SQL

USE [master]
GO
ALTER
DATABASE [AdventureWorks] SET SINGLE_USER WITH NO_WAIT
GO
ALTER DATABASE
[AdventureWorks] SET SINGLE_USER
GO

(2)SQL Server 2000 - 利用卸離Detach資料庫工作
針對要進行清除連線的資料庫,執行卸離資料庫工作

點一下[清除]按鈕,即可清除所有對此資料庫的連線,再按一下取消,來取消卸離detach作業