快速斷開當前數據庫的所有連接的方法


快速斷開當前數據庫的所有連接的方法

以前我喜歡執行這個腳本,然后當要斷開所有連接的時候就執行一下這個腳本,但是當我重裝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句話就可以斷開數據庫所有連接了!!

再次感謝瀟湘隱者大俠提供的方法!!

  如果大家有什么需要補充的,或者文章有不正確的,歡迎大家拍磚!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM