sp_purge_jobhistory (Transact-SQL)

删除作业的历史记录。

主题链接图标Transact-SQL 语法约定

语法

sp_purge_jobhistory 
   {   [ @job_name = ] 'job_name' | 
     | [ @job_id = ] job_id }
   [ , [ @oldest_date = ] oldest_date ]

参数

  • [ @job_name= ] 'job_name'
    要删除其历史记录的作业的名称。job_name 的数据类型为 sysname,默认值为 NULL。必须指定 job_id 或 job_name,但不能两个都指定。

    注意注意

    sysadmin 固定服务器角色的成员或 SQLAgentOperatorRole 固定数据库角色的成员可以不指定 job_name 或 job_id,而直接执行 sp_purge_jobhistory。如果 sysadmin 用户未指定这些参数,则所有本地作业和多服务器作业的历史记录都会在 oldest_date 指定的时间内删除。如果 SQLAgentOperatorRole 用户未指定这些参数,则所有本地作业的历史记录都会在 oldest_date 指定的时间内删除。

  • [ @job_id= ] job_id
    要删除其记录的作业的标识号。job_id 的数据类型为 uniqueidentifier,默认值为 NULL。必须指定 job_id 或 job_name,但不能两个都指定。请参阅 @job_name 说明中的注释,以获取有关 sysadminSQLAgentOperatorRole 用户如何使用此参数的信息。

  • [ @oldest_date = ] oldest_date
    历史记录中保留的最早记录。oldest_date 的数据类型为 datetime,默认值为 NULL。如果指定了 oldest_date,则 sp_purge_jobhistory 只删除比指定值早的记录。

返回代码值

0(成功)或 1(失败)

结果集

注释

sp_purge_jobhistory 成功完成时,将返回一条消息。

权限

默认情况下,只有 sysadmin 固定服务器角色的成员或 SQLAgentOperatorRole 固定数据库角色的成员才可以执行此存储过程。sysadmin 的成员可以清除所有本地和多服务器作业的历史记录。SQLAgentOperatorRole 的成员只可以清除所有本地作业的历史记录。

其他用户(包括 SQLAgentUserRole 的成员和 SQLAgentReaderRole 的成员)必须被显式授予对 sp_purge_jobhistory 的 EXECUTE 权限。当被授予对此存储过程的 EXECUTE 权限之后,这些成员只可以清除其所拥有作业的历史记录。

SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 固定数据库角色位于 msdb 数据库中。有关这些成员的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

示例

A. 删除特定作业的历史记录

以下示例将删除名为 NightlyBackups 的作业的历史记录。

USE msdb ;
GO

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

B. 删除所有作业的历史记录

注意注意

只有 sysadmin 固定服务器角色的成员和 SQLAgentOperatorRole 的成员才可以删除所有作业的历史记录。当 sysadmin 用户不使用参数而直接执行此存储过程时,将会清除所有本地和多服务器作业的历史记录。当 SQLAgentOperatorRole 用户不使用参数而直接执行此存储过程时,仅会清除所有本地作业的历史记录。

以下示例将不带参数执行此过程以删除所有的历史记录。

USE msdb ;
GO

EXEC dbo.sp_purge_jobhistory ;
GO