lunes, 15 de febrero de 2016

Bloqueos SQLServer ¿quien me bloquea? sp_who2


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