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

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

快速回顾一下工作

将SQL Server代理作业看作是一个容器,它将执行给定任务所需的一组其他组件关联起来。作业的主要组件是作业步骤、调度、警报和通知。

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

作业步骤

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

ActiveX

操作系统(CMDExec)

Powershell

各种复制任务

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)

让我们创建一个作业和必要的作业步骤来备份主数据库。创建一个新作业,我将其称为“Backup Master”,如图1所示。

图1 -创建一个新作业

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

图2 -创建一个新的作业步骤

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

DBCC CHECKDB

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

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

接下来,单击new job步骤的Advanced选项卡。您将看到如图3所示的屏幕。On success操作定义了作业步骤成功完成后将发生什么。默认选项是转到下一个步骤,这意味着如果一个作业中有多个步骤,并且这个步骤已经工作,则执行下一个步骤。如果单击下拉框,您将看到其他选项——包括退出作业(带有成功或失败通知),或者跳转到另一个步骤。注意最后一个选项,跳转到另一个步骤,直到你至少在工作的第二步才会出现。

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

如果某个步骤由于某种原因失败,您可以选择重试作业步骤的尝试次数。您还可以指定每次成功完成作业步骤之间的延迟(以分钟为单位)。下面是失败操作(即作业步骤无法完成或以错误代码结束)。这些选项与on success相同,只是默认值不同(正如您可能期望的那样)。如果某个步骤由于某种原因失败,您可以选择重试作业步骤的尝试次数。您还可以指定每次成功完成作业步骤之间的延迟(以分钟为单位)。下面是失败操作(即作业步骤无法完成或以错误代码结束)。这些选项与on success相同,只是默认值不同(正如您可能期望的那样)。

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

单击OK,然后单击New向作业添加第二个步骤。假设步骤1没有生成错误,下一个作业将备份主数据库。下面是来自我的系统的命令(如图4所示):

BACKUP DATABASE [master] TO  DISK =

N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak'

WITH INIT

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

由于这是作业的结束,单击Advanced选项卡并选择on success操作作为“退出作业报告成功”。就这样——您应该能够单击OK,并看到完成的作业步骤,如图5所示。

图5 -完成的作业

现在单击OK完成任务的定义,并运行任务。当您单击以运行作业时,请注意,因为有多个步骤,现在会询问您希望从哪个步骤开始作业。从第一步开始运行作业(如图6所示),并在第一步成功运行时观察作业的流程,然后移动到作业的第二步(也是最后一步)。

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

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

图7 -作业已经成功运行

工作子系统

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

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

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

下次

可以看到,SQL Server代理作业步骤是作业内容的核心。可以使用许多不同的子系统,每个子系统都提供不同的功能。在这个步骤的下一步中,我将研究增强作业步骤安全性的代理功能,以及用于分析服务的其他SQL代理子系统。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值