故障排除:使用 SQL Server 代理执行 SSIS 包(SQL Server 视频)

适用于:Microsoft SQL Server Integration Services

作者:Carla Sabotta,Microsoft Corporation

时长:00:12:12

大小:9.50 MB

类型:WMV

观看此视频

相关帮助主题:

从 SQL Server 代理作业步骤调用 SSIS 包时 SSIS 包不运行

dtexec 实用工具

如何创建包配置

设置包的保护级别

使用 Integration Services 角色

其他视频:

如何使用 SQL Server 代理自动执行 SSIS 包(SQL Server 视频)

视频摘要

此视频演示如何排除这样一个故障:在从 SQL Server 代理作业步骤调用 SQL Server Integration Services 包时,该包不运行。但该包在 SQL Server 代理外会成功运行。

视频脚本

视频时间戳 音频

00:00

您好,我叫 Carla Sabotta,负责编写 Microsoft SQL Server Integration Services 产品的文档。

在此视频中,我将会演示如何排除以下故障:在从 SQL Server 代理作业步骤调用 SQL Server Integration Services 包时该包不运行。但该包在 SQL Server 代理外会成功运行。

您将会了解到此问题的建议解决方法,包括创建代理帐户、修改包的 ProtectionLevel 属性设置、在包配置文件中保存敏感数据,以及在 SQL Server msdb 数据库中存储包。

如您所见,这个作业未能执行 Integration Services 包。

如果从 SQL Server 代理作业步骤调用一个包但该包未运行,可能有以下几种原因:

  • 将该包作为一个作业步骤运行的用户帐户并非原始包作者。
    -或-
  • 该用户帐户不具备进行连接或访问包外资源所必需的权限

如果从作业步骤调用包时所使用的用户帐户并非原始包作者,则包保护级别可能会禁止该包运行。其原因在于,该用户帐户或者无法对该包或包敏感数据进行解密,或者该用户帐户无法提供该包所缺失的敏感数据。

此类敏感数据的例子包括连接字符串的密码部分、标记为敏感的变量等。

对于与加密和敏感数据有关的问题,建议通过以下方法来解决。

01:53

第一种方法是在 SQL Server msdb 数据库中存储包,并且将保护级别设置为“依靠服务器存储和角色进行访问控制”(Rely on server storage and roles for access control)。通过 SQL Server Management Studio 中的 Integration Services 服务可以实现此操作。

数据库角色现在负责控制对该包的读写访问。您需要选择 Integration Services 固定数据库级别角色之一或用户定义的数据库级别角色,将其分配给该包的读取者角色。固定数据库级别角色是 db_ssisadmin、db_ssisoperator 和 db_ssisltduser。在这个演示中,我们将向该包分配 db_ssisadmin 角色。

如果您将某一固定数据库级别角色分配给该包,则从作业步骤调用该包的用户帐户必须是这个角色的成员。如果您将某一用户定义的角色分配给该包,则该用户帐户必须是固定数据库级别角色之一的成员,并且还必须是该用户定义的角色的成员。

03:59

第二种方法是在 Business Intelligence Development Studio 中将该包的 ProtectionLevel 属性设置更改为 EncryptSensitiveWithPassword

要访问该包的 ProtectionLevel 属性,您可以单击包控制流中的任何地方,然后在属性窗口中选择 ProtectionLevel

接下来,修改 SQL Server 代理作业步骤命令行,以便包括用于对敏感数据进行解密的密码。通过 dtexec 命令提示符实用工具的 /Decrypt 参数可以添加该密码。SQL Server 代理作业步骤使用 dtexec 实用工具来运行包。

05:22

第三种用于解决加密和敏感数据相关问题的方法同样使用的是 Business Intelligence Development Studio:将该包的 ProtectionLevel 属性设置更改为 DontSaveSensitive

使用此属性设置时,不对该包进行加密,并且敏感数据不随该包一起保存。因此,您使用包配置文件来保存这些数据。在这个演示中,我们将为 DestinationConnectionOLEDB 连接管理器保存连接字符串的密码部分。

在 SQL Server 代理作业步骤运行该包时,将从创建的配置文件中加载敏感数据。

请确保将该文件存储在安全的文件夹中。

到现在为止,我们观看了一些可供解决与加密和敏感数据有关问题的方法。

导致代理作业步骤无法运行包的其他情况涉及用户帐户权限。

该用户帐户不具备进行连接或访问包外资源所必需的权限。

08:08

为了测试用户帐户的权限,请打开命令提示符窗口并执行 RunAs 命令。

用帐户凭据中存储的身份验证信息替换 mydomain\myuser。在系统提示时键入帐户密码。

要解决权限问题,建议的做法是创建具有所需权限的 SQL Server 代理的代理帐户。该代理帐户还负责对包中的敏感数据进行解密。

请记住,如果您将该包移到其他计算机并且将该包的 ProtectionLevel 属性设置为 EncryptSensitiveWithUserKeyEncryptAllWithUserKey,此方法可能会失败。

09:12

若要创建代理帐户,您必须是 sysadmin 固定服务器角色的成员。或者,您必须是 msdb 数据库中 SQLAgentOperatorRole、SQLAgentReaderRole 或 SQLAgentUserRole 的成员。

您可以通过运行 Transact-SQL 查询或使用 SQL Server Management Studio 中的“新建代理帐户”(New Proxy Account) 对话框来创建代理帐户。此处我们将使用“新建代理帐户”(New Proxy Account) 对话框。

“常规”(General) 页上,为新的代理帐户指定名称和凭据。我们将这个帐户命名为 Package proxy,并选择一个名为 User1 的现有凭据,其中包含身份验证信息。

请记住,所选凭据必须能够让 SQL Server 代理以创建该包的帐户或具有所需权限的帐户运行该作业。

还需要指定为其启用代理的子系统。因为该作业正在运行包,所以,我们将选择“SQL Server Integration Services 包”(SQL Server Integration Services Package) 子系统。

代理说明是可选项。

“主体”(Principals) 页上,您可以添加或删除角色以便向代理帐户授予访问权限。sysadmin 固定服务器角色的成员具有自动分配的访问权限。

我们为代理帐户指定的 User1 凭据在对象资源管理器中的“凭据”(Credentials) 节点下列出。

您可以通过运行 Transact-SQL 查询或使用“新建凭据”(New Credentials) 对话框来创建新凭据。

此视频演示了如何解决与包不运行有关的问题,即在从 SQL Server 代理作业步骤调用包时,该包不运行。视频中介绍了以下几种建议解决方法:创建代理帐户、修改包的 ProtectionLevel 属性设置、在包配置文件中保存敏感数据,以及在 SQL Server msdb 数据库中存储包。

感谢您观看此视频。希望它对您有所帮助,欢迎您返回网站观看其他 Microsoft SQL Server 视频。