De vez en cuando tengo la necesidad de ver quien me ha bloqueado algún proceso y al ejecutar sp_who2 'Active' me da demasiada información que no necesito. Hace tiempo hice un script que me limita la información solo a lo que se refiere a los procesos bloqueados.
De algún lugar de la red cogí scripts similares y adapté a mis necesidades por lo que si a alguien le hace falta o le interesa que lo coja sin dudar.
IF NOT OBJECT_ID('tempdb.dbo.#sp_who2') IS NULL
DROP TABLE dbo.#sp_who2
CREATE TABLE #sp_who2
(SPID INT,
Status VARCHAR(1000) NULL,
Login SYSNAME NULL,
HostName SYSNAME NULL,
BlkBy SYSNAME NULL,
DBName SYSNAME NULL,
Command VARCHAR(1000) NULL,
CPUTime INT NULL,
DiskIO INT NULL,
LastBatch VARCHAR(1000) NULL,
ProgramName VARCHAR(1000) NULL,
SPID2 INT,
REQUESTID INT)
GO
-- Inserto los valores
INSERT INTO #sp_who2
EXEC sp_who2
GO
-- Seleccion de valores
SELECT blkby
into #bloqueadoresBloqueados
FROM #sp_who2
where ltrim(rtrim(replace(blkby,'.',''))) <> '' -- bloqueados
union
SELECT spid
FROM #sp_who2
where ltrim(rtrim(replace(blkby,'.',''))) <> '' -- bloqueados
select *
from #sp_who2
where SPID in (select * from #bloqueadoresBloqueados)
drop table #bloqueadoresBloqueados
GO
-- Borrado temporal (para no dejar cargada)
DROP TABLE #sp_who2
GO
El objetivo de estos post son para no olvidar donde deje los "dichosos" scripts, por lo que al final será como un cajón de sastre para mis necesidades puntuales.
De todos modos si veis algo mal, algo mejorable, etc... no dudéis en comentarlo.
No hay comentarios:
Publicar un comentario