SQL Server中强制关闭数据库连接

1.问题引入

在SQL Server中备份/还原/分离/脱机/删除指定数据库时, 如果有其他用户正在使用此数据库时, SQL Server为了防止数据异常, 会报错而终止你的操作.

   当然, 在SQL 2005/2008里, 在做[分离/删除]数据库时提供了一个选项[关闭所以连接]供勾选(SQL 2000好像没有哦), 然而[备份/还原]操作却没有此选择, 也许你会说可以先[脱机数据库]再做[备份还原]操作, 对, 但你会发现[脱机]处理太慢了J, 那在SQL2005以及SQL 2008下有哪些方法可以解决此问题呢???    

2。解决办法
在这里我只介绍一种使用自己写的存储过程来解决的方案
存储过程代码如下所示:
--关闭用户打开的进程处理 
USE master

go 

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    DROP PROCEDURE [dbo].[p_killspid]
go
create   proc   p_killspid 
@dbname   varchar(200) --要关闭进程的数据库名 
as     
declare   @programName     nvarchar(200), 
@spid   nvarchar(20) 

declare   cDblogin   cursor   for 
select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname) 
open   cDblogin
fetch   next   from   cDblogin   into   @spid 
while   @@fetch_status=0 
begin    
--防止自己终止自己的进程  
--否则会报错不能用KILL 来终止您自己的进程。   
IF	@spid <> @@SPID
	exec( 'kill   '+@spid) 
fetch   next   from  cDblogin   into   @spid 
end     
close   cDblogin 
deallocate   cDblogin
go 


--用法     
exec   p_killspid     'fdoam'
 参考文章:
http://www.cnblogs.com/qiantuwuliang/archive/2009/03/16/1412935.html

http://msdn.microsoft.com/zh-cn/library/ms179881.aspx

 


 

你可能感兴趣的:(数据库)