Цель

Заметки ИТ которые я не хочу потерять

menu_navigation

Автоматическое удаление зависших процессов в MS SQL Server

Оригинал статьи: https://habrahabr.ru/post/314632/
Объединил две процедуры в одну и убрал проверки баз. Удаляет процессы старше 3 часов конкретной базы и конкретного пользователя.

Создаем хранимую процедуру:

USE [имя_вашей_базы]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[KillConnect]
    @databasename nvarchar(255), 
    @loginname    nvarchar(255)
AS
BEGIN
    /*
        Удаляет соединения для указанной БД и указаного логина входа
    */
    SET NOCOUNT ON;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
     begin
            declare @query nvarchar(max);
            set @query = '';

            select @query=coalesce(@query,',' )
                        +'kill '
                        +convert(varchar, spid)
                        +'; '
            from master..sysprocesses
            where dbid=db_id(@databasename)
            and spid<>@@SPID
            and loginame=@loginname
and [last_batch]<dateadd(hour,-3,getdate())
order by [last_batch]
            if len(@query) > 0
            begin
                begin try
                    exec(@query);
                end try
                begin catch
                end catch
            
        end
    end
END


Запускаем процедуру:

USE имя_вашей_базы;  
GO  
EXEC dbo.KillConnect @databasename = имя_вашей_базы, @loginname = ваш_логин;
GO

Комментариев нет:

Отправить комментарий