创建作业步骤

作业步骤是作业对数据库或服务器执行的操作。每个作业必须至少有一个作业步骤。作业步骤可以为:

  • 可执行程序和操作系统命令。
  • Transact-SQL 语句,包括存储过程和扩展存储过程。
  • Microsoft ActiveX 脚本。
  • 复制任务。
  • Analysis Services 任务。
  • Integration Services 包。

每个作业步骤都在特定的安全上下文中运行。如果作业步骤指定一个代理,该作业步骤将在该代理凭据的安全上下文中运行。如果作业步骤没有指定代理,该作业步骤将在 SQL Server 代理服务帐户的上下文中运行。只有 sysadmin 固定服务器角色成员可以创建没有显式指定代理的作业。

由于作业步骤在特定的 Microsoft Windows 用户的上下文中运行,因此该用户必须具有执行作业步骤的权限,并能够进行所需的配置。例如,如果创建一个需要驱动器号或通用命名约定 (UNC) 路径的作业,则在测试任务时,可使用 Microsoft Windows 用户帐户来运行作业步骤。但是,运行作业步骤的 Windows 用户还必须具有所需的权限、驱动器号配置权限或对所需驱动器的访问权限。否则,作业步骤会失败。为了防止出现这种问题,请确保每个作业步骤的代理都具有该作业步骤所执行任务的必要权限。有关详细信息,请参阅 SQL Server 安全注意事项

作业步骤日志

SQL Server 代理可以将一些作业步骤的输出写入操作系统文件,也可以将其写入 msdb 数据库中的 sysjobstepslogs 表中。下列类型的作业步骤的输出可以写入以上两个目标位置:

  • 可执行程序和操作系统命令。
  • Transact-SQL 语句。
  • Analysis Services 任务。

只有作为 sysadmin 固定服务器角色成员的用户执行的作业步骤的输出可以写入操作系统文件。如果作业步骤由作为 msdb 数据库中 SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 等固定数据库角色成员的用户执行,则只能将这些作业步骤的输出写入 sysjobstepslogs 表。

删除作业或作业步骤时,会自动删除作业步骤日志。

ms187056.note(zh-cn,SQL.90).gif注意:
复制任务和 Integration Services 包作业步骤日志记录由它们各自的子系统处理。无法使用 SQL Server 代理来为这些类型的作业步骤配置作业步骤日志记录。

作为作业步骤的可执行程序和操作系统命令

可以将可执行程序和操作系统命令用作作业步骤。这些文件的扩展名可以是 .bat、.cmd、.com 或 .exe。

将可执行程序或操作系统命令用作作业步骤时,必须指定以下内容:

  • 命令成功完成时返回的进程退出代码。
  • 要执行的命令。若要执行操作系统命令,只需指定该命令本身。对于外部程序,这就是该程序的名称和用于该程序的参数,例如:C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe -e -q "sp_who"
    ms187056.note(zh-cn,SQL.90).gif注意:
    如果系统路径或执行作业步骤的用户的路径指定的目录中不包含此可执行程序,则必须提供可执行程序的完整路径。
使用可执行程序创建作业步骤
重置 SQL Server 代理权限

Transact-SQL 作业步骤

创建 Transact-SQL 作业步骤时,必须执行下列操作:

  • 确定要在其中运行作业的数据库。
  • 键入要执行的 Transact-SQL 语句。该语句可以调用存储过程,也可以调用扩展存储过程。

或者,可以将现有的 Transact-SQL 文件作为作业步骤的命令打开。

Transact-SQL 作业步骤不使用 SQL Server 代理的代理帐户。而是由作业步骤的所有者或 SQL Server 代理服务帐户(如果作业步骤的所有者是 sysadmin 固定服务器角色成员)运行作业步骤。sysadmin 固定服务器角色的成员还可以使用 sp_add_jobstep 存储过程的 database_user_name 参数来指定 Transact-SQL 作业步骤在其他用户的上下文中运行。有关详细信息,请参阅 sp_add_jobstep (Transact-SQL)

ms187056.note(zh-cn,SQL.90).gif注意:
一个 Transact-SQL 作业步骤可以包含多个批处理。Transact-SQL 作业步骤可以包含嵌入的 GO 命令。
创建 Transact-SQL 作业步骤
定义 Transact-SQL 作业步骤选项

ActiveX 脚本作业步骤

创建 ActiveX 脚本作业步骤时,必须执行下列操作:

  • 确定编写作业步骤所使用的脚本语言。
  • 编写 ActiveX 脚本。

还可以将现有的 ActiveX 脚本文件作为作业步骤的命令打开。另外,可以在外部编译 ActiveX 脚本命令(例如,使用 Microsoft Visual Basic),然后作为可执行程序运行。

