繁体   English   中英

SSIS DTSX package 在 SQL 服务器代理作业中丢失数据

[英]SSIS DTSX package losing data in a SQL Server Agent job

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

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

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

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

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

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

当您在Business Intelligence Development Studio (BIDS)中运行 SSIS package 时,它会在您的凭据下执行,并且您可能对文件提取到的文件夹拥有完全权限。 When you schedule the package to run in SQL Server Agent, the package will run under SQL Agent Service Account , the account may not have access to the folder.

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

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

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

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

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

Following steps describe how to set up an SQL job to run SSIS package.If you have access to SQL Server Agent through SQL Server Management Studio, here are the steps to create a job using the Graphical User Interface. 这些步骤显示了如何使用 SQL 代理服务帐户创建 SQL 作业以运行 SSIS,以及如何创建代理以在不同的凭据下运行。 如果问题是由于权限引起的,在不同的帐户下运行可能会帮助您解决问题。

  1. Go 到 SQL 服务器管理工作室。 展开SQL Server Agent并右键单击作业,然后单击 select New Job... ,如屏幕截图 # 1所示。

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

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

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

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

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

  7. 创建作业后,您可以右键单击作业和 select 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对话框中,提供一个 Credential 名称、Windows 帐户和 Password,您希望在 SQL 作业中执行 SSIS 步骤。 参考截图# 9 将创建凭证,如屏幕截图 # 10所示。

  10. 接下来,我们需要创建一个代理。 On the Management Studio, navigate to SQL Server Agent --> Proxies --> right-click on SSIS Package Execution --> select New Proxy... as shown in screenshot # 11 .

  11. On the New Proxy Account window, provide a Proxy name, select the newly created Credential, provide a description and select SQL Server Integration Services Package as shown in screenshot # 12 . 应该创建代理帐户,如屏幕截图 # 13所示。

  12. 现在,如果您 go 回到 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM