29

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

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

4

4 回答 4

42

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

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

在 SQL Server 代理属性中:

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

它不会给您回馈您的历史记录,但它会帮助您处理未来的查询!

于 2011-10-13T12:53:59.230 回答
4

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

于 2011-10-13T12:52:41.213 回答
3

你的结果取决于几件事。

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

您可以使用临时表来更改数据的保留。在 Azure SQL 托管实例中保留作业历史记录

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),而不是每个作业的最大行数/最大作业历史日志大小(行)。

于 2018-09-20T18:01:49.727 回答