什么是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。