- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用这样的代码来检测 SQL Server 作业是否正在运行。 (这是 SQL Server 2005,所有 SP)
return (select isnull(
(select top 1 CASE
WHEN current_execution_status = 4 THEN 0
ELSE 1
END
from openquery(devtestvm, 'EXEC msdb.dbo.sp_help_job')
where current_execution_status = 4 and
name = 'WQCheckQueueJob' + cast(@Index as varchar(10))
), 1)
)
没有问题,一般来说,它工作得很好。
但是......(总是一个但是)
有时,我会调用它,返回“作业未运行”结果,此时我将尝试通过
启 Action 业exec msdb.dbo.sp_start_job @JobName
SQL 将返回“SQLAgent 已拒绝启 Action 业,因为它已有待处理的请求”。
好的。也不是问题。可以想象,在该代码启动目标作业之前,但在检查它是否已启动之后,有一个轻微的窗口可以启动目标作业。但是,我可以将其包装在 try catch 中并忽略该错误,对吗?
begin try
if dbo.WQIsQueueJobActive(@index) = 0 begin
exec msdb.dbo.sp_start_job @JobName
break
end
end try begin catch
-- nothing here
end catch
问题就在这里。
十有八九,这个效果很好。 SQL 代理将引发错误,它被捕获,并且处理将继续,因为作业已经在运行,没有坏处,也没有犯规。
但有时,我会在“作业历史记录” View 中收到一条消息(请记住上面的代码,以检测特定作业是否正在运行,如果没有从另一个作业实际运行,则启动它),说明该作业失败,因为“SQLAgent 拒绝启 Action 业,因为它已有待处理的请求”。
当然,这正是 TRY CATCH 应该处理的错误!
当这种情况发生时,正在执行的作业就会终止,但据我所知,并没有立即终止,只是非常接近。我把日志记录到处都是,但没有一致性。一次失败,它会在位置 a,下一次会在位置 b。在某些情况下,A 地和 B 地除了一个
select @var = 'message'
在他们之间。很奇怪。基本上,该作业似乎被毫不客气地转储,并且作业中剩下的任何要执行的内容都根本不被执行。
但是,如果我删除“exec StartJob”(或者当我知道目标作业尚未运行时仅调用一次),则一切都会正常运行,并且作业中的所有处理都会运行。
这一切背后的目的是通过触发器(除其他外)启动一项作业,并且,如果该作业已经启动,则确实不需要“再次启动它”。
有人在 SQL 代理的作业处理中遇到过这样的行为吗?
编辑:当前的控制流程如下:
最佳答案
首先,您有机会了解服务代理吗?从你的描述来看,这似乎就是你真正想要的。
区别在于,您不是启 Action 业,而是将数据放入 SB 队列,SB 会异步调用您的处理过程,并完全回避已经运行的作业等问题。它将自动生成/终止其他线程需求决定,它负责订单等。
这是一个很好的(并且模糊相关的)教程。 http://www.sqlteam.com/article/centralized-asynchronous-auditing-with-service-broker
让我们假设您出于任何原因都不能使用 SB(但说真的,可以!)。
使用作业 spid 的 context_info 怎么样?
包装过程中的第一个语句是
DECLARE @context_info VARBINARY(30)
SET @context_info = CAST('MyJob1' AS VARBINARY)
SET CONTEXT_INFO @context_info
当你的过程完成时(或在你的 catch block 中)
SET CONTEXT_INFO 0x0
当您考虑给您的工作打电话时,请执行以下操作:
IF NOT EXISTS (SELECT * FROM master..sysprocesses WITH (NOLOCK) WHERE context_info=CAST('MyJob1' AS VARBINARY))
EXEC StartJob
当你的包装程序终止或连接关闭时,你的 context_info 就会消失。
您还可以使用全局临时表(即 ##JobStatus),当引用它的所有 spid 断开连接或显式删除它时,它们将消失。
一些想法。
关于sql-server - 如何准确检测SQL Server作业是否正在运行并处理已经运行的作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861255/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!