SQL Server代理的阶梯 - 第2级:作业步骤和子系统

SQL Server代理作业由一系列一个或多个作业步骤组成。 将作业步骤分配给特定作业子系统,该子系统标识作业步骤将要执行的工作类型。 每个作业步骤都在单独的安全上下文中运行,尽管每个作业还有一个所有者,可以确定谁可以修改作业。 本文将重点介绍构成SQL Server代理作业的作业步骤和子系统。

工作快速回顾

考虑SQL Server代理作业的最佳方式是作为一个容器,它关联执行给定任务所需的一组其他组件。作业的主要组件是作业步骤,计划,警报和通知。

创建作业时,会为作业分配所有者。如第1级所述,默认情况下,所有者将是创建作业的用户(在Transact-SQL中,通过sp_add_job系统存储过程或使用SQL Server Management Studio)。 SQL Server代理的大多数功能都假定您是sysadmin服务器角色成员。如果是,则您或任何其他sysadmin角色成员可以在创建作业后修改该作业。如果您希望非sysadmin角色成员能够修改作业,则应将作业所有者更改为该用户的登录名。请注意,无论作业所有权如何,sysadmin成员都可以更改任何作业。

工作步骤

如第1级所述,SQL Server代理作业至少由一个作业步骤组成。当大多数人认为某项工作执行某些工作时,他们对SQL Server的真正含义是工作步骤。作业步骤由您希望执行的操作类型定义,每个作业步骤将由以下作业子系统之一执行:

·   ActiveX

·      操作系统(CMDExec)

·      电源外壳

·      各种复制任务

·       SQL Server Analysis Services(SSAS)命令(即XML / A)

·      SQL Server Analysis Services(SSAS)查询(MDX)

·      SQL Server Integration Services(SSIS)包(SQL Server 2000中的DTS包)

·      Transact-SQL脚本(T-SQL)

让我们创建一个工作,以及必要的工作步骤来备份Master数据库。 创建一个新工作,我称之为“Backup Master”,如图1所示。

图1  - 创建新工作

现在单击Steps选项卡查看作业步骤,然后单击New ...以打开New Job Step对话框(图2)。

图2  - 创建新的工作步骤

我已经填写了这个工作中的步骤,以便在开始备份之前对master数据库执行完整性检查。我可以一步完成所有事情,但想要在步骤之间向您展示工作流程。我给了我的步骤名称,“检查主数据库的完整性”,并将类型设置为Transact-SQL。数据库上下文是master。我在文本框中输入了一个简单的命令:

DBCC CHECKDB

对于此对话框,有一些解释。 “类型”下拉列表是选择SQL Server代理子系统的位置。下面将描述可能的子系统。 Transact-SQL作业步骤没有安全代理帐户,因此作业步骤将在作业所有者的上下文中运行。安全代理帐户允许作业步骤与不同用户的安全上下文一起运行,并且通常用于不属于sysadmin角色成员的作业。

您选择的作业子系统将更改对话框其余部分的内容。对于Transact-SQL作业步骤,提供了一个简单的文本框供您在Transact-SQL中键入,就像我在这里所做的那样。每个作业步骤可能具有与之关联的不同子系统。

接下来,单击新作业步骤的“高级”选项卡。您将看到如图3所示的屏幕.On success操作定义了一旦成功完成作业步骤后会发生什么。默认选项是转到下一步,这意味着如果作业中有多个步骤,并且这个步骤有效,请执行下一步。如果单击下拉列表,您将看到其他选项 - 包括退出作业(带有成功或失败通知),或跳转到另一个步骤。请注意,最后一个选项跳到另一个步骤,直到您至少在工作中完成第二步才会显示。

图3  - 新作业步骤高级选项

如果某个步骤因某种原因失败,您可以选择尝试重试作业步骤的次数。 您还可以指定每次成功完成作业步骤之间的延迟(以分钟为单位)。 下面是失败动作(即作业步骤无法完成或以错误代码结束)。 选项与成功时相同,具有不同的默认值(如您所料)。

因为这是Transact-SQL作业步骤类型,所以可以将Transact-SQL命令的任何输出记录到输出文件中(就像sqlcmd中的-o选项一样)。 您还可以将结果记录到表(MSDB中的sysjobstepslogs表)。

单击“确定”,然后单击“新建”以向作业添加第二步。 假设步骤1没有生成错误,则下一个作业将备份master数据库。 这是来自我系统的命令(如图4所示):

BACKUP DATABASE [master] TO  DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak'
WITH INIT

图4  - 备份master数据库的第二个作业步骤

由于这是作业的结束,单击“高级”选项卡并选择“成功”操作为“退出作业报告成功。”就是这样 - 您应该能够单击“确定”,并查看已完成的作业步骤,如图5。

图5  - 完成的工作

现在单击“确定”完成作业定义,然后运行作业。 单击以运行作业时,请注意,因为现在有多个步骤要求您启动作业的步骤。 从第一步开始运行作业(如图6所示),并在第一步成功运行时观察作业流程,然后转到作业的第二步也是最后一步。

图6  - 步骤启动作业(选择步骤1)

成功完成后,作业将标记为成功并退出(如图7所示)。

图7  - 作业已成功运行

工作子系统

您将使用七个主要作业子系统。此数字不包括复制子系统,因为它们是特殊情况,通常这些作业步骤和作业由复制组件而不是DBA创建。我们将把三个Analysis Services子系统的讨论推迟到下一个级别,因为它们有几个独特的考虑因素。

Transact-SQL脚本(T-SQL)

Transact-SQL子系统非常简单,可能是您将创建的最常见的作业步骤类型。它允许您针对此SQL Server代理实例所附带的SQL Server的本地实例运行Transact-SQL(但不是对Transact-SQL的sqlcmd扩展)。请注意,与Analysis Services子系统不同,您只能连接到本地SQL Server实例。另请注意,Transact-SQL没有代理功能,因此T-SQL的作业步骤始终在作业所有者的安全上下文中运行。

ActiveX脚本

ActiveX子系统允许您运行VBScript,Jscript或其他自定义脚本语言(理论上)。默认情况下,该脚本将在SQL Server代理服务帐户的安全上下文中运行。如果您精通VBScript,这可能是一个方便的子系统,但从SQL Server 2008开始,该子系统已被弃用,您应该使用PowerShell子系统。

操作系统(CmdExec)

CmdExec子系统允许您运行操作系统命令(就像打开命令提示符一样)。这些命令将在SQL Server代理服务帐户的安全上下文中运行。在这里(以及在ActiveX子系统中)要记住的关键是没有用户能够单击或接受任何提示,因此请确保您的脚本无需用户干预即可运行。

电源外壳

PowerShell子系统允许您运行Windows PowerShell 1.0或2.0兼容脚本。与其他脚本子系统一样,默认情况下,该脚本将在SQL Server代理服务帐户的安全上下文中运行。 PowerShell非常强大,您应该认真研究增长您对PowerShell的了解。 PowerShell将允许您连接到远程系统,因此这是绕过Transact-SQL子系统连接到SQL Server的远程实例的限制的一种方法。

下次

如您所见,SQL Server代理作业步骤是作业内容的核心问题。有许多不同的子系统可供选择,每个子系统都有不同的功能。在本Stairway的下一步中,我将检查代理功能,以增强作业步骤的安全性,以及Analysis Services的其余SQL代理子系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值