### SQL Server 作业调度知识点详解 #### 一、SQL Server 作业调度概述 在 SQL Server 中,作业调度是一项重要的管理工具,它允许管理员自动化执行一系列任务(如备份数据库、清理日志等)。通过作业调度,可以确保这些重复性的任务按照预定的时间间隔自动执行,大大减轻了管理员的工作负担。 #### 二、创建作业的基本步骤 1. **声明变量**:需要声明一个用于存储作业 ID 的变量 `@jobid`。 ```sql DECLARE @jobid uniqueidentifier ``` 2. **添加作业**:接下来,使用 `sp_add_job` 存储过程来创建一个新的作业。 ```sql EXEC msdb.dbo.sp_add_job @job_name = N'ҵ', @job_id = @jobid OUTPUT ``` 3. **定义作业步骤**:每个作业可以包含多个步骤,每个步骤通常执行特定的任务,例如运行某个 Transact-SQL 脚本。 ```sql DECLARE @sql nvarchar(400), @dbname sysname SELECT @dbname = DB_NAME(), @sql = N'--ҵ' EXEC msdb.dbo.sp_add_jobstep @job_id = @jobid, @step_name = N'ҵ', @subsystem = 'TSQL', @database_name = @dbname, @command = @sql ``` 4. **设置作业调度**:作业调度决定了作业何时执行以及执行的频率。使用 `sp_add_jobschedule` 存储过程来定义作业的调度规则。 ```sql EXEC msdb..sp_add_jobschedule @job_id = @jobid, @name = N'', @freq_type = 4, -- 每天 @freq_interval = 1, -- 指每天执行一次, 1. @freq_subday_type = 0x8, -- 按小时执行, 0x1=指定时间, 0x4=分钟, 0x8=每小时执行一次 @freq_subday_interval = 1, -- 执行频率, 每小时执行一次 @active_start_date = NULL, -- 作业执行的开始日期, 为NULL时表示当前日期, 格式为 YYYYMMDD @active_end_date = 99991231, -- 作业执行的截止日期, 默认为99991231, 格式为 YYYYMMDD @active_start_time = 00000, -- 作业执行的开始时间, 格式为 HHMMSS @active_end_time = 235959 -- 作业执行的截止时间, 格式为 HHMMSS ``` 5. **绑定服务器**:为了使作业能够在指定的 SQL Server 实例上执行,还需要使用 `sp_add_jobserver` 存储过程将作业与服务器关联起来。 ```sql DECLARE @servernamesysname SET @servername = CONVERT(nvarchar(128), SERVERPROPERTY(N'ServerName')) EXEC msdb.dbo.sp_add_jobserver @job_id = @jobid, @server_name = @servername ``` #### 三、具体案例分析 根据给定的部分内容,可以看出该作业被配置为每天每小时执行一次,并且可以在失败时手动重新执行。这意味着作业将在每天的每一小时内被执行一次,直到 9999 年 12 月 31 日。 此外,作业还设置了多种不同的执行频率,包括: - 每天执行一次。 - 每周执行一次。 - 每两周执行一次。 这种灵活的作业调度能力使得管理员可以根据实际需求定制不同的作业执行计划,以满足各种不同的业务场景。 #### 四、总结 通过 SQL Server 的作业调度功能,不仅可以自动化执行日常管理任务,还可以提高系统的稳定性和可靠性。合理利用作业调度,可以极大地提升数据库管理效率,并有助于确保数据的安全性和完整性。
EXEC msdb.dbo.sp_add_job
@job_name = N'作业名称',
@job_id = @jobid OUTPUT
--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=DB_NAME(), --作业步骤在当前数据库中执行
@sql=N'--作业步骤内容' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N'作业步骤名称',
@subsystem = 'TSQL', --步骤的类型,一般为TSQL
@database_name=@dbname,
@command = @sql
--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'调度名称',
@freq_type=4, --每天
@freq_interval=1, --指定每多少天发生一次,这里是1天.
@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次
@freq_subday_interval=1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
--添加目标服务器
- 贪吃小仙女2013-03-04这个代码是Transact-sql语句,有些是不是SQL自动生成的脚本
- sxtylhg1632013-03-13挺好的学习资料。谢楼主。
- chavid2014-01-10不错学习了,用在服务器上了
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助