初识SQL Server代理&作业

文章目录

  • 一、前言
  • 二、SQL Server代理
    • 1. SQL Server代理的好处
    • 2. SQL Server代理组件
      • ⭐2.1. 作业 Jobs & 作业步骤 Job Steps
      • ⭐2.2. 计划 Schedules
      • 2.3. 警报 Alerts
      • 2.4. 操作员 Operators
    • ⭐3. 相关工作
  • 三、创建并执行作业
    • 1. 创建作业
    • 2. 执行作业
  • 四、结语

一、前言

别人写的程序在数据库中生成了一些表,并且会不停更新表中数据。

现在有个需求,定期根据表中的数据做一些运算,然后重新生成一张表。我将新表的表名、字段给第三方使用。

关键是,我无法修改别人的代码,好在我可以登录该系统所运行电脑的数据库。
经过一番搜索后,我发现了触发器和SQL Server代理这两种工具。进一步分析后,觉得SQL Server代理可能更符合我的需求。

❗注意
本文不讨论多SQL Server实例的情况。
由于使用场景较简单,本文只简述SQL Server代理及其组件,有关SQL Server代理安全性等拓展内容不做介绍。


二、SQL Server代理

SQL Server代理是一种微软Windows服务,用于执行一些预先安排好的任务,这些任务在SQL Server中称为jobs(作业)。

1. SQL Server代理的好处

SQL Server代理使用了SQL Server来存储作业信息。作业包含一个或多个job steps(作业步骤)。每个步骤都包含了自己的任务,例如,备份数据库。

SQL Server代理可以执行计划(就是指定执行时间点)上或用于响应特定事件的作业。例如,若你想在每个工作日的下班后备份公司服务器,你就可以使该任务自动化执行。比如,将该备份任务安排在周一到周五的22:00之后运行。若备份过程遇到问题,SQL Server代理还能记录事件并通知你。

至此,SQL Server Agent(代理)的功能很清晰了。
初识SQL Server代理&作业_第1张图片
它可以替数据库操作员来处一些和SQL Server相关的事情。

❗注意
默认情况下,安装SQL Server时,SQL Server代理服务是禁用的,除非用户选择自动启动该服务。所以你要手动启动它。
初识SQL Server代理&作业_第2张图片

2. SQL Server代理组件

SQL Server代理使用以下组件来定义要执行的任务、何时执行任务以及如何报告任务是否成功执行。

⭐2.1. 作业 Jobs & 作业步骤 Job Steps

作业是SQL Server代理执行的一系列指定操作(这个一系列很重要,作业有点类似操作的容器,里面放了许多操作,所以是管理单元,而不是真正的执行单元。而这一个个操作,就是下文的作业步骤)。使用作业可以定义各种任务,并配置它们的执行次数以及监视它们的执行状态与执行结果。作业可以在本地服务器上运行,也可以在远程服务器上运行。

可以用以下几种方式来执行作业:

  • 按照计划表配置执行。
  • 响应警报来执行。
  • 通过执行sp_start_job存储过程。

作业中的每个操作都称为 job step(作业步骤)
作业步骤是作业在数据库或服务器上执行的操作。每个作业必须至少有一个作业步骤(不然,空有一个容器,啥也做不了)。

作业步骤可以是:

  • 可执行程序和操作系统命令。
  • Transact-SQL(T-SQL)语句,包括存储过程和扩展存储过程。
  • PowerShell脚本。
  • Mircosoft ActiveX脚本。
  • 复制任务。
  • 分析服务任务。
  • 集成服务包。

初识SQL Server代理&作业_第3张图片

每个作业步骤都运行在专门的安全上下文(环境)中。对于使用T-SQL的作业步骤,使用EXECUTE AS语句为作业步骤设置安全上下文。其他类型的作业步骤,使用代理账户为作业步骤设置安全上下文。

⭐2.2. 计划 Schedules

计划(表)(schedule,其实在计算机中,我更喜欢叫它调度)指定了作业何时运行。在一个计划上可以运行多个作业,一个作业也可以被多个计划应用。计划可以定义作业运行的时间条件,如:

  • SQL Server代理启动时运行。
  • 当计算机CPU空闲时运行(何为空闲由你定义)。
  • 在某个特定的日期和时间运行一次。
  • 在一个循环的计划表上(比如,每天早上8:00)。

2.3. 警报 Alerts

警报(alert) 是对特定事件的自动响应。事件可以是启动的作业或达到阈值的系统资源。你可以定义警报发生的条件。

