Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server代理中重试尝试启动之前发送作业步骤的错误报告_Sql Server_Sql Server 2016_Sql Server Agent - Fatal编程技术网

Sql server 在SQL Server代理中重试尝试启动之前发送作业步骤的错误报告

Sql server 在SQL Server代理中重试尝试启动之前发送作业步骤的错误报告,sql-server,sql-server-2016,sql-server-agent,Sql Server,Sql Server 2016,Sql Server Agent,在作业步骤尝试重试之前,是否可以捕获作业步骤的错误详细信息 我创建了一个jobMain\u workload,它有大约40个步骤。每个步骤配置为3次重试尝试,多数步骤的重试间隔设置为30分钟,少数作业步骤的重试间隔设置为60分钟 每当作业步骤失败时,它将在3次重试尝试后发送一封电子邮件,这意味着它将浪费大约1.5/3小时,具体取决于重试间隔 我需要的是,一旦作业步骤在尝试重试之前失败,它应该通过邮件发送错误详细信息,以便用户可以检查是环境问题(tempdb、diskspace等)还是需要立即修复

在作业步骤尝试重试之前,是否可以捕获作业步骤的错误详细信息

我创建了一个job
Main\u workload
,它有大约40个步骤。每个步骤配置为3次重试尝试,多数步骤的重试间隔设置为30分钟,少数作业步骤的重试间隔设置为60分钟

每当作业步骤失败时,它将在3次重试尝试后发送一封电子邮件,这意味着它将浪费大约1.5/3小时,具体取决于重试间隔

我需要的是,一旦作业步骤在尝试重试之前失败,它应该通过邮件发送错误详细信息,以便用户可以检查是环境问题(tempdb、diskspace等)还是需要立即修复的代码相关问题

为此,我创建了一个新的作业SCAN_作业,该作业将每10分钟运行一次,并扫描作业历史记录表,检查尝试的重试次数是否大于0,以确定运行日期时间是否大于SCAN_作业的上次执行时间。但这段代码的问题是,一旦第一次尝试登录到作业历史记录表中,我会在30分钟或1小时后发送邮件

请参见此屏幕截图:

该步骤在17:18:44失败,但一旦记录了重试尝试,将在18:20发送错误报告邮件

是否有办法在17:18发送邮件,而不是等待重试

消息列还将包含重试次数为0的行的错误详细信息。对于行的其余部分,它只是显示执行步骤的用户。我在下面的查询中没有得到正确的答案

我尝试执行的代码如下:

-- Get the job ID for the job this is running in.
DECLARE @JobID UNIQUEIDENTIFIER;
SET @JobID = (SELECT CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))));

-- Get the last time this job ran
DECLARE @LastRunTime DATETIME;

SET @LastRunTime = (SELECT MAX([msdb].[dbo].agent_datetime(jh.[run_date], jh.[run_time]))
                    FROM [msdb].[dbo].[sysjobhistory] jh
                    WHERE jh.[job_id] = @JobID);

SELECT 
    j.[name] AS JobName,
    jh.[step_name] AS StepName,
    [msdb].[dbo].agent_datetime(jh.[run_date], jh.[run_time]) AS RunDateTime,
    jh.[message] as ErrorMessage       
FROM 
    [msdb].[dbo].[sysjobs] j
INNER JOIN 
    [msdb].[dbo].[sysjobhistory] jh ON jh.[job_id] = j.[job_id]
INNER JOIN 
    [msdb].[dbo].[sysjobsteps] js ON js.[job_id] = j.[job_id] 
                                  AND js.[step_id] = jh.[step_id]
WHERE 
    jh.[retries_attempted] > 0
    AND [msdb].[dbo].agent_datetime(jh.[run_date], jh.[run_time]) > DATEADD(SECOND, -1, @LastRunTime)
如果有更好的逻辑,请告诉我


谢谢

我正在考虑删除jh。[重试次数]>0并将此条件放入jh。类似“%Error:%”和jh.run\u status=4的消息