【SQL Server】SQL Server Agent 任务调度

2026-08-29 18:21:54

在 SQL Server 中,任务调度通常涉及使用 SQL Server Agent。SQL Server Agent 是一个强大的工具,用于自动执行作业(Jobs)、操作(Operators)、警告(Alerts)和多种类型的任务。以下是使用 SQL Server Agent 进行任务调度的基本步骤:

1. 启用 SQL Server Agent

首先,确保 SQL Server Agent 已经启动。你可以通过 SQL Server Management Studio (SSMS) 来检查和启动它:

在 SSMS 中,连接到你的 SQL Server 实例。

在“对象资源管理器”中,展开“SQL Server Agent”。

右键点击“SQL Server Agent”,选择“启动”。

2. 创建作业

作业等SQL Server 代理参数,可参考https://learn.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-add-job-transact-sql?view=sql-server-ver16 。

作业是 SQL Server Agent 中用于执行一系列任务的基本单元。你可以通过以下步骤创建一个作业:

在 SSMS 中,展开“SQL Server Agent”,右键点击“作业”,选择“新建作业”。

在“常规”页面中,输入作业的名称和描述。

在“步骤”页面中,可以添加新的作业步骤。每个步骤可以执行一个 Transact-SQL 脚本、命令行脚本或其他类型的任务。点击“新建”来添加一个步骤,设置其类型、名称、数据库和要执行的命令或脚本。

在“调度”页面中,可以设置作业的调度计划,如频率、开始时间和持续时间。

点击“确定”保存作业。

创建作业,T-SQL语句如下:

-- 创建作业

EXEC msdb.dbo.sp_add_job

@job_name = N'MyJob';

2. 创建作业步骤

创建作业步骤语句:

-- 添加作业步骤

EXEC msdb.dbo.sp_add_jobstep

@job_name = N'MyJob',

@step_name = N'MyJobStep',

@subsystem = N'TSQL',

@command = N'PRINT ''Hello, World!''';

3. 配置作业的调度计划

在创建或编辑作业时,你可以设置其调度计划:

频率:可以设置为一次性的、每天、每周、每月等。

重复间隔:例如,每天、每周的哪一天等。

开始时间:作业开始的具体时间。

持续时间:作业运行的时间长度。

T-SQL 语句如下:

1 -- 设置作业调度

2 EXEC msdb.dbo.sp_add_jobschedule

3 @job_name = N'MyJob',

4 @name = N'DailySchedule',

5 @freq_type = 4, -- 按日执行

6 @freq_interval = 1, -- 一次

7 @freq_subday_type = 4, -- 执行周期(分钟)

8 @freq_subday_interval = 1, -- 每个执行周期执行次数(一次)

9 @active_start_date = 20250219, -- 开始日期2025-02-19

10 @active_end_date = 99991231, -- 结束日期99991231

11 @active_start_time = 0, -- 开始时间

12 @active_end_time = 235959 -- 结束时间

设置作业调度的参数含义:

参数说明

@job_id

添加计划作业的作业标识号。类型uniqueidentifier, 默认值NULL
必须指定@job_id或@job_name,但不能同时指定这两者

@job_name

向其中添加计划的作业的名称。 @job_name为 sysname,默认值为 NULL.
必须指定@job_id或@job_name,但不能同时指定这两者

@name

计划名称

@enabled

指示计划的当前状态。 @enabled 为 tinyint,默认值 1 为 (已启用)。 如果 0启用计划,则不会启用该计划。 禁用计划后,不会运行作业。

@freq_type

指示作业执行时间的值。 @freq_type为 int,可以是以下值之一:
1 一次
4 每日
8 每周
16 每月
32 相对于@freq_interval的每月
64 SQL Server 代理服务启动时运行。
128 在计算机空闲时运行。

@freq_interval

执行作业的日期。 @freq_interval为 int,默认值0为 int,取决于@freq_type的值 。

@freq_subday_type

