本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文。
正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行。每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤。在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理。你也会接触作业步骤安全和作业子系统的更多细节。
SQL Server代理步骤
如第二篇所述,SQL Server代理作业包含一个或多个作业步骤。每一个作业步骤是一个完全独立的操作,对于错误控制、日志和工作流有自身的逻辑。当一个作业包括多个步骤,理解作业中的工作流可能会出现新的问题。没有作业步骤的作业不会有任何实际操作(仅有少量的警告)。
SQL Server代理作业步骤工作流
为了检测作业步骤和它们的工作流,在SSMS中创建一个新作业。SQL Server代理下右击作业,选择新建作业。在常规页面,给一个作业名称(本篇中使用"Steps Example")。选择步骤页面,然后点击"新建"按钮创建第一个作业步骤。出现新建作业步骤对话框,如图6.1所示
图6.1 新建作业步骤
给一个步骤名称(本例"Step1"),选择类型,也就是作业子系统(我们保持默认T-SQL)。键入一句简单的命令,如select * from sys.tables。点击"分析"以验证你键入有效的T-SQL,你会看到图6.2的对话框。如果存在错误,将看到图6.3的结果。虽然错误看起来复杂,实际错误是在对话框的底部,有语法错误。你可以点击左起的第三个按钮来获得更多的技术细节,但这只会给SMO.net网络错误诊断,没有额外的帮助。
图6.2 成功分析命令
图6.3 分析命令失败
一旦通过命令分析,点击高级页面,你将看到图6.4的对话框
图6.4 作业步骤高级选项页面
作业步骤中的高级页面是SQL Server代理中工作流最多的地方。你必须选择成功时要执行的操作,还有失败时要执行的操作。作业步骤成功时,你有三个选择:
->转到下一步
这是默认的行为。如果作业步骤一切正常,继续下一步。如果这是作业的最后一步,退出作业报告步骤的累积结果(如果某个步骤失败但工作流继续,还是报告失败)。
->退出报告成功的作业
如果这一步成功,退出作业立即报告它成功完成。例如,如果作业是由SQL Server代理警报执行,修复可能需要多个作业步骤,如果前面的步骤完成,你可以选择这个选项来退出并报告自动修复完成。
->退出报告失败的作业
如果因为某些原因你要退出作业并报告作业失败(例如有一个错误的测试条件),你可以选择这个选项。通常应该有类似的作业警报设置为任何必要的后续。
接下来,你可以选择作业失败后重试作业步骤(不报错误)。例如,如果你知道一些阻塞可能会导致你的作业步骤失败,你可以指定步骤尝试2次,一次一分钟(重试次数:2,重试间隔(分钟):1)。
失败时要执行的操作,和上面所述的成功操作有同样的选择,但默认是退出报告失败作业。
因为这个作业是T-SQL类型,你可以指定一个输出文件存储查询的结果。你可能还会勾选”将输出追加到现有文件”,这样你就不会失去以前的结果,但是你需要创建一个进程定期截断文件,那样它就不会消耗你所有的磁盘空间。或者,你可以将查询结果保存到数据库的一个表中。第三个选项,在历史记录中包含步骤输出,将存储在msdb.dbo.sysjobhistory(原文说保存在msdb.dbo.sysjobstepslogs,但查看数据表中没记录)。忽视“作为以下用户运行”选项,我们将会在后面看到。
单击“确定”,你现在添加一个作业步骤。单击“确定”,你现在有了一个作业。重新打开“Steps Example”作业(即右键点击作业菜单选择属性),浏览到作业步骤,点击新建,添加第二个作业步骤。在这一步中,称之为“Step2”,作业类型选择“PowerShell”,然后输入以下PowerShell脚本来看看服务器操作系统属性(图6.5)。
gwmi Win32_OperatingSystem | Select OSArchitecture,Caption
图6.5 添加一个PowerShell类型的作业步骤
这个作业步骤点击高级页面并选中“在历史记录中包含步骤输出”,因此你可以看到PowerShell脚本运行和查看结果。单击确定,然后再次单击OK,你会看到图6.6。因为作业中Step1在运行后,退出报告作业成功,那么step2永远不会运行。
图6.6 警告作业流逻辑
选择"否",导航到第一个作业步骤的高级页面,更改"成功时要执行的操作"到“转到下一步”。你可能已经注意到一些事情。第一,你没有选择"退出报告成功的作业"选项-这是怎么发生的呢?当你创建了第一个作业步骤,然后创建作业,只有一个单一的作业步骤,所以SSMS帮你退出并更改了成功的操作。当你在添加第二步骤,你需要手动调整业务流。每次增加额外的步骤,都需要返回和编辑作业。
第二件让你注意的事情是,在这个对话框你也可以直接导航到各个步骤(6.7)。你不必转到下一步。你可以想象一个有10步的作业,并根据你的作业步骤的结果,跳到一个不同的步骤。这样你可以在作业中创建更复杂的工作流程。
图6.7 修改步骤1的工作流转到下一步
点击确定,那么在作业运行的时候,第二个步骤就会被执行了。
现在,运行作业(SSMS中右键单击作业并选择“开始作业步骤…”,然后单击“开始”。一旦工作成功完成后,再次右键单击作业选择“查看历史记录”,你可以在历史作业步骤中看到输出结果(如图6.8所示)。
图6.8 SQL Server代理作业历史日志查看步骤记录
SQL Server代理作业步骤的安全
当你创建步骤的类型为PowerShell,你可能已经注意到,作业步骤的常规页面的"运行身份"选项是可用的,“SQL Server代理服务帐户”被选。当T-SQL作业连接到SQL Server,它作为SQL Server代理服务的一部分,并将用服务帐户运行。当其他子系统的运行作业(如PowerShell、操作系统(CmdExec)、ActiveX)他们实际上在Windowsw创建一个单独的进程,然后连接到SQL Server或操作系统。这个过程需要有一个安全上下文运行在Windows,你可以在"运行身份"选项选择安全上下文。在本系列文章的第十篇我们将检查代理帐户,并详述如何为作业步骤选择不同的安全上下文。
你可能会问,T-SQL类型步骤的高级选项页面下的"作为以下用户运行"。如果一个SQL Server代理作业的所有者是sysadmin服务器角色的成员,那么T-SQL作业步骤可以运行在不同的数据库用户的上下文,你可以在这里选择用户。如果作业的所有者不是sysadmin服务器角色的成员,此选项将不可用,作业步骤在作业的所有者的安全上下文运行。此选项仅可用于T-SQL子系统,代理帐户必须用于其他作业子系统。
下一篇
SQL Server代理作业步骤可以在单一的作业提供复杂的工作流。你可以转到前面,或跳过作业步骤,或退出作业在成功/失败时。每个作业步骤相对其他步骤是一种完全不同的作业项目,对作业步骤日志结果有多种选择。
现在,你可以创建有趣的作业然后运行,下一步将监视作业正在运行和已运行的历史记录。因此,我们下一篇将查看作业活动监视器。
第六篇 SQL Server代理深入作业步骤工作流的更多相关文章
-
【译】第六篇 SQL Server代理深入作业步骤工作流
本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
-
第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
-
【译】第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
-
第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
-
【译】第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
-
第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
-
【译】第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
-
第十篇 SQL Server代理使用代理帐户
本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...
-
第八篇 SQL Server代理使用外部程序
本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这一系列的上一篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Ser ...
随机推荐
-
SSH框架的配置
^_^阅读本文前请先浏览 : http://www.cnblogs.com/LiJinfu/p/5842890.html 步骤 : 一.编写web.xml配置文件 该文件路径在项目文件下的WebCon ...
-
DOCKER脚本一例---快速建立大批测试机
这个会由一系列的脚本构成,比如: 系统重启后,如何快速恢复服务,如何建立网桥(也可一次写入),如何在新系统上快速部署. ADDBRIDGE #!/bin/sh br_name=br100 brctl ...
-
12.java.lang.NoSuchMethodException
java.lang.NoSuchMethodException 方法不存在异常 当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常
-
如何让Spring MVC接收的参数可以转换为java对象
场景: web.xml中增加了一个DispatcherServlet配置,并在同级目录下添加了**-servlert.xml文件,搭建起了一个spring mvc的restful访问接口. 问题描述: ...
-
H5页面转成图片并下载到本地
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
-
hdu2036
题解: 求多边形面积 分成很多块三角形求就可以了 凹的也是支持的 代码: #include <bits/stdc++.h> using namespace std; #define rin ...
-
Socket网络编程--小小网盘程序(5)
各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中的文件列表,还有删除用户在服务器中的文件,最后的可以共享文件给好友. 列出用户在服务器中的文件 ...
-
bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...
-
smtp ssl模式邮件发送与附件添加
#!/usr/bin/python3 import os import smtplib from email.mime.text import MIMEText from email.mime.mul ...
-
ZigBee cc2530芯片学习 error记录(1)
ZigBee cc2530芯片学习 error记录 Error[e46]: Undefined external "LcdInit" referred in main( xxx ...