我正在使用 SQL 代理来安排程序的执行。
第一次执行该过程时,它运行没有问题。作业(步骤)第二次执行时,它没有完成。
以下 SQL 语句的变体告诉我正在运行的语句是create procedure xyz...
(xyz
作业应该运行的过程的名称在哪里)。
select
prc.loginame,
prc.program_name,
sql.text sql_text
from
sys.sysprocesses prc cross apply
sys.dm_exec_sql_text(prc.sql_handle) sql
我在我的程序(或其他方式)中没有执行任何 DDL,我想知道是什么导致作业尝试创建程序以及为什么作业挂起?
看到弹出的过程创建语句是这里的预期行为,它与工作代理本身无关。并且工作步骤不是重新创建过程,它只是运行它。
例子
如果我创建此过程:
然后在查询窗口中运行它:
然后运行您的查询:
创建过程也出现了。
如果您想了解有关过程调用的更多信息,可以使用类似
dbcc inputbuffer
对我来说,这会返回:
或者运行sp_whoisactive并将参数
@get_outer_command
设置为 1。示例结果:
运行 sp_whoisactive 还可以为您提供有关您的程序停留在哪一部分的更多信息。
创建过程部分已清除,作业挂起的实际问题将是猜测,没有可重现的示例或更多信息。
作业是否正在运行查询?参数嗅探在这里会成为问题吗?
运行作业时有哪些等待类型?cpu时间/读取量是多少?
当 jobstep 被卡住时,在查询下运行(你的适应)可能会提供更多信息:
我们需要更多细节才能知道实际问题是什么。