什么是SQL SERVER作业?
SQL SERVER作业是一系列由SQL SERVER代理按顺序执行的指定操作。
SQL SERVER作业可以执行一系列活动,包括运行Transact-SQL脚本、命令行应用程序、Microsoft ActiveX脚本、Integration Services 包、Analysis Services 命令和查询或复制任务。
SQL SERVER作业可以运行重复任务或那些可计划的任务,它们可以通过生成警报来自动通知用户作业状态,从而极大地简化了 SQL Server 管理。
什么是SQL Server 代理?
SQL Server代理是一种 Microsoft Windows服务,它在 SQL Server 中执行计划的管理任务,即“作业”。
SQL Server代理使用 SQL Server来存储作业信息。作业包含一个或多个作业步骤。每个步骤都有自己的任务。例如,备份数据库。
SQL Server代理可以按照计划运行作业,也可以在响应特定事件时运行作业,还可以根据需要运行作业。
例如,如果希望在每个工作日下班后备份公司的所有服务器,就可以使该任务自动执行。将备份安排在星期一到星期五的22:00之后运行,如果备份出现问题,SQL Server代理可记录该事件并通知您。
启动和关闭代理
第一种方式:直接登录到SSMS里面启动和关闭。
第二种方式:在服务里面启动 (SQL Server 代理(实例名))
作业分类
创建作业时,往往需要指定作业类别,如果不指定新建作业类别,就会默认为“[未分类(本地)]”,如下图所示:
当然,也可以查看、添加、删除、修改作业分类。详细了解可阅读《查看、添加、删除、修改SQL SERVER作业分类》。
新建作业
创建作业的步骤一般如下所示:
① 执行 sp_add_job 来创建作业。
② 执行 sp_add_jobstep 来创建一个或多个作业步骤。
③ 执行 sp_add_schedule 来创建计划。
④ 执行 sp_attach_schedule 将计划附加到作业。
⑤ 执行 sp_add_jobserver 来设置作业的服务器。
本地作业是由本地 SQL Server 代理进行缓存的。因此,任何修改都会隐式强制 SQL Server 代理重新缓存该作业。由于直到调用 sp_add_jobserver 时,SQL Server 代理才缓存作业,因此最后调用 sp_add_jobserver 将更为有效。
具体实现方式分两种:
① 使用 SQL Server Management Studio创建 SQL Server 代理作业
② 使用 Transact-SQL创建 SQL Server 代理作业
详细实现过程参照微软官方说明:创建作业。
启动作业
启动作业有两种方式:
① 通过SSMS工具启动作业
② 通过SQL命令启动作业
启动作业一般通过sp_start_job来实现:
--语法:
sp_start_job
{ [@job_name =] 'job_name'
| [@job_id =] job_id }
[ , [@error_flag =] error_flag]
[ , [@server_name =] 'server_name']
[ , [@step_name =] 'step_name']
[ , [@output_flag =] output_flag]
--例子:
exec msdb.dbo.sp_start_job @job_name='JOB_CYCLE_ERRORLOG'
停止作业
停止作业有两种方式:
① 通过SSMS工具停止作业
② 通过SQL命令停止作业
启动作业一般通过sp_stop_job来实现:
--语法:
sp_stop_job
[@job_name =] 'job_name'
| [@job_id =] job_id
| [@originating_server =] 'master_server'
| [@server_name =] 'target_server'
--例子:
exec msdb.dbo.sp_stop_job @job_name='JOB_CYCLE_ERRORLOG'
启用或禁用作业
有两种方式实现:
① 通过SSMS工具启用作业
② 通过SQL命令禁用作业
启用或禁用作业一般通过sp_update_job来实现:
--语法:
sp_update_job [ @job_id =] job_id | [@job_name =] 'job_name'
[, [@new_name =] 'new_name' ]
[, [@enabled =] enabled ]
[, [@description =] 'description' ]
[, [@start_step_id =] step_id ]
[, [@category_name =] 'category' ]
[, [@owner_login_name =] 'login' ]
[, [@notify_level_eventlog =] eventlog_level ]
[, [@notify_level_email =] email_level ]
[, [@notify_level_netsend =] netsend_level ]
[, [@notify_level_page =] page_level ]
[, [@notify_email_operator_name =] 'email_name' ]
[, [@notify_netsend_operator_name =] 'netsend_operator' ]
[, [@notify_page_operator_name =] 'page_operator' ]
[, [@delete_level =] delete_level ]
[, [@automatic_post =] automatic_post ]
--列子:
EXEC msdb.dbo.sp_update_job
@job_name = N'JOB_CYCLE_ERRORLOG',
@enabled = 0 ; --0 禁用作业、 1启用作业
GO
删除作业
有两种方式实现:
① 通过SSMS工具删除作业
② 通过SQL命令删除作业
启用或禁用作业一般通过sp_delete_job来实现:
--语法:
sp_delete_job {
[ @job_id = ] job_id | [ @job_name = ] 'job_name' } ,
[, [ @originating_server = ] 'server' ]
[ , [ @delete_history = ] delete_history ]
[ , [ @delete_unused_schedule = ]
delete_unused_schedule
]
--例子:
EXEC msdb.dbo.sp_delete_job @job_name = 'JOB_CYCLE_ERRORLOG';
其他操作详见官方文档说明:https://docs.microsoft.com/zh-cn/sql/ssms/agent/sql-server-agent?view=sql-server-2017。
