若是要刪除指定資料庫上的所有連線,可以使用以下方式:
SINGLE_USER 引數
指定每次只能有一位使用者存取資料庫。
如果指定了 SINGLE_USER,且沒有其他使用者連接到資料庫,就會封鎖 ALTER DATABASE 陳述式,直到所有使用者都中斷指定的資料庫為止。
資料庫會保留在 SINGLE_USER 模式中,即使是將選項記錄設為關閉的使用者也是如此。
此時其他使用者可以連接到這個資料庫,但只能有一位。
WITH ROLLBACK IMMEDIATE 引數
使用終止選項。所有未完成的交易都會回復,與指定資料庫的所有連接都會立即中斷。
若是要刪除指定資料庫上的所有連線,請參考以下的範例:
USE master GO ALTER DATABASE [資料庫名稱] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO
若是要刪除 SQL Server 上全部的連線,可以使用以下的範例,並且保留本身這條連線不會刪除。
以下是 SQL Server 2005 版本
USE master GO CREATE PROC KillUserConnections AS DECLARE @spid int, @SQLstr nvarchar(128) DECLARE spids_cr CURSOR FOR SELECT session_id FROM sys.dm_exec_connections WHERE session_id<>@@SPID FOR READ ONLY OPEN spids_cr FETCH spids_cr INTO @spid WHILE (@@FETCH_STATUS=0) BEGIN SET @SQLstr = 'KILL ' + CAST(@spid AS varchar) EXEC sp_executesql @SQLstr FETCH spids_cr INTO @spid END CLOSE spids_cr DEALLOCATE spids_cr GO -- 檢視 SQL Server 目前所有的連線 session ;所有目前的處理序 SELECT * FROM sys.dm_exec_connections -- 刪除所有的處理序、連線、session EXEC KillUserConnections -- 再度檢視 SQL Server 目前所有的連線 session ;所有目前的處理序 SELECT * FROM sys.dm_exec_connections
以下是 SQL Server 2000 與 2005 通用的版本
USE master GO CREATE PROC KillUserConnections AS DECLARE @spid int, @SQLstr nvarchar(128) DECLARE spids_cr CURSOR FOR SELECT spid FROM master..sysprocesses WHERE spid<>@@SPID AND net_address<>'' FOR READ ONLY OPEN spids_cr FETCH spids_cr INTO @spid WHILE (@@FETCH_STATUS=0) BEGIN SET @SQLstr = 'KILL ' + CAST(@spid AS varchar) EXEC sp_executesql @SQLstr FETCH spids_cr INTO @spid END CLOSE spids_cr DEALLOCATE spids_cr GO -- 檢視 SQL Server 目前所有的連線 session ;所有目前的處理序 EXEC sp_who2 -- 刪除所有的處理序、連線、session EXEC KillUserConnections -- 再度檢視 SQL Server 目前所有的連線 session ;所有目前的處理序 EXEC sp_who2
其中 sysprocesses 此為 SQL Server 2000 系統資料表。
還有其他方法嗎?
1. 停止 SQL Server ? 呵呵...這應該不是好方法。
2. 中斷伺服器的網路連線。
3. 啟用防火牆。
...等等
沒有留言:
張貼留言