第十六周翻译

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

理查德·韦米尔,2017-10-11(首次出版:2011-02-17)

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

对工作的快速回顾
考虑SQL Server代理作业的最佳方法是将执行给定任务所需的一组其他组件关联为一个容器。作业的主要组件是作业步骤、计划、警报和通知。
创建作业时,将为该作业分配所有者。如级别1所述,默认情况下,所有者将是创建作业的用户(在Transact-SQL中,通过sp_add_job system存储过程或使用SQL Server Management Studio)。SQL Server代理的大多数功能都假定你是sysadmin服务器角色成员。如果是,那么你或任何其他sysadmin角色成员可以在创建作业后对其进行修改。如果希望非sysadmin角色成员能够修改作业,则应将作业所有者更改为该用户的登录名。请注意,sysadmin成员可以更改任何作业,而不考虑作业所有权。

作业步骤

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

2、操作系统(CmdExec)

3、PowerShell

4、各种复制任务

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

6、SQL Server Analysis Services(SSAS)查询(MDX)

7、SQL Server集成服务(SSIS)包(SQL Server 2000中的DTS包)

8、Transact-SQL脚本(T-SQL)

让我们创建一个作业和必要的作业步骤来备份主数据库。创建一个新的作业,我称之为“备份主机”,如图1所示。
图1–创建新作业
现在单击“步骤”选项卡查看作业步骤,然后单击“新建…”打开“新建作业步骤”对话框(图2)。
图2–创建新的作业步骤
在开始备份之前,我已经完成了此工作中的步骤,以对master数据库执行完整性检查。我本可以一步完成所有的工作,但我想向你展示各个步骤之间的工作流程。我给了我的步骤名称“检查master的db完整性”,并将类型设置为Transact-SQL。数据库上下文是master。我在文本框中输入了一个简单的命令:

DBCC检查数据库
对此对话框进行了一些解释。类型下拉列表是选择SQL Server代理子系统的位置。可能的子系统如下所述。Transact-SQL作业步骤没有安全代理帐户,因此该作业步骤将在作业所有者的上下文中运行。安全代理帐户使作业步骤能够与其他用户的安全上下文一起运行,并且通常用于不属于sysadmin角色成员的作业。
你选择的作业子系统将更改对话框其余部分的内容。对于Transact-SQL作业步骤,提供了一个简单的文本框,供你键入Transact-SQL,正如我在这里所做的。每个作业步骤可能有一个与之关联的不同子系统。
接下来,单击新作业步骤的高级选项卡。你将看到如图3所示的屏幕。“成功时”操作定义成功完成作业步骤后所发生的操作。默认选项是转到下一步,也就是说,如果一个作业中有多个步骤,而这个步骤有效,则执行下一步。如果单击下拉列表,你将看到其他选项,包括退出作业(发出成功或失败通知),或跳到其他步骤。请注意,最后一个选项,跳到另一个步骤,在你至少完成工作中的第二个步骤之前不会出现。
图3–新作业步骤高级选项
如果某个步骤由于某种原因失败,你可以选择重试作业步骤的尝试次数。还可以指定每次尝试成功完成作业步骤之间的延迟(分钟)。下面是失败操作(即作业步骤无法完成或以错误代码结束)。这些选项与成功时相同,具有不同的默认值(如你所期望的)。
因为这是Transact-SQL作业步骤类型,所以可以将Transact-SQL命令的任何输出记录到输出文件中(就像sqlcmd中的-o选项)。你还可以将结果记录到一个表中(msdb中的sysjobstepslogs表)。
单击“确定”,然后单击“新建”以向作业添加第二步。假设步骤1没有生成错误,则下一个作业将备份master数据库。下面是来自我的系统的命令(如图4所示):
将数据库[master]备份到磁盘=

N’C:\Program Files\Microsoft SQL Server\mssql10_50.mssql server\mssql\backup\master.bak’

带初始化
图4–备份master数据库的第二个作业步骤
由于这是作业的结束,请单击“高级”选项卡,并将“成功”操作选择为“退出报告成功的作业”。也就是说,你应该可以单击“确定”,然后查看完成的作业步骤,如图5所示。
图5–完成的作业
现在单击“确定”完成定义作业,并运行作业。当你单击以运行作业时,请注意,因为现在有多个步骤询问你要使用哪个步骤启动作业。从第一步运行作业(如图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子系统允许你运行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代理作业步骤是作业内容的核心。有许多不同的子系统可用,每一个子系统都为你提供不同的功能。在这个步骤的下一步中,我将研究增强作业步骤安全性的代理功能,以及用于AnalysisServices的其余SQL代理子系统。

本文是SQL Server代理的父级阶梯的一部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值