第二篇 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所示):
图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代理作业步骤是作业的核心。许多不同的子系统是可用的,每个给你不同的功能。在下一篇,我会检查作业步骤上代理能力以提高安全,以及剩余的分析服务子系统。

时间: 2024-08-02 10:58:14

第二篇 SQL Server代理作业步骤和子系统的相关文章

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

本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这系列的前几篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作业活动监视器.作业活动监视器是系统管理工具来运行工作,查看作业历史记录,并启用/禁用作业.本文同样会回顾一些作业活动监视器调用的存储过程,你可以直接调用过程做你自己的自定义任务监控.SQL Server代理作业活动监视器SQL Server代理作业活动监视器的主要机制是监视作业运行,以及查看代理已运行

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

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

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

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

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

本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这系列的前几篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序.你最好的选择是使用PowerShell的子系统运行PowerShell脚本.PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题.在这一篇,你会深入到SQL Server代理安全.安全是个令人困惑的话题,它值得一些明确的考虑.这系列有两个不同方面

第四篇 SQL Server代理配置数据库邮件

本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Server代理同样提供创建警报,能够以通知的形式将消息发送给设定的操作员.这些通知可以通过数据库邮件发送,数据库邮件是内置在SQL Server和SQL Server代理能够发送和接收电子邮件.在这一篇,你将学习如何配置数据库邮件发送和接收操作,以及一些基本的数据库邮件故障排除步骤.数据库邮件的简要概述在S

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

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

第八篇 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 2008复制数据库时发生执行SQL Server代理作业错误

1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业错误”,点击查看详细会提示“作业失败 有关详细信息,请查看目标服务器上的事件日志”. 2. 处理方案 发生这种情况的一般原因是目标服务器的SQL SERVER代理服务的权限过低.更改代理服务权限为LocalSystem账户即可. A. 开始–程序–SQL SERVER 配置管理器 B. 点击左侧“S

第一篇 SQL Server代理概述

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