第二篇 SQL Server代理作业步骤和子系统
本篇文章是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所示):
BACKUP DATABASE [master] TO DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak'
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代理作业步骤和子系统的更多相关文章
- 【译】第二篇 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代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
- 第六篇 SQL Server代理深入作业步骤工作流
本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
- 【译】第六篇 SQL Server代理深入作业步骤工作流
本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
- 第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
- 【译】第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
随机推荐
- Java实战equals()与hashCode()
一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...
- C3P0连接池问题,APPARENT DEADLOCK!!! Creating emergency..... [问题点数:20分,结帖人lovekong]
采用c3p0连接池,每次调试程序,第一次访问时(Tomcat服务器重启后再访问)都会出现以下错误,然后连接库需要很长时间,最终是可以连上的,之后再访问就没问题了,请高手们会诊一下,希望能帮小弟解决此问 ...
- gitlab & gerrit & git & repo & jenkins
Omnibus GitLab documentation(中文安装说明) 在自己的服务器上部署 GitLab 社区版->较为全面 GIT & REPO & GERRIT (三) ...
- 获取checkbox复选框的值
<title>CheckBox</title> <script type = "text/javascript"> doGetVal: func ...
- DOM下的节点属性和操作小结
属性: 1 .nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text.nodeName,是只读的. 2 .nodeType 值:1,元素节点:2,属性节点:3,文 ...
- Android获取手机制作商,系统版本等
在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...
- 【转】Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax
http://897371388.iteye.com/blog/1975351 大致思路也就是下面,由于最近在学Laravel也在学Angularjs,加上之前做的项目用到了d3. 原来的方案如下: ...
- uzqp文件的加解密
帮朋友做的,根据python版本翻译成的java版本,记录一下代码 import java.io.File; import java.io.FileInputStream; import java.i ...
- Android性能优化典范(转)
转载自oschina. 2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍 ...
- asp.net跳转页面的三种方法比较(转)
2006-10-20 14:32 [小 大] 来源: 博客园 评论: 0分享至: 百度权重查询 词库网 网站监控 服务器监控 SEO监控 手机游戏 iPhone游戏 今天老师讲了三种跳转页面的方法,现 ...