SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。


SQL Server代理作业有一系列的一个或多个作业步骤组成。一个作业步骤会分配给特定的作业子系统,用来标识将要进行的作业步骤工作种类。每个作业步骤在各自安全上下文运行,尽管每个作业有可以决定谁可以修改作业的拥有者。这篇文章会聚焦组成SQL Server代理作业的作业步骤和子系统。

作业的快速回顾

认为SQL Server代理作业的最好方式是关联一系列需要进行指定任务的组件的容器。作业的主要组件是作业步骤,计划,警报和通知。

当作业被创建时,拥有者会分配给作业。如第一篇提到的,默认的拥有者会是创建作业的用户(不管使用T-SQL,通过sp_add_job系统存储过程或使用SSMS)。SQL Server代理的大部分功能假设你是sysadmin服务器角色成员。如果是的话,一旦作业创建后,那么你或任何其他sysadmin服务器角色成员可以修改作业。如果你想非sysadmin服务器角色成员可以修改作业,那么你应该修改作业拥有者为登录的用户。注意sysadmin成员可以修改任何作业,不管作业拥有者是谁。

作业步骤

如第一篇提到的,SQL Server代理里的作业至少要有一个作业步骤组成。当大多数人想SQL Server代理进行一些工作时,他们真正的意思是作业步骤。作业步骤是你定义的想要进行的行动类型,包括一下能运行的作业子系统:

  • ActiveX
  • 操作系统(CMD的运行)
  • PowerShell
  • 各种复制任务
  • SQL Server分析服务(SSAS)命令(例如XML/A)
  • SQL Server分析服务(SSAS)查询(MDX)
  • SQL Server集成服务(SSIS)包(SQL Server 2000li de DTS包)
  • T-SQL脚本

我们来创建一个作业,至少需要一个作业步骤,备份Mater数据库。创建一个新的作业,如插图1所示,我命名它为"备份Master数据库"。

插图1——创建新的作业

现在点击【步骤】标签来查看作业步骤,点击【新建】弹出【新建作业步骤】对话框(插图2)。

在我们进行备份前,我在这个作业步骤里进行master数据库的完整性检查。我可以在一个步骤里完成所有操作,但这里我想向你展示下步骤间的作业流。我取我的作业名称为“检查Mater数据库的完整性”,类型设置为T-SQL。数据库上下文是mater,我在文本框里输入了一个简单的命令:

 DBCC CHECKDB

插图2——创建新的作业步骤

对这个对话框做一些简单解释。下拉框类型是用来选择SQL Server代理子系统。可选的子系统在下面会解释。对于T-SQL作业步骤没有安全代理账号,因此作业步骤会在作业拥有者的上下文里运行。安全代理账号可以让作业步骤以不同用户安全上下文运行,通常给作业使用而不是sysadmin组成员。

你选择的作业子系统会改变对话框的剩余内容。对于T-SQL的作业步骤,一个简单的文本框会给你输入你的T-SQL,如我这里所做的。每个作业步骤会有不同相关的子系统。

接下来,点击作业步骤里的【高级】。你会看到如插图3所示的界面。【成功要执行的步骤】定义一旦作业步骤成功执行将发什么的事。默认选项是【转到下一步】,意味着如果作业里有多个作业步骤,这步完成后,执行下一步。如果点击下拉框,你会看到其他选项——包括现存的作业(成功或失败的提醒),或跳转下另一步。注意这个最后选项,跳到另一个步骤,不会显示,知道作业里你有第二个步骤。

插图3——新建作业步骤高级选项

如果作业因某些原因失败,你可以选择作业步骤的【重试次数】。你也可以指定每个尝试成功完成作业步骤间的延迟(分钟为单位)。下面是失败的操作(例如作业不能完成或在错误代码里结束)。这个选项和成功的操作一样,有不同的默认值(如你所预料)。

因为这是个T-SQL的作业步骤类型,你可以有来自T-SQL命令记录的命令输出(就和sql命令里 -o参数)。你也可以将结果写入表(MSDB里的sysjobsteps表)。

点击【确定】,点击【新建】增加第2个作业到作业。假设步骤1没有生成错误,这个下一步作业步骤备份master数据库。这里我系统里的命令:

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

插图4——备份master数据库的第2个步骤

因为这个事作业的结束,点击【高级】,选择【成功要执行的操作】为:退出报告成功的作业。好了——你可以点击【确定】了,完成后的作业步骤如插图5所示。

插图5——完成的作业。

选择点击【确定】完成作业定义,并运行作业。当你点击运行作业时,注意因为有多个步骤,你会被问从哪个步骤开始你的祖业。从第一个步骤来运行作业(如插图6所示),围观下作业流,第1步成功执行后然后移到的第2步——最后一步作业。

插图6——作业开始步骤选择(选择第1步)

一谈成功完成,作业标记为成功并退出(如插图7所示)

