【问题标题】:SSIS DTSX package losing data in a SQL Server Agent jobSSIS DTSX 包在 SQL Server 代理作业中丢失数据
【发布时间】:2011-07-19 09:14:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 哇...感谢 Siva 的详细回答。事实证明,在某种程度上,你们都是对的。在服务器上运行使用了一组不同的权限,并且服务器上的文件夹的安全设置不正常。

标签: sql sql-server-2005 variables ssis sql-server-agent


【解决方案1】:

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

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

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

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

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

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

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

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

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

  3. 在步骤部分,点击New...,如屏幕截图#3所示。

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

  5. 如果您有包的 SSIS 配置文件 (.dtsConfig),请单击 Configurations 选项卡并添加配置文件,如屏幕截图 #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. 在“新建代理帐户”窗口中,提供代理名称,选择新创建的凭据,提供说明并选择 SQL Server 集成服务包,如屏幕截图 #12 所示。应如屏幕截图 #13 所示创建代理帐户。

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

希望对您有所帮助。

屏幕截图 #1:

屏幕截图 #2:

截图#3:

屏幕截图 #4:

屏幕截图 #5:

屏幕截图 #6:

截图#7:

截图#8:

屏幕截图 #9:

屏幕截图 #10:

屏幕截图 #11:

屏幕截图 #12:

屏幕截图 #13:

屏幕截图 #14:

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多