SQL Server代理(2/12):作业步骤和子系统

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,我在文本框里输入了一个简单的命令:

1 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数据库。这里我系统里的命令:

1 BACKUP DATABASE [master] TO  DISK =
2 N‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak‘
3 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代理子系统剩下部分——分析服务。

时间: 2024-12-24 15:27:26

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

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQL Server代理作业活动监视器监视作业活动和查看作业历史.对于你的SQL Server代理作业进行实时监视和管理,作业活动管理器是个强大的工具.在这个系列的第8篇文章里,你会回顾SQL Server代理的另一个功能——运行操作系统命令行,在SQL Server外围环境运行程序.一些程序是命令行(

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和 SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Se

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代理账户, 要求用户必须明确授权可以在作业步骤使用代理凭据.在这一篇,你将检查维护计划.维护计划是用来执行各种任务来优化你的数据库,包括备份.重建和/或重整 索引.更新统计.维护计划会创建作业.这一篇我们将查看维护

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在SQL Server代理作业步骤里启动外部程序.你可以使用过时的ActiveX系统,从虚拟命令提示符里运行批处理命令,或甚至启动你自己的程序.你的最佳选项是使用PowerShell子系统来运行PowerShell脚本.PowerShell脚本会允许你操纵系统或SQL Server角度的一切.在这篇文章

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL Server代理是由一系列的作业步骤组成,每个步骤是不同类型将要进行的工作.如果你在第4篇所见,SQL Server代理也提供使用数据库邮件发送提醒的能力.如果出现问题,不管怎样, 你必须去查看下数据库邮件错误日志.在这篇文章里,你会学到如何理解和查看SQL Server错误日志的所有相关知识.你会

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

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

第一篇 SQL Server代理概述

本系列文章来源于sqlservercentral,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Server代理的核心是运行批量作业的能力.“批量”可以简单的理解成“一系列的动作”,经常是TSQL脚本.它们可以以作业的形式在特定的调度运行,这个调度你可以选择在只有少量用户访问系统的时间点/段.换而言之,可以使用SQL Server代理排定批量作业.批量作业可以是平常的T-SQL任务,也可以是运行于多个

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

本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这系列的前几篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Server代理作业上,作业活动监视器是一个很好的工具.第八篇,你会看到SQL Server代理的另一个功能——the ability to shell out to the operating system and run programs outside of the SQL Server enviro

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

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.