插图7——作业成功执行

作业子系统

你会用到7个主要作业子系统。这个数字不包含复制子系统,因为它们情况特殊,典型的这些作业步骤和作业由复制组件创建而不是DBA。对于下片文章,我们会延迟3个分析服务子系统的讨论,因为它们有几个独特的考虑。

T-SQL脚本

T-SQL子系统非常直接,是你最常创建的作业步骤。它允许你对于本地SQL Server实例运行T-SQL,当然SQL Server代理也是本地和它关联的。注意不像分析服务子系统,你只能连接到本地SQL Server实例。对于T-SQL,没有代理能力,因此对于T-SQL的作业步骤只在作业拥有者的安全上下文里运行。

ActiveX脚本

ActiveX子系统允许你运行VBScript,Jscript,或其他自定义的脚本(理论上)。脚本默认在SQL Server代理服务账号的安全上下文里运行。如果你擅长VBSccript,这是个方便的子系统,但这个子系统已经从SQL Server 2008剥离,你应该使用PowerShell来替代。

操作系统(cmd命令执行)

CmdExec子系统允许你运行操作系统命令(如同你打开命令提示行)。命令会在SQL Server代理服务账号的安全上下文里运行。这里要记住的关键是没有用户可以点击或接受任何提示符,因此请确保你的脚本运行没有用户干预。

PowerShell

PowerShell子系统允许你Windows PowerShell 1.0或2.0兼容的脚本。如其他脚本子系统,甲苯默认在SQL Server代理服务账号的安全上下文里运行。PowerShell非常强大,你应该认真学习并掌握它。PowerShell允许连接到远程系统,因此这是绕开T-SQL子系统的限制,可以连接到远程SQL Server实例。

下篇预告

如你所见,SQL Server代理作业步骤是作业内容的核心问题。有很多不同的子系统,每个提供你不同的能力。在这个系列的下一步,我会在作业步骤上检查加强安全的代理能力,还有SQL代理子系统剩下部分——分析服务。

原文链接:http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/

SQL Server代理(2/12):作业步骤和子系统的更多相关文章

  1. SQL Server代理(7/12):作业活动监视器

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前几篇文章里,你创建配置了SQ ...

  2. SQL Server代理(8/12):使用SQL Server代理外部程序

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...

  3. SQL Server代理(1/12):配置和概况

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理是SQL Serv ...

  4. SQL Server代理(6/12):作业里的工作流——深入作业步骤

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这里系列的前几篇文章所见,SQL ...

  5. SQL Server代理(10/12):使用代理账号运行作业

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...

  6. SQL Server代理(11/12):维护计划作业

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模 ...

  7. SQL Server代理(9/12):理解作业和安全

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在S ...

  8. SQL Server代理(5/12):理解SQL代理错误日志

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...

  9. SQL Server代理(4/12):配置数据库邮件

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在以前的文章里我们看到,SQL Serve ...

随机推荐

  1. ASP.NET 4.5.256 has not been registered on the Web server. You need to manually configure your Web server for ASP.NET 4.5.256 in order for your site to run correctly

    Microsoft .NET Framework 4.6安装后,用户可能会在使用Microsoft Visual Studio 创建(或打开现有项目时)网站.或Windows Azure项目时遇到下面 ...

  2. 千万用户级别应用系统背后的SOA组件化容器

    背景 在<我们的应用系统是如何支撑千万级别用户的>随笔中已经从“宏观”角度去介绍了整个应用系统的布局.组件化是整个系统由头到尾都始终坚持的一个设计原则,其中“SOA组件化容器”也是我们应用 ...

  3. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  4. C# WPF 让你的窗口始终钉在桌面上

    IntPtr hWnd = new WindowInteropHelper(Application.Current.MainWindow).Handle; IntPtr hWndProgMan = F ...

  5. 切换到ZSH以后遇到的坑

    了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH.具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把.个人主要是被ZSH强大的自动补全吸引过来的.虽然bash装了bash-co ...

  6. 移动APP的自动化测试

    开发移动应用,最耗时耗力的就是手动测试APP的每个功能点或修复bug.有人就会提议App的业务逻辑可以使用nUnit或xUnit测试单元来辅助完成.那用户界面要如何测试?众所周知,移动设备多种多样,数 ...

  7. C#学习系列-out与ref的区别

    参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9839&ct=31056 如 ...

  8. hadoop安装遇到的各种异常及解决办法

    hadoop安装遇到的各种异常及解决办法 异常一: 2014-03-13 11:10:23,665 INFO org.apache.hadoop.ipc.Client: Retrying connec ...

  9. React(二)实现双向数据流

    <div id="app"></div> <script src="bower_components/react/react.min.js& ...

  10. Git使用命令

    git init 初始化仓库 git init --bare 初始化一个裸仓库 git branch 查看本地分支 git branch -a 查看全部分支 git remote 远程仓库管理 add ...