SQL Server 代理作业浅析

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

—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花