Data de postagem: Jun 10, 2011 2:47:3 PM
Problema do aluno: No SQL Server, quando executo a procedure sp_who2 aparecem muitos processos inativos.
Necessidade: Matar esses processos de forma automática.
Solução: Criar um batch que faça essa tarefa. Podemos agendar esse batch para que seja executado periodicamente.
USE MASTER
–
GO
–
DECLARE @DBNAME VARCHAR(128)
SET @DBNAME = ‘EXEMPLO’ — <<<<< AQUI VOCÊ SETA O NOME DO DATABASE
–
DECLARE @STRSQL VARCHAR(255)
–
PRINT ‘MATANDO USUÁRIOS INATIVOS’
PRINT ‘—————–’
–
CREATE TABLE #TMPUSUARIOS
(
SPID INT,
EID INT,
STATUS VARCHAR(30),
LOGINNAME VARCHAR(50),
HOSTNAME VARCHAR(50),
BLK INT,
DBNAME VARCHAR(50),
CMD VARCHAR(30)
)
–
INSERT INTO #TMPUSUARIOS EXEC SP_WHO
–
DECLARE X CURSOR READ_ONLY
FOR SELECT SPID, DBNAME FROM #TMPUSUARIOS
WHERE DBNAME = @DBNAME
AND SPID>50
AND SPID <> @@SPID
AND CMD = ‘AWAITING COMMAND’
–
DECLARE @SPID VARCHAR(10)
DECLARE @DBNAME2 VARCHAR(40)
OPEN X
FETCH NEXT FROM X INTO @SPID, @DBNAME2
–
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
PRINT ‘MATANDO ‘ + @SPID
SET @STRSQL = ‘KILL ‘ + @SPID
EXEC (@STRSQL)
END
FETCH NEXT FROM X INTO @SPID, @DBNAME2
END
–
CLOSE X
DEALLOCATE X