SQL Server 2014代理作业执行日志显示未来时间问题求助
排查SQL Server 2014代理作业执行时间异常的思路
我之前帮几个同行排查过类似的SQL Server代理作业时间异常问题,给你梳理几个大概率的原因和对应的排查步骤:
检查作业计划的时区设置:SQL Server代理的作业计划默认可能采用UTC时间存储,如果你在设置计划时不小心选错了时区,就会导致执行时间和预期不符。比如服务器是东八区(UTC+8),若计划设为UTC时区的11点,实际本地时间就是19点(下午7点),和你遇到的下午6:12接近。操作步骤:打开目标作业的计划属性,查看「时区」选项是否和服务器本地时区一致。
验证作业历史记录的真实时间:有时候日志显示的时间可能因为UI转换问题出现偏差,建议直接查询
msdb系统数据库的作业历史表,确认实际存储的执行时间。执行以下SQL语句(替换成你的作业名称):
SELECT j.name AS 作业名称, h.run_date, h.run_time, -- 把run_date和run_time转换成可读的本地时间 CONVERT(DATETIME, RTRIM(h.run_date) + ' ' + STUFF(STUFF(RIGHT('000000' + RTRIM(h.run_time), 6), 3, 0, ':'), 6, 0, ':')) AS 实际执行时间, h.message AS 执行备注 FROM msdb.dbo.sysjobs j JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id WHERE j.name = '你的目标作业名称' ORDER BY h.run_date DESC, h.run_time DESC;
查看「执行备注」里是否标注了「手动执行」,如果有的话,说明当天下午6:12是有人手动触发了作业。
检查作业计划的重复执行规则:有可能作业计划被误修改,比如原本设置的「每日11点执行一次」,被改成了「每N小时执行一次」且起始时间设为下午6点,或者计划的生效日期被调整过。重新打开作业计划的属性,确认「频率」设置为「每天」,「每天执行一次」,执行时间为11:00:00,同时检查计划的起始日期是否正确。
排查SQL Server代理服务的时区上下文:虽然服务器时钟正常,但SQL Server代理服务的运行账户可能设置了不同的时区。打开任务管理器,找到「SQLSERVERAGENT」服务,查看其启动账户,然后检查该账户的时区设置是否和服务器系统时区一致(可以通过控制面板的「日期和时间」-「更改时区」查看)。
内容的提问来源于stack exchange,提问作者Mortiz.H




