以前我喜歡執行這個指令碼,然後當要斷開所有連線的時候就執行一下這個指令碼,但是當我重灌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雖然都是利用sql語句,但是他的方法很簡單,4句話就可以斷開資料庫所有連線了!!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
再次感謝瀟湘隱者大俠提供的方法!!
斷開所有資料庫連線
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,...