none
Job 中的每月计划问题 RRS feed

  • 问题

  • 准备建立一个每年一次的 Job, SQL Job 中是没有按年的,我的想法是每 12 个月一次就行了,可是在建立 Job 的时候发现这个搞不定

    我试了一下,频繁中选择每月,不管我调整成每多少个月,下次的执行时间都是 12 月,这就神奇了,难道每月的的意思是只能每一个月?

    (不过用在xx每xx月的那个可以(@freq_type=32))

    2015年11月9日 2:23

全部回复

  • For monthly, job will run every month as specified.
    2015年11月9日 3:30
  • If you specify every 12 months and like to start job sometime next year, should choose proper start date time for the schedule.  
    2015年11月9日 3:36
  • 第一次执行的时间,是无论你怎么选间隔多少个月,都是12月1日啊。

    想不想时已是想,不如不想都不想。

    2015年11月9日 3:52
    版主
  • 也可调度在每月1号,代码里判断是否是需要执行的那个月



    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2015年11月10日 4:47
  • 第一次执行的时间,是无论你怎么选间隔多少个月,都是12月1日啊。

    想不想时已是想,不如不想都不想。

    我想 1/1 执行啊,而且用 @freq_type=32 的可以,通过调整 @active_start_date  可以控制下次的执行时间


    2015年11月12日 8:04
  • If you specify every 12 months and like to start job sometime next year, should choose proper start date time for the schedule.  

    @freq_type=32 的时候是可行的,16的时候不行,我说的就是 16 的时候
    2015年11月12日 8:06
  • 我试过没问题啊。每12个月运行一次,如果active_start_date是现在,当然是12月1日运行。把active_start_date设置为12月1日之后,就是每年的1月1日运行了。

    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'NewYear',
      @enabled=1,
      @freq_type=16,
      @freq_interval=1,
      @freq_subday_type=1,
      @freq_subday_interval=0,
      @freq_relative_interval=0,
      @freq_recurrence_factor=12,
      @active_start_date=20151206,
      @active_end_date=99991231,
      @active_start_time=0,
      @active_end_time=235959


    想不想时已是想,不如不想都不想。

    2015年11月13日 3:09
    版主
  • USE [msdb]
    GO
    DECLARE @jobId uniqueidentifier, @name sysname;
    SET @name = '_16';
    EXEC sp_add_job @job_name = @name, @job_id = @jobId OUTPUT;
    EXEC sp_add_jobschedule
    	@job_id = @jobId, @name = @name, @freq_interval=1,
    	@freq_type=16, @freq_recurrence_factor=12, @active_start_date=20140501
    EXEC sp_add_jobserver @job_id = @jobId, @server_name = N'(local)';
    GO
    DECLARE @jobId uniqueidentifier, @name sysname;
    SET @name = '_32';
    EXEC sp_add_job @job_name = @name, @job_id = @jobId OUTPUT;
    EXEC sp_add_jobschedule
    	@job_id = @jobId, @name = @name, @freq_interval=8, @freq_relative_interval = 1,
    	@freq_type=32, @freq_recurrence_factor=12, @active_start_date=20140501
    EXEC sp_add_jobserver @job_id = @jobId, @server_name = N'(local)';
    GO
    /*-- dele
    EXEC sp_delete_job @job_name = N'_16'
    EXEC sp_delete_job @job_name = N'_32'
    --*/
    执行这两个脚本创建两个 job, 看 next run 值,解释一下为什么两个的日期是这样的呢? 从计划的解释来说,都是每 12 个月的 1 号,开始日期相同,next run 应该相同吧
    2015年11月13日 7:59
  • 我认为吧,16那个是正常的,文档里面说过,

    For weekly or monthly schedules, the Agent ignores if active_start_date is in the past, and instead uses the current date.

    但是文档没有提到monthly relative的start date是过去的时候怎么处理,不过没有说要处理,应当是按照原来的start date处理,所以这两个情况不一样。


    想不想时已是想,不如不想都不想。

    2015年11月13日 15:47
    版主