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


SQL Server代理作业由一系列的一个或多个作业步骤组成。一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作)。每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业。本篇主要关注组成SQL Server代理的作业步骤和子系统。
快速回顾作业
理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中。作业最主要的组件有作业步骤、计划、警告和通知。
当创建作业时,一个所有者会被分配给这个作业。第一篇中提到,创建作业的用户默认是作业的所有者(无论是通过sp_add_job系统存储过程创建,还是通过SSMS创建)。大部分情况下SQL Server代理,假设你是一个sysadmin服务器角色的成员。如果你是,那么你或任何其他sysadmin角色成员可以修改作业。如果你想要一个非sysadmin角色的成员能够修改作业,那么你应该更改作业的所有者成对应用户。注意系统管理员成员可以更改任何作业,无论作业所有者。
作业步骤
如第一篇所述,一个SQL Server代理作业至少包含一个步骤。当大多数人说作业能完成一些工作时,实际意味是一个作业步骤。作业步骤是根据需求操作定义的,每个作业步骤将由下列子系统执行:
->ActiveX 脚本
->操作系统(CMDExec)
->PowerShell
->复制系列任务
->SQL Server Analysis Services (SSAS) 命令
->SQL Server Analysis Services (SSAS) 查询
->SQL Server Integration Services (SSIS) 包
->Transact-SQL 脚本 (T-SQL)
让我们创建一个作业,新建作业步骤用来备份master数据库。创建一个新作业-Backup Master,如图2.1所示。

图2.1 创建一个新作业
点击步骤->新建,看到新建作业步骤对话框(图2.2)

图2.2 创建一个作业步骤
我已经填写了这个作业的步骤,在我们备份master数据库前先执行完整性检查。我原本可以在一个步骤中完成所做的一切,但要告诉你的步骤之间的作业流程。我给这个步骤取名“检查Master数据库完整性”,并设置类型为T-SQL,数据库是mater,命令文本框DBCC CHECKDB
这个对话框的一些解释:在类型的下拉列表可以选择SQL Server代理子系统。子系统将在下面描述。对于选择Transact-SQL类型的作业步骤是没有安全代理帐户的,因此作业步骤将在作业所有者的上下文运行。安全代理帐户使作业步骤可以运行一个不同的用户的安全上下文,通常用于作业所有者是非sysadmin角色成员。
你所选择的作业子系统,将改变其余的对话内容。对于Transact-SQL作业步骤,一个简单的文本框提供键入你所需的SQL语句。每一个作业步骤可能会有一个不同的子系统与之关联。
接着,在作业步骤属性,点击高级选项卡。你会看到图2.3所示的对话框。成功时要执行的操作(定义作业步骤成功完成时会做的操作)。默认选项是转到下一步,意味着如果在作业中有多个步骤,这个步骤完成,执行下一步。如果你点击下拉菜单,你会看到其他选项–包括退出作业(无论成功或失败通知),或跳到另一个步骤。请注意最后一个选项,跳到另一个步骤,不会出现直到你作业中至少有两个步骤。

图2.3 作业步骤高级选项
如果一个步骤因为某种原因而失败,你可以设置作业步骤重试次数。你也可以指定每次重试间隔(分钟)。下面是失败时要执行的操作(例如作业步骤无法完成或出现错误代码)。下拉选项和成功时是一样的,但是默认选项不一样(如你所期望的)。
因为这是一个Transact-SQL类型的作业步骤,你可以用SQL命令输出一个输出文件(就像在sqlcmd -O选项)。你也可以记录结果到一张表里(msdb中sysjobstepslogs表)。
单击确定,然后单击添加第二个步骤。如果步骤1中没有产生错误,下一个作业步骤备份master数据库。这是我的备份命令(如图2.4所示):

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


图2.4 第二个作业步骤
因为这是作业的结尾,单击“高级”选项卡并选择成功的操作“退出报告成功的作业”。你可以点击确定,看完成的作业步骤如图2.5所示

图2.5 完成作业
现在单击确定完成作业的创建,运行作业。当你点击运行作业,因为这个作业有多个步骤,因此会弹出一个对话框让你选择从哪个步骤启动作业。从第一步启动作业(如图2.6所示),注意观察作业流程在第一步成功后,移动到作业的第二步/最后一步。

图2.6 启动作业(选择步骤1)
一旦成功完成,作业标记为成功然后退出。
作业子系统
有七个主要的作业子系统是我们会使用到的。这个数字不包括复制子系统作为他们的一个特例,通常这些作业是由复制组件而不是由DBA创建。我们将推迟下一章节讨论三个分析服务子系统,因为他们有一些独特的事项。
Transact-SQL 脚本 (T-SQL)
Transact-SQL子系统是非常直接的,同时可能是作业步骤中最常见的类型。它允许你运行Transact-SQL(但不是sqlcmd扩展SQL SQL服务器处理)处理对这个SQL Server代理实例关联的本地实例。需要注意的是不同于分析服务子系统,你只能连接到本地SQL Server实例。同时注意T-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 Server代理作业步骤和子系统的更多相关文章

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

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

  2. 第七篇 SQL Server代理作业活动监视器

    本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...

  3. 【译】第七篇 SQL Server代理作业活动监视器

    本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...

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

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

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

随机推荐

  1. 约跑APP测试报告

    用户需求规格说明书URL:http://www.cnblogs.com/liquan/p/6071804.html 组长博客URL:http://www.cnblogs.com/liquan/ 代码g ...

  2. Java静态块学习

    静态块是类里面的构造器,对象有构造器那么类也有构造器,类里面的构造器叫做初始化方法.也就是new一个对象他会经过一个构造器.加载一个类,也有被初始化的一片代码,这个就称之为静态块.一个类里面可以有很多 ...

  3. HTTP 笔记与总结(1 )Telnet 分别发送 HTTP GET 和 HTTP POST 请求

    简化的说: WebService = HTTP 协议 + XML Rest = HTTP 协议 + Json 各种 API = HTTP 协议 + XML / Json 来实现 HTTP 请求信息格式 ...

  4. PHP 错误与异常 笔记与总结(2)错误(Fatal)

    (接上) d.Fatal error 致命级别的错误 —— 程序终止执行 [例7]调用一个未定义的方法 <?php echo md6('dee'); echo 'continue'; 输出: ( ...

  5. Android开发的七大环节

    Android开发的七大环节   浏览:25 发布日期:2015/10/27 分类:职场感悟 一个完整的Android 开发流程主要包括策划.软件.交互.视觉.测试.运营维护这七大环节,其中的每一个环 ...

  6. 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

    [军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的   之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...

  7. LR中获取当前系统时间方法

    方法一:使用loadrunner的参数化获取当前时间使用lr的参数化,非常方便,对lr熟悉的各位朋友也能马上上手,时间格式也有很多,可以自由选择.步骤:1.将复制给aa的值参数化2.选中abc,使用右 ...

  8. 拼写纠正 Artificial Intelligence: A Modern Approach

    Artificial Intelligence: A Modern Approach http://mindhacks.cn/2008/09/21/the-magical-bayesian-metho ...

  9. java 使用cookie记录用户上一次访问的时间 记住 用户的 登录名

    package cn.itcast.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.D ...

  10. ubuntu 64bit arm-linux-gcc: No such file or directory 解决

    通过下面这个解决 ubuntu 64bit  arm-linux-gcc: No such file or directory 安装 sudo apt-get install lsb-core解决 h ...