指定@freq_subday_interval的单位。 @freq_subday_type为 int,可以是以下值之一:
1 在指定的时间
2 秒
4 分钟
8 时数

@freq_subday_interval

每个作业执行之间要发生的@freq_subday_type周期数。 @freq_subday_interval为 int,默认值为 0

@freq_relative_interval

进一步定义@freq_type设置为32(每月相对)时的@freq_interval。@freq_relative_interval为 int,可以是以下值之一:
1 第一个
2 第二个
4 第三个
8 第4个
16 Last
@freq_relative_interval指示间隔的发生。 例如,如果@freq_relative_interval设置为2@freq_type设置为32,并且@freq_interval设置为3,则计划作业将在每月的第二个星期二发生。

@freq_recurrence_factor

作业执行计划之间相隔的周数或月数。 @freq_recurrence_factor为 int,默认值为 0. 仅当@freq_type设置为8或16@freq_recurrence_factor32时,才使用@freq_recurrence_factor。

@active_start_date

作业执行可以开始的日期。 @active_start_date为 int,默认值为 NULL. 日期的格式为 yyyyMMdd。 如果 设置了@active_start_date ,则日期必须大于或等于 19900101。

@active_end_date

作业执行可以停止的日期。 @active_end_date为 int,默认值为 99991231. 日期的格式为 yyyyMMdd

@active_start_time

@active_start_date和@active_end_date之间任意一天开始执行作业的时间。 @active_start_time为 int,默认值为 000000. 时间的格式设置为 HHmmss 24 小时制。

@active_end_time

active_start_date和@active_end_date之间任意一天结束作业执行的时间。 @active_end_time为 int,默认值为 235959. 时间的格式设置为 HHmmss 24 小时制。

@schedule_id

如果成功创建计划,则为其分配的计划标识号。 @schedule_id是 int 类型的 OUTPUT 参数。

@automatic_post

标识为仅供参考。 不支持。 不保证以后的兼容性。

@schedule_uid

计划的唯一标识符。 @schedule_uid是 uniqueidentifier 类型的 OUTPUT 参数

@freq_type和@freq_interval的值如下:

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(SQL Server 代理服务启动时)

@freq_interval未使用。

128

@freq_interval未使用。

4. 设置目标服务器。

T-SQL 创建作业时不能指定目标服务器。所以,我们需要右击【SQL Server代理服务】→【作业】→【属性】,切换到目“目标”。选择或主配置合适的服务器。

其他功能

监控作业

创建并调度作业后,你可以监控其执行情况:

在 SSMS 中,展开“SQL Server Agent”,选择“作业活动监视器”或“作业历史”。

“作业活动监视器”显示当前正在运行的作业。

“作业历史”显示过去所有作业的运行历史,包括成功和失败的情况。

查看历史作业语句:

-- 查看作业历史记录

SELECT * FROM msdb.dbo.sysjobhistory WHERE job_id = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'MyJob');

管理作业

你可以随时修改、启用或禁用作业,或者删除不再需要的作业:

在 SSMS 中,右键点击需要管理的作业,选择相应的操作(如“编辑”、“启动”、“停止”或“删除”)。通过以上步骤,你可以有效地使用 SQL Server Agent 来管理和调度你的数据库任务。这对于自动化日常维护任务、数据备份和报告生成等场景非常有用。

首先,确保 SQL Server Agent 已经启动。你可以通过 SQL Server Management Studio (SSMS) 来检查和启动它:

在 SSMS 中,连接到你的 SQL Server 实例。

在“对象资源管理器”中,展开“SQL Server Agent”。

右键点击“SQL Server Agent”,选择“启动”。

1 -- 删除作业步骤

2 EXEC msdb.dbo.sp_delete_jobstep @job_name = N'MyJob', @step_id = 1;

3

4 -- 删除作业调度

5 EXEC msdb.dbo.sp_delete_jobschedule @job_name = N'MyJob', @name = N'DailySchedule';

6

7 -- 删除作业

8 EXEC msdb.dbo.sp_delete_job @job_name = N'MyJob';