es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Matar Sesión en Diferente Servidor SQL

He hecho una consulta SQL para matar todas las sesiones bloqueadas.

declare @tbl table (sesid int)
insert into @tbl
select BlkBy from (SELECT spid,sp.[status],loginame [Login],hostname, blocked BlkBy,sd.name DBName,
cmd Command,cpu CPUTime,physical_io DiskIO,last_batch LastBatch,[program_name] ProgramName
FROM master.dbo.sysprocesses sp JOIN master.dbo.sysdatabases sd ON sp.dbid = sd.dbid ) as tbl
where BlkBy <> 0
DECLARE @n int, @i int= 0, @s int, @killCommand nvarchar(20)= 'kill ', @sql nvarchar (255)
SELECT @n = COUNT(*) FROM @tbl
WHILE @i < @n
BEGIN
SELECT TOP 1 @s = sesid from @tbl
SET @sql = @killCommand + cast(@s as nvarchar(10))
EXECUTE sp_executesql @sql
delete from @tbl where sesid = @s
SET @i = @i + 1
END

Ahora estoy trabajando en una aplicación web para controlar más de 1 servidor SQL que están todos vinculados a la base de datos de la aplicación de control. Necesito llamar al comando final de matar desde otro servidor SQL vinculado, ¿cómo puedo matar la sesión de un servidor a otro servidor vinculado?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para terminar una sesión en un SQL Server vinculado, puedes usar la siguiente sintaxis:

    EXEC [NombreServidorVinculado].[NombreBaseDeDatos].[dbo].[sp_who2]
    

    Esto ejecutará el procedimiento almacenado sp_who2 en el servidor vinculado, lo que te dará información sobre las sesiones en ese servidor. Luego, puedes usar la misma lógica que en tu consulta SQL anterior para encontrar las sesiones que están bloquendo y matarlas usando el spid.

    Ten en cuenta que necesitarás los permisos necesarios para ejecutar el procedimiento almacenado sp_who2 en el servidor vinculado.

Comments are closed.