如何修改 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 的成员才可以修改其它用户拥有的计划。

时间: 2024-12-14 18:42:25

如何修改 SQL Server 代理主作业 (Transact-SQL)的相关文章

第九篇 SQL Server代理了解作业和安全

本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这系列的前几篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序.你最好的选择是使用PowerShell的子系统运行PowerShell脚本.PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题.在这一篇,你会深入到SQL Server代理安全.安全是个令人困惑的话题,它值得一些明确的考虑.这系列有两个不同方面

第六篇 SQL Server代理深入作业步骤工作流

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

sql server代理中作业执行SSIS包失败

RT,执行失败了,总是只提示一句“以xxxx用户身份执行失败”,很难找原因. 引用 http://bbs.csdn.net/topics/300059148 Sql2005如何用dtexec运行ssis(DTS)包 一.首先在Business Intelligence中设计好包,并调试通过. 二.选用dtexec工具运行包 (一)  打开 xp_cmdshell 选项 SQL Server 2005 中引入的 xp_cmdshell 选项是服务器配置选项,使系统管理员能够控制是否可以在系统上执行

第二篇 SQL Server代理作业步骤和子系统

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.

SQL Server代理(9/12):理解作业和安全

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在SQL Server代理作业步骤里启动外部程序.你可以使用过时的ActiveX系统,从虚拟命令提示符里运行批处理命令,或甚至启动你自己的程序.你的最佳选项是使用PowerShell子系统来运行PowerShell脚本.PowerShell脚本会允许你操纵系统或SQL Server角度的一切.在这篇文章

翻译(十四)——通往SQL Server代理的阶梯-二级:作业步骤和子系统

  翻译(十四)——通往SQL Server代理的阶梯-二级:作业步骤和子系统 Richard Waymire,2017/10/11(首次出版:2011/02/17) 链接: http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/ 该系列 本文是楼梯系列的一部分:SQL Server代理的阶梯 SQL Server代理是任何实时数据库系统的核心.代理有许多不太明显的用途,因此对于开发人员

翻译:通往SQL Server代理的阶梯-二级:作业步骤和子系统

通往SQL Server代理的阶梯-二级:作业步骤和子系统Richard Waymire,2017/10/11(首次出版:2011/02/17)该系列本文是楼梯系列的一部分:SQL Server代理的阶梯SQL Server代理是任何实时数据库系统的核心.代理有许多不太明显的用途,因此对于开发人员和dba来说,系统的知识总是有用的.Richard Waymire提供了一个简单的解释.SQL Server代理作业是由一系列的一个或多个作业步骤组成的.一个作业步骤被分配到一个特定的工作子系统,它确定

SQL Server代理(11/12):维护计划作业

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代理账户, 要求用户必须明确授权可以在作业步骤使用代理凭据.在这一篇,你将检查维护计划.维护计划是用来执行各种任务来优化你的数据库,包括备份.重建和/或重整 索引.更新统计.维护计划会创建作业.这一篇我们将查看维护

SQL Server代理(10/12):使用代理账号运行作业

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和 SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Se