2008年6月29日 星期日

立即中斷所有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作業

沒有留言: