如何修改 SQL Server 代理主作业 (Transact-SQL)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改 SQL Server 代理主作业 (Transact-SQL)相关的知识,希望对你有一定的参考价值。

本主题介绍了如何使用存储过程修改 Microsoft SQL Server 代理主作业。

 更改作业定义计划的详细信息

1.       执行 sp_update_schedule

 在作业中添加、更改或删除步骤

1.       执行 sp_add_jobstep 来添加新的作业步骤。

2.       执行 sp_update_jobstep 来更改原先存在的作业步骤。

3.       执行 sp_delete_jobstep 来删除原先存在的作业。

 修改与作业相关联的目标服务器

1.       执行 sp_delete_jobserver 来删除当前与作业相关联的服务器。

2.       执行 sp_add_jobserver 将某个服务器与当前作业相关联。

sp_add_schedule (Transact-SQL)

更新日期: 2007   

创建一个可由任意数量的作业使用的计划。

 语法

 

sp_add_schedule [ @schedule_name = ] ‘schedule_name‘

    [ , [ @enabled = ] enabled ]

    [ , [ @freq_type = ] freq_type ]

    [ , [ @freq_interval = ] freq_interval ]

    [ , [ @freq_subday_type = ] freq_subday_type ]

    [ , [ @freq_subday_interval = ] freq_subday_interval ]

    [ , [ @freq_relative_interval = ] freq_relative_interval ]

    [ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]

    [ , [ @active_start_date = ] active_start_date ]

    [ , [ @active_end_date = ] active_end_date ]

    [ , [ @active_start_time = ] active_start_time ]

    [ , [ @active_end_time = ] active_end_time ]

    [ , [ @owner_login_name = ] ‘owner_login_name‘ ]

    [ , [ @schedule_uid = ] schedule_uid OUTPUT ]

    [ , [ @schedule_id = ] schedule_id OUTPUT ]

    [ , [ @originating_server = ] server_name ] /* internal */

 参数

@schedule_name = schedule_name

计划的名称。schedule_name 的数据类型为 sysname,无默认值。

@enabled = enabled

指示计划的当前状态。enabled 的数据类型为 tinyint,默认值为 1(启用)。如果为 0,则不启用该计划。如果不启用计划,则作业不会按此计划运行。

@freq_type = freq_type

指示作业执行时间的值。freq_type 的数据类型为 int,默认值为 0,可以是下列值之一:

说明

1

一次

4

每天

8

每周

16

每月

32

每月,相对于 freq_interval

64

SQLServerAgent 服务启动时运行

128

计算机空闲时运行

@freq_interval = freq_interval

作业执行的天数。freq_interval 的数据类型为 int,默认值为 1,该值依赖于 freq_type 的值。

freq_type 的值

 freq_interval 的影响

1(一次)

不使用 freq_interval

4(每天)

每 freq_interval 天。

8(每周)

freq_interval 是下面的一个或多个值(用逻辑运算符 OR 组合):

1 = 星期日

2 = 星期一

4 = 星期二

8 = 星期三

16 = 星期四

32 = 星期五

64 = 星期六

16(每月)

每月的 freq_interval 天。

32(与“每月”选项相关)

freq_interval 是下列值之一:

1 = 星期日

2 = 星期一

3 = 星期二

4 = 星期三

5 = 星期四

6 = 星期五

7 = 星期六

8 = 天

9 = 工作日

10 = 休息日

64(SQLServerAgent 服务启动时)

不使用 freq_interval

128

不使用 freq_interval

@freq_subday_type = freq_subday_type

指定 freq_subday_interval 的单位。freq_subday_type 的数据类型为 int,默认值为 0,可以是下列值之一:

说明(单位)

0x1

在指定的时间

0x4

分钟

0x8

小时

@freq_subday_interval = freq_subday_interval

每次执行作业之间出现的 freq_subday_type 期间数。freq_subday_interval 为 int,默认值为 0。在 freq_subday_type 等于 1 的情况下将忽略 freq_subday_interval

@freq_relative_interval = freq_relative_interval

如果 freq_type 为 32(与“每月”选项相关),则为每个月中作业的 freq_interval 的执行频率。freq_relative_interval 为 int,默认值为 0,并可以成为这些值中的一个。在freq_type 不等于 32 的情况下将忽略 freq_relative_interval

说明(单位)

1

第一个

2

第二个

4

第三个

8

第四个

16

最后一个

@freq_recurrence_factor = freq_recurrence_factor

作业的两次计划执行之间的间隔周数或月数。只有 freq_type 为 816 或 32 时,才会使用 freq_recurrence_factorfreq_recurrence_factor 的数据类型为 int,默认值为0

@active_start_date = active_start_date

