gpt4 book ai didi

sql-server - 检索 SQL 代理作业的特定错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:13:22 26 4
gpt4 key购买 nike

我正在使用 msdb..sp_help_job 来访问作业是成功还是失败,并且可以检索一般错误。

但是,我想访问失败步骤的特定错误。我似乎找不到它。它不在 MS 提供的有用存储过程列表中 http://msdn.microsoft.com/en-us/library/ms187763%28v=SQL.100%29.aspx

运行查询的帐户是有限的,但确实具有 SQLUserAgent 角色并拥有它正在访问的作业。

最佳答案

尝试使用 sp_help_jobhistory (Transact-SQL)

EXECUTE MSDB.DBO.SP_HELP_JOBHISTORY NULL,'your_job_name_here', @MODE = N'FULL'

你要的信息在sysjobhistory (Transact-SQL) .如果查看 SP_HELP_JOBHISTORY 的源代码,您会发现它调用 sp_help_jobhistory_full,然后使用 sysjobhistory:

USE [msdb]
GO
/****** Object: StoredProcedure [dbo].[sp_help_jobhistory_full] Script Date: 03/29/2010 07:58:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[sp_help_jobhistory_full]
@job_id UNIQUEIDENTIFIER,
@job_name sysname,
@step_id INT,
@sql_message_id INT,
@sql_severity INT,
@start_run_date INT,
@end_run_date INT,
@start_run_time INT,
@end_run_time INT,
@minimum_run_duration INT,
@run_status INT,
@minimum_retries INT,
@oldest_first INT,
@server sysname,
@mode VARCHAR(7),
@order_by INT,
@distributed_job_history BIT
AS
IF(@distributed_job_history = 1)
SELECT null as instance_id,
sj.job_id,
job_name = sj.name,
null as step_id,
null as step_name,
null as sql_message_id,
null as sql_severity,
sjh.last_outcome_message as message,
sjh.last_run_outcome as run_status,
sjh.last_run_date as run_date,
sjh.last_run_time as run_time,
sjh.last_run_duration as run_duration,
null as operator_emailed,
null as operator_netsentname,
null as operator_paged,
null as retries_attempted,
sts.server_name as server
FROM msdb.dbo.sysjobservers sjh
JOIN msdb.dbo.systargetservers sts ON (sts.server_id = sjh.server_id)
JOIN msdb.dbo.sysjobs_view sj ON(sj.job_id = sjh.job_id)
WHERE
(@job_id = sjh.job_id)
AND ((@start_run_date IS NULL) OR (sjh.last_run_date >= @start_run_date))
AND ((@end_run_date IS NULL) OR (sjh.last_run_date <= @end_run_date))
AND ((@start_run_time IS NULL) OR (sjh.last_run_time >= @start_run_time))
AND ((@minimum_run_duration IS NULL) OR (sjh.last_run_duration >= @minimum_run_duration))
AND ((@run_status IS NULL) OR (@run_status = sjh.last_run_outcome))
AND ((@server IS NULL) OR (sts.server_name = @server))
ELSE
SELECT sjh.instance_id, -- This is included just for ordering purposes
sj.job_id,
job_name = sj.name,
sjh.step_id,
sjh.step_name,
sjh.sql_message_id,
sjh.sql_severity,
sjh.message,
sjh.run_status,
sjh.run_date,
sjh.run_time,
sjh.run_duration,
operator_emailed = so1.name,
operator_netsent = so2.name,
operator_paged = so3.name,
sjh.retries_attempted,
sjh.server
FROM msdb.dbo.sysjobhistory sjh
LEFT OUTER JOIN msdb.dbo.sysoperators so1 ON (sjh.operator_id_emailed = so1.id)
LEFT OUTER JOIN msdb.dbo.sysoperators so2 ON (sjh.operator_id_netsent = so2.id)
LEFT OUTER JOIN msdb.dbo.sysoperators so3 ON (sjh.operator_id_paged = so3.id),
msdb.dbo.sysjobs_view sj
WHERE (sj.job_id = sjh.job_id)
AND ((@job_id IS NULL) OR (@job_id = sjh.job_id))
AND ((@step_id IS NULL) OR (@step_id = sjh.step_id))
AND ((@sql_message_id IS NULL) OR (@sql_message_id = sjh.sql_message_id))
AND ((@sql_severity IS NULL) OR (@sql_severity = sjh.sql_severity))
AND ((@start_run_date IS NULL) OR (sjh.run_date >= @start_run_date))
AND ((@end_run_date IS NULL) OR (sjh.run_date <= @end_run_date))
AND ((@start_run_time IS NULL) OR (sjh.run_time >= @start_run_time))
AND ((@end_run_time IS NULL) OR (sjh.run_time <= @end_run_time))
AND ((@minimum_run_duration IS NULL) OR (sjh.run_duration >= @minimum_run_duration))
AND ((@run_status IS NULL) OR (@run_status = sjh.run_status))
AND ((@minimum_retries IS NULL) OR (sjh.retries_attempted >= @minimum_retries))
AND ((@server IS NULL) OR (sjh.server = @server))
ORDER BY (sjh.instance_id * @order_by)

关于sql-server - 检索 SQL 代理作业的特定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com