« - »

Matar procesos de SQL Server para liberar una base de datos

Friday, 17 de October de 2008

Pués necesitaba restaurar una copia de una base de datos de producción a un entorno de test y me daba errores de que no podía hacerlo por que la base de datos estaba en uso.

En la consola del administrador corporativo veo esos procesos, pero por más que le diga que los elimine, no hay manera, así que buscando un poco en google, he encontrado esto, que genera un cursor para matar todos los procesos de una base de datos en concreto.

CREATE TABLE #TmpWho
(spid INTecid INTstatus VARCHAR(150), loginame VARCHAR(150),
hostname VARCHAR(150), blk INTdbname VARCHAR(150), cmd VARCHAR(150))

INSERT INTO     #TmpWho
EXEC       sp_who
DECLARE    @spid INT
DECLARE    @tString VARCHAR(15)
DECLARE    @getspid CURSOR

SET @getspid =   CURSOR FOR
SELECT         spid
FROM       #TmpWho
WHERE          dbname 'mydb'OPEN @getspid

FETCH NEXT FROM @getspid INTO @spid
WHILE @@FETCH_STATUS 0

BEGIN
SET @tString 'KILL ' CAST(@spid AS VARCHAR(5))
EXEC(@tString)
FETCH NEXT FROM @getspid INTO @spid
END

CLOSE @getspid
DEALLOCATE @getspid

DROP TABLE #TmpWho




Oli en un llum (aceite en una lámpara), vamos que funciona a las mil maravillas (al menos en un SQL Server 2000 con SP3).

La fuente (en inlgés) aquí.


Dejar una respuesta