快速断开当前数据库的所有连接的方法
以前我喜欢执行这个脚本,然后当要断开所有连接的时候就执行一下这个脚本,但是当我重装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 BEGIN11 PRINT 'DataBase dose not Exist'12 END13 ELSE 14 BEGIN15 DECLARE @killspId VARCHAR(30)16 DECLARE TmpCursor CURSOR17 FOR18 SELECT 'Kill ' + CONVERT(VARCHAR, spid) AS spId19 FROM master..SysProcesses20 WHERE DB_NAME(dbid) = @DbName21 AND spid <> @@spid --终止不是当前进程的进程(不等于当前进程)22 AND dbid <> 0 --数据库ID不是023 OPEN TmpCursor24 FETCH NEXT FROM TmpCursor25 26 INTO @killspId --select into @killspId27 WHILE @@FETCH_STATUS = 0 28 BEGIN29 EXEC (@killspId)30 FETCH NEXT FROM TmpCursor31 INTO @killspId32 33 END34 35 CLOSE TmpCursor36 DEALLOCATE TmpCursor37 END38 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 master2 GO3 ALTER DATABASE [GPOSDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE4 GO5 --查看是否还有用户连接6 SELECT * FROM sys.[sysprocesses] WHERE DB_NAME([dbid])='gposdb'7 GO8 ALTER DATABASE [GPOSDB] SET MULTI_USER 9 GO
虽然都是利用SQL语句,但是他的方法很简单,4句话就可以断开数据库所有连接了!!
再次感谢潇湘隐者大侠提供的方法!!
如果大家有什么需要补充的,或者文章有不正确的,欢迎大家拍砖!!