04 06 2007

Como matar processos inativos no SQL Server

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

Comente