当作业步骤命令是 ActiveX 脚本时,可以使用 SQLActiveScriptHost 对象将结果输出到作业步骤历史记录日志或创建 COM 对象。SQLActiveScriptHost 是一个全局对象,由 SQL Server 代理宿主系统引入到脚本命名空间中。该对象包含两个方法(PrintCreateObject)。下面的示例说明 ActiveX 脚本在 Visual Basic Scripting Edition (VBScript) 中是如何实现的。

' VBScript example for ActiveX Scripting job step

Sub main()
          
    ' Create a Smo.Server object. The object connects to the
    ' server on which the script is running.

    Set SmoServer = _
        CreateObject ("Microsoft.SqlServer.Management.Smo.Server")


    ' Check the number of active connections for AdventureWorks.
    
    ConnectionCount = _
        SmoServer.GetActiveDbConnectionCount("AdventureWorks")


    ' If there are active connections, close the connections.

    If ConnectionCount > 0 Then

        ' Log in the job history that this job step dropped
        ' connections to AdventureWorks.

        Print ("Dropping connections to AdventureWorks." + crLf )

        ' Drop all active connections to AdventureWorks.

        SmoServer.DropAllActiveDbConnections("AdventureWorks")

   End If

End Sub

下面的示例说明同一个任务在 JScript 中的实现过程:

// JScript example for ActiveX job step

function main() {

    // Create a Smo.Server object. The object connects to the
    // server on which the script is running.

    var SmoServer =
        CreateObject("Microsoft.SqlServer.Management.Smo.Server");

    // Check the number of active connections for AdventureWorks.

    var ConnectionCount =
        SmoServer.GetActiveDbConnectionCount("AdventureWorks");

    // If there are active connections, close the connections.

    if (ConnectionCount > 0) {

        // Log in the job history that this job step dropped
        // connections to AdventureWorks.

        Print ("Dropping connections to AdventureWorks.\n");

        // Drop all active connections to AdventureWorks.

        SmoServer.DropAllActiveDbConnections("AdventureWorks");
    }
}
创建 ActiveX 脚本作业步骤

复制作业步骤

使用复制创建发布和订阅时,默认情况下会创建复制作业。创建的作业类型由复制的类型(快照、事务或合并)和所用选项确定。

复制作业步骤将激活下列复制代理之一:

  • 快照代理(快照作业)
  • 日志读取器代理(LogReader 作业)
  • 分发代理(分发作业)
  • 合并代理(合并作业)
  • 队列读取器代理(QueueReader 作业)

设置复制后,您可以指定以下列三种方式之一运行复制代理:在 SQL Server 代理启动后连续运行、按需运行或按计划运行。有关复制代理的详细信息,请参阅复制代理概述

Analysis Services 作业步骤

SQL Server 代理支持两种不同类型的 Analysis Services 作业步骤:命令作业步骤和查询作业步骤。

Analysis Services 命令作业步骤

创建 Analysis Services 命令作业步骤时,必须执行下列操作:

  • 标识要运行作业步骤的数据库 OLAP 服务器。
  • 键入要执行的语句。该语句必须是支持 Analysis Services Execute 方法的 XML 语句。该语句不能包含完整的 SOAP 信封,也不能是支持 Analysis Services Discover 方法的 XML 语句。请注意,SQL Server Management Studio 支持完整的 SOAP 信封和 Discover 方法,而 SQL Server 代理作业步骤不支持。

有关适用于 Analysis Services 的 XML 的详细信息,请参阅XML for Analysis Overview (XMLA)

Analysis Services 查询作业步骤

创建 Analysis Services 查询作业步骤时,必须执行下列操作:

  • 标识要运行作业步骤的数据库 OLAP 服务器。
  • 键入要执行的语句。该语句必须是一个多维表达式 (MDX) 查询。

有关 MDX 的详细信息,请参阅 MDX 查询基础知识 (MDX)

Integration Services 包

创建 Integration Services 包作业步骤时,必须执行下列操作:

  • 确定包的源。
  • 确定包的位置。
  • 如果包需要配置文件,则确定配置文件。
  • 如果包需要命令文件,则确定命令文件。
  • 确定用于包的验证。例如,可以指定包必须签名,也可以指定包必须具有特定的包 ID。
  • 确定包的数据源。
  • 确定包的日志提供程序。
  • 指定运行包之前要设置的变量和值。
  • 确定执行选项。
  • 添加或修改命令行选项。

有关创建运行 Integration Services 包的作业步骤的详细信息,请参阅如何使用 SQL Server 代理作业运行包

请参阅

概念

创建作业

其他资源

sysjobstepslogs (Transact-SQL)
sp_add_job (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助