警报可以响应以下条件:

  • SQL Server 事件。
  • SQL Server 性能条件。
  • 运行在SQL Server代理的计算机上的WMI事件。

警报可以执行以下操作:

  • 通知一个或多个操作员(下节中介绍)。
  • 执行一个作业。

2.4. 操作员 Operators

操作员(operator) 为负责维护SQL Server实例的个人定义了联系方式。在一些企业中,操作员职责被分配到了个人(责任到人)。尤其在有多个服务器的企业中,许多人可以分担操作员的责任。操作员不包含安全信息,也不定义安全主体。

SQL Server能通过以下方式通知操作员:

  • 电子邮件
  • 寻呼机(通过电子邮件)
  • 网络发送

❗注意
如要使用网络发送通知,必须在SQL Server代理所在的计算机上启动Windows Messenger服务。
如果发现寻呼机和网络发送的功能无法使用,请不要惊讶。因为微软早就计划从SQL Server代理中删除这两个功能了。

若要使用电子邮件或传呼机向操作员发送通知,必须将SQL Server代理配置为使用数据库邮件。可以将操作员定义成一组个人的别名。这样,该别名的所有成员就不会同时被验证。

⭐3. 相关工作

要使SQL Server管理更加自动化,通常要做以下工作:

  1. 确定哪些管理任务或服务器事件会定期发生,以及这些任务或事件是否可以通过编程方式管理。若任务涉及一个可预测的步骤序列,并且发生在特定的时间或响应特定事件,那么它是一个很好的自动化候选任务。
  2. 用SQL Server管理工具(SSMS)、Transact-SQL脚本或SQL Server管理对象(SMO)定义一系列作业、计划表、警报和操作员。
  3. 运行定义的SQL Server代理作业。

❗注意
对于SQL Server默认实例,SQL Server服务的名称为SQLSERVERAGENT。
对于命名了的实例,SQL Server代理服务名为SQLAgent$instancename。

在对代理有了一定了解后,再介绍一个例子,在代理中创建一个作业,并添加一些脚本代码。


三、创建并执行作业

本节讲解如何在SQL Server Management Studio(SSMS)中创建一个SQL Server代理作业,并在计划中运行它。(创建作业(包括其他组件,计划、警报等等)的方式有很多,可以用SSMS图形化操作,可以用Transact-SQL脚本操作,也可以用SQL Server Management Objects操作,这边介绍SSMS图形化操作,该方式比较通用直观)

1. 创建作业

在SSMS中创建一个作业,通常经过以下几步:

  1. 对象资源管理器中,单击加号展开要在其中创建SQL Server代理作业的服务器。

  2. 点击加号展开SQL Server代理

  3. 右键单击作业文件夹并选择新建作业
    初识SQL Server代理&作业_第4张图片

  4. 新建作业对话框中的常规页面,修改作业的常规属性。(一般改个名称即可)

  5. 步骤页面,组织作业步骤。
    这边着重介绍下T-SQL类型的作业步骤。创建T-SQL作业步骤时,你必须:

    • 指定运行该作业的数据库。
    • 键入执行的T-SQL语句。语句可以调用存储过程或扩展存储过程。
      初识SQL Server代理&作业_第5张图片

    你也可以选一个现有的T-SQL文件作为作业步骤的命令。
    T-SQL作业步骤不使用SQL Server代理作为代理人。取而代之,作业步骤作为作业步骤的所有者运行(?)。

  6. 计划页面,组织作业计划。
    你可以选取一个已有的计划或新建一个计划。当与计划绑定后,该作业就会按计划的时间执行。可见,作业和计划是独立的,作业定义了任务内容,计划定义了执行时间。

  7. 警报页面,组织作业警报。

  8. 通知页面,设置代理在作业完成时执行的操作。

  9. 目标页面,管理作业目标服务器。

  10. 配置完成, 点击确定。

2. 执行作业

在作业的常规页面中,有个启用选项:
在这里插入图片描述
勾选启用后,给作业绑定计划或警报,达到条件后(达到计划指定时间或触发警报),作业就会执行。


四、结语

SQL Server代理在实际开发中作用很大,许多操作都可以放到SQL Server代理中执行,很多时候能事半功倍。

本文对SQL Server代理的基本组件和创建作业绑定计划的简单使用场景进行介绍。实际使用中的重头戏应该是脚本的编写。

你可能感兴趣的:(数据库,数据库,sql,sqlserver)