快速斷開當前數據庫的所有連接的方法
以前我喜歡執行這個腳本,然后當要斷開所有連接的時候就執行一下這個腳本,但是當我重裝SQLSERVER的時候,又要在代碼庫里
找到這個腳本執行覺得很不方便,實際上分離數據庫也能夠斷開所有連接
1 USE master 2 GO 3 SET ANSI_NULLS ON 4 SET QUOTED_IDENTIFIER ON 5 go 6 7 ALTER PROC [dbo].[Sp_KillAllProcessInDB] @DbName VARCHAR(100) 8 AS 9 IF DB_ID(@DbName) = NULL 10 BEGIN 11 PRINT 'DataBase dose not Exist' 12 END 13 ELSE 14 BEGIN 15 DECLARE @killspId VARCHAR(30) 16 DECLARE TmpCursor CURSOR 17 FOR 18 SELECT 'Kill ' + CONVERT(VARCHAR, spid) AS spId 19 FROM master..SysProcesses 20 WHERE DB_NAME(dbid) = @DbName 21 AND spid <> @@spid --終止不是當前進程的進程(不等於當前進程) 22 AND dbid <> 0 --數據庫ID不是0 23 OPEN TmpCursor 24 FETCH NEXT FROM TmpCursor 25 26 INTO @killspId --select into @killspId 27 WHILE @@FETCH_STATUS = 0 28 BEGIN 29 EXEC (@killspId) 30 FETCH NEXT FROM TmpCursor 31 INTO @killspId 32 33 END 34 35 CLOSE TmpCursor 36 DEALLOCATE TmpCursor 37 END 38 39 40 --exec Sp_KillAllProcessInDB '要訪問的數據庫'
但是今晚我發現其實分離數據庫更快,不過唯一不方便的地方是,分離數據庫之后,你需要重新附加數據庫

點擊“確定”就OK了,所有連接都斷開
不過,當數據庫中的數據文件或者事務日志文件比較多的時候,不像我這樣,只有一個數據文件和一個事務日志文件
附加的時候就要寫sql語句指定數據文件和日志文件的位置了
1 --語法 2 EXEC [sys].[sp_attach_db] @dbname = NULL, -- sysname 3 @filename1 = N'', -- nvarchar(260) 4 @filename2 = N'', -- nvarchar(260) 5 @filename3 = N'', -- nvarchar(260) 6 @filename4 = N'', -- nvarchar(260) 7 @filename5 = N'', -- nvarchar(260) 8 @filename6 = N'', -- nvarchar(260) 9 @filename7 = N'', -- nvarchar(260) 10 @filename8 = N'', -- nvarchar(260) 11 @filename9 = N'', -- nvarchar(260) 12 @filename10 = N'', -- nvarchar(260) 13 @filename11 = N'', -- nvarchar(260) 14 @filename12 = N'', -- nvarchar(260) 15 @filename13 = N'', -- nvarchar(260) 16 @filename14 = N'', -- nvarchar(260) 17 @filename15 = N'', -- nvarchar(260) 18 @filename16 = N'' -- nvarchar(260)
1 --指定文件的位置 2 EXEC [sys].[sp_attach_db] @dbname = DLGPOS, -- sysname 3 @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DLGPOS.mdf', -- nvarchar(260) 4 @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DLGPOS_1.ldf' -- nvarchar(260) 5 6 ---------------------------------------------- 7 --或者如果數據文件和日志文件超過16個,建議使用下面這個語句 8 CREATE DATABASE DLGPOS FOR ATTACH 9 on --數據文件 10 ( 11 name = '', --數據文件邏輯名 12 filename = '',--數據文件存放路徑 13 size = 1MB,--初始大小 14 maxsize = 10MB,--最大大小 15 filegrowth = 1MB--增長速度 16 ) 17 log on --日志文件 18 ( 19 name = '', --日志文件邏輯名 20 filename = '',--日志文件存放路徑 21 size = 1MB,--初始大小 22 maxsize = 10MB,--最大大小 23 filegrowth = 1MB--增長速度 24 )
-----------------------------------------華麗的分割線-----------------------------------------
看來用GUI還不能解決問題,最后還是使用博客園里瀟湘隱者的方法
1 USE master 2 GO 3 ALTER DATABASE [GPOSDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 4 GO 5 --查看是否還有用戶連接 6 SELECT * FROM sys.[sysprocesses] WHERE DB_NAME([dbid])='gposdb' 7 GO 8 ALTER DATABASE [GPOSDB] SET MULTI_USER 9 GO
雖然都是利用SQL語句,但是他的方法很簡單,4句話就可以斷開數據庫所有連接了!!
再次感謝瀟湘隱者大俠提供的方法!!
如果大家有什么需要補充的,或者文章有不正確的,歡迎大家拍磚!!
