实现目标: 10秒执行一次存储过程,杀掉持续15秒的进程
第一步:写存储过程kill_lock_ps,代码如下
IF(1=0) --开启1,关闭0 BEGIN create table #tmp(id int IDENTITY (1,1) not null, spid varchar(20), tableName varchar(200), startTime datetime) insert into #tmp select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName, er.start_time startTime from sys.dm_tran_locks lk, sys.dm_exec_requests er where lk.request_session_id=er.session_id and lk.resource_type='OBJECT' Declare @str NVarchar(4000) --存查询语句 Declare @spid Varchar(500) --进程号 Declare @tableName Varchar(200) Declare @startTime datetime --开始时间 Declare @count int --总记录数 Declare @i int Set @i = 0 Select @Count = Count(1) from #tmp While @i < @Count Begin Set @str = 'select top 1 @spid = spid,@tableName=tableName,@startTime=startTime from #tmp where id not in (select top ' + Str(@i) + 'id from #tmp)' Exec Sp_ExecuteSql @str,N'@spid Varchar(20) OutPut, @tableName Varchar(200) OutPut, @startTime DateTime OutPut',@spid Output,@tableName Output,@startTime Output if ((GETDATE() - @startTime) > '1900-01-01 00:00:15.000' and @tableName is not NULL) begin declare @sql varchar(1000) set @sql='kill '+cast(@spid as varchar) exec(@sql) Select '已杀进程:',@spid,@tableName,@startTime,@i,@Count,(GETDATE() - @startTime) --一行一行显示出来 end Set @i = @i + 1 End drop table #tmp END
第二步:设置定时作业
1、打开本地数据连接,在左边资源管理器中找到Sql Server代理(在最下面)
2、【新建】一个作业
3、在【常规】中填写名称即可,说明看个人习惯
4、打开【步骤】,点击【新建】,填写【名称】,选择【数据库】,在命令空白处填写T-sql语句,然后点分析。
5、打开【计划】,点击【新建】,设置你想要的定时计划,然后保存。
6、点击【Sql Server代理】,右键启动,即定时作业启动。
7、如果想让定时作业开机自动启动,则在 服务中找到SQL Server 代理 (MSSQLSERVER),设置成【自动】模式
第三步:把定时作业生成脚本
方法1、点击【SQL Server 代理】下的作业,选中你创建的作业——右键编写作业脚本——create到,然后复制脚本语言即可
方法2、发现有博主这样写的(管理-SQL Server代理-作业(鼠标右键)-所有任务-生成SQL脚本-保存到下的某个sql文件 [Page]),我没找到。