如何查看完整的SQL作业历史记录?

时间:2011-10-13 12:49:19

标签: sql-server ssms history sql-job sql-agent

在SQL Server Management Studio中,当我为SQL作业“查看历史记录”时,我只显示了作业的最后50次执行。

如何查看SQL作业自服务器上创建以来每次执行的完整日志?

4 个答案:

答案 0 :(得分:38)

SQL Server作业系统限制每个作业和整个系统的作业历史记录条目总数。此信息存储在MSDB数据库中。

显然,您将无法返回并查看已丢弃的信息,但您可以更改 SQL Server代理属性并增加从现在开始记录的条目数上。

在SQL Server代理属性中:

  • 选择历史记录页面
  • 修改“最大作业历史记录日志大小(行)”和“每个作业的最大作业历史记录行数”以适应或更改历史作业数据的年龄删除方式。

它不会回复您的历史记录,但它将有助于您将来的查询!

答案 1 :(得分:4)

我非常确定作业历史存储在SQL Server本身的专用数据库中。如果是这种情况,您可以使用SQL Server Profiler拦截SQL Server Management Studio发送的SQL语句,并查找表的名称等。

答案 2 :(得分:3)

你的结果取决于几件事。

  1. 您设置了“限制作业日志历史记录大小”和“自动删除代理历史记录”设置[右键单击SQL Agent |属性|历史]和
  2. 您是否在维护计划中执行“历史记录清理”任务(或以此方式手动执行)。 MP任务使用“最早的日期”参数运行msdb.dbo.sp_purge_jobhistory存储过程,该参数等于您选择的时间段。

答案 3 :(得分:0)

您可以使用“临时表”更改数据保留。 Persisting job history in Azure SQL Managed Instance

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD StartTime DATETIME2 NOT NULL DEFAULT ('19000101 00:00:00.0000000')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD EndTime DATETIME2 NOT NULL DEFAULT ('99991231 23:59:59.9999999')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD CONSTRAINT PK_sysjobhistory PRIMARY KEY (instance_id, job_id, step_id)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
SET(SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[sysjobhistoryall],
    DATA_CONSISTENCY_CHECK = ON, HISTORY_RETENTION_PERIOD = 1 MONTH))

select * from msdb.dbo.sysjobhistoryall

这种方法允许将保留期定义为时间(此处为1 MONTH),而不是每个作业/最大作业历史记录日志大小(行)的最大行数。