zoukankan      html  css  js  c++  java
  • SqlServer 作业计时执行存储过程,杀超时进程

    实现目标: 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]),我没找到。

  • 相关阅读:
    [考试反思]0904NOIP模拟测试37:守望
    游戏:最短路,拆点
    [考试反思]0903NOIP模拟测试36:复始
    [考试反思]0902NOIP模拟测试35:摆动
    长寿花:dp
    [考试反思]0901NOIP模拟测试34:游离
    赤壁情:dp
    [考试反思]0829NOIP模拟测试33:仰望
    [考试反思]0828NOIP模拟测试32:沉底
    宅男计划:单峰函数三分
  • 原文地址:https://www.cnblogs.com/mapstar/p/13186990.html
Copyright © 2011-2022 走看看