关于网友提出的“ 执行特定作业,如何自动kill堵塞的语句”问题疑问,本网通过在网上对“ 执行特定作业,如何自动kill堵塞的语句”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 执行特定作业,如何自动kill堵塞的语句
描述: 场景:运行一个重要的JOB(test),有可能被其他进程A,B.C...堵塞,但是需要确保其运行成功,需要强制KILL堵塞的脚本,请详细给出实现语句;
IF EXISTS(查询job(TEST)被A,B,C...堵塞)
begin
kill A,B,C...
end
解决方案1:本帖最后由 roy_88 于 2017-06-14 16:51:05 编辑
把放在JOB里的T-SQL用到表,在动态视图里查找,条件加上锁类型,满足条件直接KILL掉,再执行的JOB命令
方法可放在一起,也可在JOB里分步执行
满足条件比如架构锁:request_mode=‘Sch-S’ 这样加
解决方案2: 上面方法为有正在运行的JOB影响现有JOB时,可这样用
如果是你现有JOB运行,被其它进程非JOB时用
--用以下方法分析进程,有没有JOB用到的表,有就KILL掉进程
e.g.
USE master
go
select
request_session_id as spid,
resource_type,
db_name(resource_database_id) as dbName,
resource_description,
resource_associated_entity_id,
OBJECT_NAME(resource_associated_entity_id,DB_ID('PayCenter')) AS TabName,
request_mode as mode,
request_status as Status
from
sys.dm_tran_locks