domingo, 19 de febrero de 2012

Cerrar Todas Las Conexiones A Base De Datos SQL Server

Hola amigos. Hace algún tiempo un amigo me compartió este script que encontró en SQLServerCentral. Su finalidad es cerrar todas las conexiones existentes a una base de datos SQL Server. Solamente necesitas pasarle como parámetro el nombre de la base de datos. Lo he aplicado en SQL Server 2005 y funciona sin problemas.
Aunque no he trabajado como DBA en mi trabajo como desarrollador me ha sido de mucha utilidad. Espero le s sea útil a ustedes también.


/*

* Author Rafal Skotak

* Purpose Procedure tries to kill all connections to the specified database

*

* Date 2011.02.18

*

******************************************************************************************************/

USE [master]

GO

CREATE PROCEDURE proc_kill_dbconnections

@dbname SYSNAME

with encryption

as

begin

set nocount on



------- prepare temporary tables

-------------------------------------------

create table #temp_processes_table

(

spid int primary key,

ecid int,

status sysname,

loginame sysname null,

hostname sysname null,

blk int,

dbname sysname null,

cmd sysname null,

request_id int null,

mod int not null default 0

);



-- get processes list

--------------------------

insert into #temp_processes_table (spid, ecid, status, loginame, hostname, blk, dbname, cmd, request_id)

exec sp_who



declare @count int

declare @process_id int

declare @cmd varchar(8000)



select @count = count(*) from #temp_processes_table where mod = 0



while @count > 0

begin

set @process_id = NULL



select top 1 @process_id = spid from #temp_processes_table where mod = 0 and dbname = @dbname



if @process_id is NULL

break



print @process_id



set @cmd = 'kill ' + cast(@process_id as varchar)



exec (@cmd)



update #temp_processes_table set mod = 1 where spid = @process_id



select @count = count(*) from #temp_processes_table where mod = 0 and dbname = @dbname

end



-- cleanup - drop temporary tables

---------------------------------------

drop table #temp_processes_table

end

go



-- example



-- exec dbo.proc_kill_dbconnections 'dbCuentasxCobrar'