快速斷開當前資料庫的所有連線的方法

2022-01-11 20:22:02 字數 4229 閱讀 6682

以前我喜歡執行這個指令碼,然後當要斷開所有連線的時候就執行一下這個指令碼,但是當我重灌sqlserver的時候,又要在**庫里

找到這個指令碼執行覺得很不方便,實際上分離資料庫也能夠斷開所有連線

1

usemaster2go

3set ansi_nulls on

4set quoted_identifier on5go

67alter

proc

[dbo

].[sp_killallprocessindb

]@dbname

varchar(100)8

as9ifdb_id(@dbname) =

null

10begin

11print

'database dose not exist'12

end13

else

14begin

15declare

@killspid

varchar(30)16

declare tmpcursor cursor

17for

18select

'kill '+

convert(varchar, spid) as

spid

19from

master..sysprocesses

20where

db_name(dbid) =

@dbname

21and spid <>

@@spid

--終止不是當前程序的程序(不等於當前程序)

22and dbid <>0--

資料庫id不是0

23open

tmpcursor

24fetch

next

from

tmpcursor

2526

into

@killspid

--select into @killspid

27while

@@fetch_status=0

28begin

29exec (@killspid)30

fetch

next

from

tmpcursor

31into

@killspid

3233

end34

35close

tmpcursor

36deallocate

tmpcursor

37end

3839

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

--指定檔案的位置

2exec

[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)56

----------------------------------------------7--

或者如果資料檔案和日誌檔案超過16個,建議使用下面這個語句

8create

database dlgpos for

attach 9on

--資料檔案

10(

11 name =

'', --

資料檔案邏輯名

12 filename =

'',--

資料檔案存放路徑

13 size = 1mb,--

初始大小

14 maxsize = 10mb,--

最大大小

15 filegrowth = 1mb--

增長速度

16)

17log

on--

日誌檔案

18(

19 name =

'', --

日誌檔案邏輯名

20 filename =

'',--

日誌檔案存放路徑

21 size = 1mb,--

初始大小

22 maxsize = 10mb,--

最大大小

23 filegrowth = 1mb--

增長速度

24 )

-----------------------------------------華麗的分割線-----------------------------------------

看來用gui還不能解決問題,最後還是使用裡瀟湘隱者的方法

1

usemaster2go

3alter

database

[gposdb

]set single_user with

rollback

immediate4go

5--檢視是否還有使用者連線

6select

*from sys.[

sysprocesses

]where

db_name([

dbid

])='

gposdb'7

go8alter

database

[gposdb

]set

multi_user

9go

雖然都是利用sql語句,但是他的方法很簡單,4句話就可以斷開資料庫所有連線了!!

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

斷開所有資料庫連線

create proc killspid dbname varchar 20 as begin declare sql nvarchar 500 declare spid int set sql declare getspid cursor for select spid from sysproce...

T Sql如何斷開指定資料庫的所有使用者連線

declare dbname sysname 要斷開連線的資料庫名 set dbname test declare s nvarchar 1000 declare tb cursor local forselect n kill cast spid as varchar from master.sy...

MYSQL資料庫自動斷開連線

看大佬們的部落格發現一共三種解決方案。這個引數的名稱是 wait timeout,其預設值為 28800秒 8小時 其意義為關閉乙個連線之前在這個連線上等到行動的秒數,也就是說,如果乙個連線閒置超過這個選項所設定的秒數,mysql會主動斷開這個連線。修改操作 linux下開啟 etc my.cnf,...