【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) 来检查和启动它:

  1. 在 SSMS 中,连接到你的 SQL Server 实例。
  2. 在“对象资源管理器”中,展开“SQL Server Agent”。
  3. 右键点击“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

  1. 作业是 SQL Server Agent 中用于执行一系列任务的基本单元。你可以通过以下步骤创建一个作业:
  2. 在 SSMS 中,展开“SQL Server Agent”,右键点击“作业”,选择“新建作业”。
  3. 在“常规”页面中,输入作业的名称和描述。
  4. 在“步骤”页面中,可以添加新的作业步骤。每个步骤可以执行一个 Transact-SQL 脚本、命令行脚本或其他类型的任务。点击“新建”来添加一个步骤,设置其类型、名称、数据库和要执行的命令或脚本。
  5. 在“调度”页面中,可以设置作业的调度计划,如频率、开始时间和持续时间。
  6. 点击“确定”保存作业。

创建作业,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 指示计划的当前状态。 @enabledtinyint,默认值 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_intervalint,默认值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未使用。

4. 设置目标服务器。

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

其他功能

 监控作业

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

  1. 在 SSMS 中,展开“SQL Server Agent”,选择“作业活动监视器”或“作业历史”。
  2. “作业活动监视器”显示当前正在运行的作业。
  3. “作业历史”显示过去所有作业的运行历史,包括成功和失败的情况。

查看历史作业语句:

-- 查看作业历史记录
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) 来检查和启动它:

 

  1. 在 SSMS 中,连接到你的 SQL Server 实例。
  2. 在“对象资源管理器”中,展开“SQL Server Agent”。
  3. 右键点击“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';
posted @ 2025-02-20 15:05  陆陆无为而治者  阅读(1031)  评论(0)    收藏  举报