【SQL Server】SQL Server Agent 任务调度
在 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<br>必须指定@job_id或@job_name,但不能同时指定这两者 |
| @job_name | 向其中添加计划的作业的名称。 @job_name为 sysname,默认值为 NULL. <br>必须指定@job_id或@job_name,但不能同时指定这两者 |
| @name | 计划名称 |
| @enabled | 指示计划的当前状态。 @enabled 为 tinyint,默认值 1 为 (已启用)。 如果 0启用计划,则不会启用该计划。 禁用计划后,不会运行作业。 |
| @freq_type | 指示作业执行时间的值。 @freq_type为 int,可以是以下值之一: <br>1 一次<br>4 每日<br>8 每周<br>16 每月<br>32 相对于@freq_interval的每月<br>64 SQL Server 代理服务启动时运行。 <br>128 在计算机空闲时运行。 |
| @freq_interval | 执行作业的日期。 @freq_interval为 int,默认值0为 int,取决于@freq_type的值 。 |
| @freq_subday_type | 指定@freq_subday_interval的单位。 @freq_subday_type为 int,可以是以下值之一: <br>1 在指定的时间<br>2 秒<br>4 分钟<br>8 时数 |
| @freq_subday_interval | 每个作业执行之间要发生的@freq_subday_type周期数。 @freq_subday_interval为 int,默认值为 0 |
| @freq_relative_interval | 进一步定义@freq_type设置为32(每月相对)时的@freq_interval。@freq_relative_interval为 int,可以是以下值之一: <br>1 第一个<br>2 第二个<br>4 第三个<br>8 第4个<br>16 Last<br> @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 ):<br> 1 = 星期日<br> 2 = 星期一 <br>4 = 星期二 <br>8 = 星期三 <br>16 = 星期四<br> 32 = 星期五<br> 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未使用。 |
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';

浙公网安备 33010602011771号