开始执行作业的日期。active_start_date 的数据类型为 int,默认值为 NULL,指示当天的日期。日期的格式为 YYYYMMDD。如果 active_start_date 不为 NULL,则日期必须大于或等于 19900101。

@active_end_date = active_end_date

停止执行作业的日期。active_end_date 的数据类型为 int,默认值为 99991231,指示 9999 年 12 月 31 日。格式为 YYYYMMDD。

@active_start_time = active_start_time

在 active_start_date 和 active_end_date 之间的任何一天开始执行作业的时间。active_start_time 的数据类型为 int,默认值为 000000,指示 24 小时制的上午12:00:00,并且必须使用 HHMMSS 的格式输入。

@active_end_time = active_end_time

在 active_start_date 和 active_end_date 之间任何一天停止执行作业的时间。active_end_time 的数据类型为 int,默认值为 235959,指示 24 小时制的晚上 11:59:59,必须使用 HHMMSS 的格式输入。

@owner_login_name= ] owner_login_name

拥有该计划的服务器主体的名称。owner_login_name 的数据类型为 sysname,默认值为 NULL,指示计划由创建者拥有。

@schedule_uid= ] schedule_uid OUTPUT

计划的唯一标识符。schedule_uid 是数据类型为 uniqueidentifier 的变量。

@schedule_id= ] schedule_id OUTPUT

计划的标识符。schedule_id 是数据类型为 int 的变量。

@originating_server= ] server_name

保留为仅供 SQL Server 内部使用。不保证以后的兼容性。

 返回代码值

0(成功)或 1(失败)

 结果集

 备注

SQL Server Management Studio 为管理作业提供了一种图形化的简便方法,建议使用此方法来创建和管理作业基础结构。

 权限

默认情况下,只有 sysadmin 固定服务器角色的成员才可以执行此存储过程。其它用户必须被授予 msdb 数据库中下列 SQL Server 代理固定数据库角色的权限之一:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

 示例

A. 创建计划

以下示例将创建一个名为 RunOnce 的计划:此计划在创建当天的 23:30 运行一次。

复制代码

USE msdb ;

GO

 

EXEC dbo.sp_add_schedule

    @schedule_name = N‘RunOnce‘,

    @freq_type = 1,

    @active_start_time = 233000 ;

 

GO

B. 创建计划,将计划附加到多个作业

以下示例将创建一个名为 NightlyJobs 的计划:使用此计划的作业每天在服务器时间为 01:00 时执行。该示例此计划附加到作业 BackupDatabase 和作业 RunReports。

注意:

此示例假定作业 BackupDatabase 和作业 RunReports 已存在。

复制代码

USE msdb ;

GO

 

EXEC sp_add_schedule

    @schedule_name = N‘NightlyJobs‘ ,

    @freq_type = 4,

    @freq_interval = 1,

    @active_start_time = 010000 ;

GO                                                                                                      

 

 

EXEC sp_attach_schedule

   @job_name = N‘BackupDatabase‘,

   @schedule_name = N‘NightlyJobs‘ ;

GO

 

EXEC sp_attach_schedule

   @job_name = N‘RunReports‘,

   @schedule_name = N‘NightlyJobs‘ ;

GO

     

SQL Server 2005 联机丛书(2007 年 9 月)

sp_update_schedule (Transact-SQL)

更改 SQL Server 代理计划的设置。

 语法

 

sp_update_schedule     {   [ @schedule_id = ] schedule_id

      | [ @name = ] ‘schedule_name‘ }

    [ , [ @new_name = ] new_name ]

    [ , [ @enabled = ] enabled ]

    [ , [ @freq_type = ] freq_type ]

    [ , [ @freq_interval = ] freq_interval ]

    [ , [ @freq_subday_type = ] freq_subday_type ]

    [ , [ @freq_subday_interval = ] freq_subday_interval ]

    [ , [ @freq_relative_interval = ] freq_relative_interval ]

    [ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]

    [ , [ @active_start_date = ] active_start_date ]

    [ , [ @active_end_date = ] active_end_date ]

    [ , [ @active_start_time = ] active_start_time ]

    [ , [ @active_end_time = ] active_end_time ]

    [ , [ @owner_login_name = ] ‘owner_login_name‘ ]

    [ , [ @automatic_post =] automatic_post ]

 参数

@schedule_id = schedule_id

要修改的计划的标识符。schedule_id 的数据类型为 int,无默认值。必须指定 schedule_id 或 schedule_name

@name = schedule_name

要修改的计划的名称。schedule_name 的数据类型为 sysname,无默认值。必须指定 schedule_id 或 schedule_name

@new_name= ] new_name

