0

我有一个 SSIS 作业,它从输入 FTP 目录中获取文件并将内容解压缩到临时目录中以进行进一步处理。我在输入 FTP 目录上使用了 For-Each 目录循环,其中调用了 Winzip。命令行调用的参数使用 SSIS 表达式构建器使用输入文件的文件名和临时目录的名称进行配置。在表达式生成器中看起来像这样:

 -e  " +  @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + "  " + @[User::TempFolder] 

现在,当我从 VS2005 在本地运行它并通过网络访问相关文件时,这一切都可以正常工作。但是当我部署到应用程序服务器时,我没有从另一端得到任何东西;它只是挂在那里。变量似乎在此过程中丢失了。

有什么想法吗?有没有人从 SSIS 包中看到类似的行为?

4

2 回答 2

1

当您在 中运行 SSIS 包时Business Intelligence Development Studio (BIDS),它会在您的凭据下执行,并且您可能对文件提取到的文件夹拥有完全权限。当您计划包在 SQL Server 代理中运行时,包将在 下运行SQL Agent Service Account,该帐户可能无权访问该文件夹。

  • 如果您有权登录托管数据库的服务器,请登录服务器并双击该包。当您双击该包时,它将带来 dtexec 实用程序。在实用程序中运行包,如果它在服务器内成功运行,则问题更可能与权限有关。

  • 要检查的另一件事是变量是否有@[User::InputFolder]可能在路径中包含空格。在这种情况下,该参数在传递给 Winzip 命令行参数时应该用双引号括起来。

  • 是否有可能无法从托管 SQL 作业的服务器访问 FTP 服务器?由于防火墙阻止,我遇到了这样的问题。

  • 在包上启用Logging选项将有助于捕获错误消息。这是一个解释如何启用日志记录的链接。

  • 我假设问题中提供的表达式不是完整的表达式,因为那是行不通的。它必须以这样的双引号开头才能正确评估。表达: "-e " + @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + " " + @[User::TempFolder]

以下步骤描述了如何设置 SQL 作业以运行 SSIS 包。如果您可以SQL Server Agent通过 SQL Server Management Studio 访问,以下是使用图形用户界面创建作业的步骤。这些步骤展示了如何创建一个 SQL 作业以使用 SQL 代理服务帐户运行 SSIS,以及如何创建一个代理以使用不同的凭据在不同的环境下运行。如果问题是由于权限引起的,在不同的帐户下运行可能会帮助您解决问题。

  1. 转到 SQL Server 管理工作室。展开SQL Server Agent并右键单击 Jobs,然后如屏幕截图 # 1New Job...所示选择。

  2. 提供名称,默认情况下所有者将是创建作业的帐户,但您可以根据您的要求进行更改。如果您愿意,请指定一个类别并提供描述。参考截图# 2

  3. 在 Steps 部分,单击New...如屏幕截图 # 3所示。

  4. 在“新建作业步骤”对话框中,提供步骤名称。SQL Server Inegration Services Package从类型中选择。此步骤将SQL Agent Service Account默认运行。选择包源作为File system并通过单击省略号浏览到包路径。这将填充包路径。参考截图# 4。如果您不希望在 下执行该步骤SQL Agent Service Account,请参阅步骤 # 8 - 9以了解如何使用其他帐户。

  5. 如果您有包的 SSIS 配置文件 (.dtsConfig),请单击“配置”选项卡并添加配置文件,如屏幕截图 # 5所示。

  6. 单击“确定”,在步骤 1 中有包,如屏幕截图 # 6所示。同样,您可以创建不同的步骤。

  7. 创建作业后,您可以右键单击作业并选择Script Job as --> CREATE To --> New Query Editor Window生成脚本,如屏幕截图 # 7所示。

  8. 要在不同的帐户下运行 SSIS 步骤,请在 Management Studio 上导航到Security --> right-click on Cedentials --> select New Credential...如屏幕截图 # 8所示。

  9. New Credential对话框中,提供您希望在 SQL 作业中执行 SSIS 步骤的凭据名称、Windows 帐户和密码。参考截图# 9。将创建凭证,如屏幕截图 # 10所示。

  10. 接下来,我们需要创建一个代理。在 Management Studio 上,导航到SQL Server Agent --> Proxies --> right-click on SSIS Package Execution --> select New Proxy...如屏幕截图 # 11所示。

  11. 在 New Proxy Account 窗口中,提供代理名称,选择新创建的凭据,提供描述并选择 SQL Server Integration Services Package,如屏幕截图 # 12所示。应该创建代理帐户,如屏幕截图 # 13所示。

  12. 现在,如果您返回 SQL 作业中的步骤,您应该会在Run as下拉菜单中看到新创建的代理帐户。参考截图# 14

希望有帮助。

截图#1:

1

截图#2:

2

截图#3:

3

截图#4:

4

截图#5:

5

截图#6:

6

截图#7:

7

截图#8:

8

截图#9:

9

截图#10:

10

截图 #11:

11

截图#12:

12

截图#13:

13

截图#14:

14

于 2011-07-19T10:25:16.703 回答
1

我的建议是在每个 SSIS 任务的执行后事件上启用日志记录(如果您还没有),以确定包在哪个点失败。

例如,可能是运行 SQL Server 代理作业的用户在 FTP 目录中没有权限。

于 2011-07-19T09:21:23.917 回答