sp_help_jobhistory (Transact-SQL)

适用范围:SQL Server

为多服务器管理域中的服务器提供有关作业的信息。

Transact-SQL 语法约定

语法

sp_help_jobhistory
    [ [ @job_id = ] 'job_id' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @step_id = ] step_id ]
    [ , [ @sql_message_id = ] sql_message_id ]
    [ , [ @sql_severity = ] sql_severity ]
    [ , [ @start_run_date = ] start_run_date ]
    [ , [ @end_run_date = ] end_run_date ]
    [ , [ @start_run_time = ] start_run_time ]
    [ , [ @end_run_time = ] end_run_time ]
    [ , [ @minimum_run_duration = ] minimum_run_duration ]
    [ , [ @run_status = ] run_status ]
    [ , [ @minimum_retries = ] minimum_retries ]
    [ , [ @oldest_first = ] oldest_first ]
    [ , [ @server = ] N'server' ]
    [ , [ @mode = ] 'mode' ]
[ ; ]

参数

[ @job_id = ] 'job_id'

作业标识号。 @job_id是 uniqueidentifier,默认值为 NULL.

[ @job_name = ] N'job_name'

作业的名称。 @job_name为 sysname,默认值为 NULL.

[ @step_id = ] step_id

步骤标识号。 @step_id为 int,默认值为 NULL.

[ @sql_message_id = ] sql_message_id

执行作业时 SQL Server 返回的错误消息的标识号。 @sql_message_id为 int,默认值为 NULL.

[ @sql_severity = ] sql_severity

执行作业时由 SQL Server 返回的错误消息的严重级别。 @sql_severity为 int,默认值为 NULL.

[ @start_run_date = ] start_run_date

开始作业的日期。 @start_run_date为 int,默认值为 NULL. @start_run_date 必须以格式 yyyyMMdd输入,其中四 yyyy 个字符的年份, MM 是一个两个字符的月份名称,并且 dd 是一个两个字符的日期名称。

[ @end_run_date = ] end_run_date

完成作业的日期。 @end_run_date为 int,默认值为 NULL. @end_run_date必须以格式yyyyMMdd输入,其中为yyyy四个字符的年份,MM是一个两个字符的月份名称,并且dd是一个两个字符的日期名称。

[ @start_run_time = ] start_run_time

开始作业的时间。 @start_run_time为 int,默认值为 NULL. @start_run_time 必须以格式 HHmmss输入,其中 HH 一天中的两个字符小时, mm 是当天的两个字符分钟,并且 ss 是当天的两个字符秒。

[ @end_run_time = ] end_run_time

作业完成执行的时间。 @end_run_time为 int,默认值为 NULL. @end_run_time必须以格式HHmmss输入,其中HH一天中的两个字符小时,mm是一天的两个字符分钟,并且ss是当天的两个字符秒。

[ @minimum_run_duration = ] minimum_run_duration

完成作业所用的最短时间。 @minimum_run_duration为 int,默认值为 NULL. @minimum_run_duration必须以格式HHmmss输入,其中HH一天中的两个字符小时,mm是当天的两个字符分钟,并且ss是当天的两个字符秒。

[ @run_status = ] run_status

作业的执行状态。@run_status为 int,可以是这些值之一。

说明
0 已失败
1 成功
2 重试(只针对步骤)
3 已取消
4 进行中的消息
5 未知

[ @minimum_retries = ] minimum_retries

作业应该重试运行的最少次数。 @minimum_retries为 int,默认值为 NULL.

[ @oldest_first = ] oldest_first

是否首先将输出呈现为最早的作业。 @oldest_first为 int,默认值为 0.

  • 0 首先提供最新的作业。
  • 1 首先提供最早的工作。

[ @server = ] N'server'

执行作业的服务器名称。 @server为 sysname,默认值为 NULL.

[ @mode = ] 'mode'

指定 SQL Server 是打印结果集中的所有列(FULL)还是列的摘要(SUMMARY)。 @mode为 varchar(7),默认值为 SUMMARY.

返回代码值

0(成功)或 1(失败)。

结果集

实际列列表取决于@mode的值。 下表显示了最全面的列集,当@modeFULL返回。

列名称 数据类型 描述
instance_id int 历史记录条目标识号。
job_id uniqueidentifier 作业标识号。
job_name sysname 作业名称。
step_id int 步骤标识号(0 作业历史记录)。
step_name sysname 步骤名称(NULL 作业历史记录)。
sql_message_id int 对于 Transact-SQL 步骤,运行命令时遇到的最新 Transact-SQL 错误号。
sql_severity int 对于 Transact-SQL 步骤,运行命令时遇到的最高 Transact-SQL 错误严重性。
message nvarchar(1024) 作业或步骤历史记录消息。
run_status int 作业或步骤的结果。
run_date int 作业或步骤开始执行的日期。
run_time int 作业或步骤开始执行的时间。
run_duration int 按格式执行作业或步骤 HHmmss 的已用时间。
operator_emailed nvarchar(20) 有关此作业的电子邮件(是 NULL 步骤历史记录)的操作员。
operator_netsent nvarchar(20) 发送了有关此作业的网络消息的操作员(用于 NULL 步骤历史记录)。
operator_paged nvarchar(20) 针对此作业进行分页的操作员(用于 NULL 步骤历史记录)。
retries_attempted int 步骤的重试次数(对于作业历史记录始终为 0)。
server nvarchar(30) 执行步骤或作业的服务器。 始终为 (local)。

注解

sp_help_jobhistory 返回具有指定计划作业历史记录的报告。 如果没有指定参数,则该报表包含所有预定作业的历史记录。

权限

可以授予 EXECUTE 此过程的权限,但在 SQL Server 升级期间可能会重写这些权限。

其他用户必须被授予数据库中以下SQL Server 代理固定数据库角色msdb之一:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

SQLAgentUserRole 数据库角色的成员只能查看其拥有的作业的历史记录。

示例

A. 列出作业的所有作业信息

以下示例列出了 NightlyBackups 作业的所有作业信息。

USE msdb;
GO

EXEC dbo.sp_help_jobhistory
    @job_name = N'NightlyBackups';
GO

B. 列出与特定条件匹配的作业的信息

以下示例针对遇到错误号为 50100(用户定义错误消息)、严重级别为 20 的错误的任何失败作业和失败作业步骤,打印所有列和所有作业的信息。

USE msdb;
GO

EXEC dbo.sp_help_jobhistory
    @sql_message_id = 50100,
    @sql_severity = 20,
    @run_status = 0,
    @mode = N'FULL';
GO