计划的新名称。new_name 的数据类型为 sysname,默认值为 NULL。如果 new_name 为 NULL,则不更改计划名称。

@enabled = enabled

指示计划的当前状态。enabled 的数据类型为 tinyint,默认值为 1(启用)。如果为 0,则不启用计划。如果不启用计划,则作业不会按此计划运行。

@freq_type = freq_type

指示作业执行时间的值。freq_type 的数据类型为 int,默认值为 0,可以是下列值之一。

说明

1

一次

4

每天

8

每周

16

每月

32

每月,相对于 freq interval

64

SQLServerAgent 服务启动时运行

128

计算机空闲时运行

@freq_interval = freq_interval

作业执行的天数。freq_interval 的数据类型为 int,默认值为 0,该值取决于 freq_type 的值。

freq_type 的值

 freq_interval 的影响

1(一次)

freq_interval 未使用。

4(每天)

每 freq_interval 天。

8(每周)

freq_interval 是以下一个值或多个值(用逻辑运算符 OR 组合):

1 = 星期日

2 = 星期一

4 = 星期二

8 = 星期三

16 = 星期四

32 = 星期五

64 = 星期六

16(每月)

每月的 freq_interval 天。

32(与“每月”选项相关)

freq_interval 是下列值之一:

1 = 星期日

2 = 星期一

3 = 星期二

4 = 星期三

5 = 星期四

6 = 星期五

7 = 星期六

8 = 日

9 = 工作日

10 = 休息日

64(SQLServerAgent 服务启动时)

freq_interval 未使用。

128

freq_interval 未使用。

@freq_subday_type = freq_subday_type

指定 freq_subday_interval 的单位。freq_subday_type 的数据类型为 int,默认值为 0,可以是下列值之一。

说明(单位)

0x1

在指定的时间

0x2

0x4

分钟

0x8

小时

@freq_subday_interval = freq_subday_interval

作业的每次执行之间间隔的 freq_subday_type 周期数。freq_subday_interval 的数据类型为 int,默认值为 0

@freq_relative_interval = freq_relative_interval

freq_interval 为 32(与“每月”选项相关)时,每月中作业的 freq_interval 的执行频率。freq_relative_interval 的数据类型为 int,默认值为 0,可以是下列值之一。

说明(单位)

1

第一个

2

第二个

4

第三个

8

第四个

16

最后一个

@freq_recurrence_factor = freq_recurrence_factor

作业的两次计划执行之间的间隔周数或月数。只有 freq_type 为 816 或 32 时,才会使用freq_recurrence_factorfreq_recurrence_factor 的数据类型为 int,默认值为 0

@active_start_date = active_start_date

可以开始执行作业的日期。active_start_date 的数据类型为 int,默认值为 NULL,指示当天的日期。日期格式为 YYYYMMDD。如果 active_start_date 不为 NULL,则日期必须大于或等于 19900101。

@active_end_date = active_end_date

停止执行作业的日期。active_end_date 的数据类型为 int,默认值为 99991231,指示 9999 年 12 月 31 日。格式为 YYYYMMDD。

@active_start_time = active_start_time

在 active_start_date 和 active_end_date 之间的任何一天开始执行作业的时间。active_start_time 的数据类型为 int,默认值为 000000,指示 24 小时制的上午12:00:00,并且必须使用 HHMMSS 格式输入。

@active_end_time = active_end_time

在 active_start_date 和 active_end_date 之间任何一天停止执行作业的时间。active_end_time 的数据类型为 int,默认值为 235959,指示 24 小时制的晚上 11:59:59,必须使用 HHMMSS 的格式输入。

@owner_login_name= ] owner_login_name]

拥有该计划的服务器主体的名称。owner_login_name 的数据类型为 sysname,默认值为 NULL,指示计划由创建者拥有。

@automatic_post =automatic_post

保留。

 返回代码值

0(成功)或 1(失败)

 备注

所有使用该计划的作业将立即使用新设置。但是,更改计划不会停止当前正在运行的作业。

 权限

默认情况下,只有 sysadmin 固定服务器角色的成员才可以执行此存储过程。其它用户必须被授予 msdb 数据库中下列 SQL Server 代理固定数据库角色的权限之一:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

只有 sysadmin 的成员才可以修改其它用户拥有的计划。

以上是关于如何修改 SQL Server 代理主作业 (Transact-SQL)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Alwayson创建代理作业注意事项

如何从MS SQL Server 2012中的不同表中减去连续的行?

SQL Server 代理作业:如何在不执行整个作业的情况下执行作业步骤

如何从存储过程启用 SQL Server 代理作业执行

SQL Server代理(8/12):使用SQL Server代理外部程序

如何在 Linux 上跨可用性组副本同步 SQL Server 代理作业?