第六篇 SQL Server代理深入作业步骤工作流

时间:2022-09-01 07:50:59

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文


正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行。每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤。在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理。你也会接触作业步骤安全和作业子系统的更多细节。
SQL Server代理步骤
如第二篇所述,SQL Server代理作业包含一个或多个作业步骤。每一个作业步骤是一个完全独立的操作,对于错误控制、日志和工作流有自身的逻辑。当一个作业包括多个步骤,理解作业中的工作流可能会出现新的问题。没有作业步骤的作业不会有任何实际操作(仅有少量的警告)。
SQL Server代理作业步骤工作流
为了检测作业步骤和它们的工作流,在SSMS中创建一个新作业。SQL Server代理下右击作业,选择新建作业。在常规页面,给一个作业名称(本篇中使用"Steps Example")。选择步骤页面,然后点击"新建"按钮创建第一个作业步骤。出现新建作业步骤对话框,如图6.1所示
第六篇 SQL Server代理深入作业步骤工作流
图6.1 新建作业步骤
给一个步骤名称(本例"Step1"),选择类型,也就是作业子系统(我们保持默认T-SQL)。键入一句简单的命令,如select * from sys.tables。点击"分析"以验证你键入有效的T-SQL,你会看到图6.2的对话框。如果存在错误,将看到图6.3的结果。虽然错误看起来复杂,实际错误是在对话框的底部,有语法错误。你可以点击左起的第三个按钮来获得更多的技术细节,但这只会给SMO.net网络错误诊断,没有额外的帮助。
第六篇 SQL Server代理深入作业步骤工作流
图6.2 成功分析命令
第六篇 SQL Server代理深入作业步骤工作流
图6.3 分析命令失败
一旦通过命令分析,点击高级页面,你将看到图6.4的对话框
第六篇 SQL Server代理深入作业步骤工作流
图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
第六篇 SQL Server代理深入作业步骤工作流
图6.5 添加一个PowerShell类型的作业步骤
这个作业步骤点击高级页面并选中“在历史记录中包含步骤输出”,因此你可以看到PowerShell脚本运行和查看结果。单击确定,然后再次单击OK,你会看到图6.6。因为作业中Step1在运行后,退出报告作业成功,那么step2永远不会运行。
第六篇 SQL Server代理深入作业步骤工作流
图6.6 警告作业流逻辑
选择"否",导航到第一个作业步骤的高级页面,更改"成功时要执行的操作"到“转到下一步”。你可能已经注意到一些事情。第一,你没有选择"退出报告成功的作业"选项-这是怎么发生的呢?当你创建了第一个作业步骤,然后创建作业,只有一个单一的作业步骤,所以SSMS帮你退出并更改了成功的操作。当你在添加第二步骤,你需要手动调整业务流。每次增加额外的步骤,都需要返回和编辑作业。
第二件让你注意的事情是,在这个对话框你也可以直接导航到各个步骤(6.7)。你不必转到下一步。你可以想象一个有10步的作业,并根据你的作业步骤的结果,跳到一个不同的步骤。这样你可以在作业中创建更复杂的工作流程。
第六篇 SQL Server代理深入作业步骤工作流
图6.7 修改步骤1的工作流转到下一步
点击确定,那么在作业运行的时候,第二个步骤就会被执行了。
现在,运行作业(SSMS中右键单击作业并选择“开始作业步骤…”,然后单击“开始”。一旦工作成功完成后,再次右键单击作业选择“查看历史记录”,你可以在历史作业步骤中看到输出结果(如图6.8所示)。
第六篇 SQL Server代理深入作业步骤工作流
图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代理深入作业步骤工作流的更多相关文章

  1. 【译】第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  2. 第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  3. 【译】第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  4. 第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  5. 【译】第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  6. 第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  7. 【译】第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  8. 第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

  9. 第八篇 SQL Server代理使用外部程序

    本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这一系列的上一篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Ser ...

随机推荐

  1. SSH框架的配置

    ^_^阅读本文前请先浏览 : http://www.cnblogs.com/LiJinfu/p/5842890.html 步骤 : 一.编写web.xml配置文件 该文件路径在项目文件下的WebCon ...

  2. DOCKER脚本一例---快速建立大批测试机

    这个会由一系列的脚本构成,比如: 系统重启后,如何快速恢复服务,如何建立网桥(也可一次写入),如何在新系统上快速部署. ADDBRIDGE #!/bin/sh br_name=br100 brctl ...

  3. 12.java.lang.NoSuchMethodException

    java.lang.NoSuchMethodException 方法不存在异常 当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常

  4. 如何让Spring MVC接收的参数可以转换为java对象

    场景: web.xml中增加了一个DispatcherServlet配置,并在同级目录下添加了**-servlert.xml文件,搭建起了一个spring mvc的restful访问接口. 问题描述: ...

  5. H5页面转成图片并下载到本地

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. hdu2036

    题解: 求多边形面积 分成很多块三角形求就可以了 凹的也是支持的 代码: #include <bits/stdc++.h> using namespace std; #define rin ...

  7. Socket网络编程--小小网盘程序&lpar;5&rpar;

    各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中的文件列表,还有删除用户在服务器中的文件,最后的可以共享文件给好友. 列出用户在服务器中的文件 ...

  8. bzoj千题计划295:bzoj3140&colon; &lbrack;Hnoi2013&rsqb;消毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...

  9. smtp ssl模式邮件发送与附件添加

    #!/usr/bin/python3 import os import smtplib from email.mime.text import MIMEText from email.mime.mul ...

  10. ZigBee cc2530芯片学习 error记录&lpar;1&rpar;

    ZigBee cc2530芯片学习 error记录   Error[e46]: Undefined external "LcdInit" referred in main( xxx ...