处理平面文件时出现“无法访问文件”错误

时间:2014-01-14 13:25:00

标签: ssis

我们有一个SSIS 2008R2流程,其中包括在执行远程过程调用的任务中启动外部应用程序的步骤。外部应用程序将输出生成为平面文件,然后SSIS将接收并处理该文件。外部进程完成后,启动它的任务将成功完成。

我们的问题的执行摘要版本是我们似乎总是必须在处理平面文件的步骤成功之前运行包两次。任何人都知道为什么,以及我们可能会尝试解决这个问题?

以下是血腥的细节:

SSIS包在外部进程运行时暂停,正如它应该执行的那样,并在尝试读取已生成的文件之前等待外部应用程序的“全部清除”。 (FWIW,外部应用程序在启动时创建文件,然后在运行过程中填充它。)

我们的问题是,在开发过程中从BIDS运行包时以及在测试包时作为计划的SQL Server作业运行时,包都会有时(bot并不总是)失败并报告无法打开文本文件。但是,它并不一致。

有问题的文件被写入网络共享。我们已经验证了该作业运行所在的网络帐户以及开发人员可以访问该共享。

我们尝试添加执行以下操作的脚本任务:

  • 验证文件是否存在
  • 如果文件存在,请尝试在独占模式下将其作为读/写访问流打开。
  • 如果文件不可用,请等待指定的时间再试一次。继续尝试,直到它成功打开(然后再次关闭),或者直到达到尝试次数限制。
  • 成功打开文件后,关闭流并等待几秒钟,以防出现某种延迟问题。

虽然脚本设计为报告失败,如果它永远无法打开文件,我们从未见过代码的分支实际执行(即我们总是试图打开文件成功)。

我们知道网络很繁忙,在我们关闭文件后的几微秒内,可以在我们的背后出现并再次打开它,但绝对没有理由期待这个在我们的环境中就是这样。

最后,当按计划从SQL Server作业运行包时,它总是失败。当我们只做手动重新执行作业时,它似乎“永远”成功。 (并非总是这样;在我们成功尝试打开文件之后我们提高了等待时间,即使这还不够。)

我们用来测试平面文件是否可以打开的代码来自StackOverflow上的一个帖子。我很高兴发帖,如果有人认为我们的测试本身可能会导致问题,但很难理解这是怎么回事,因为包有时会

1 个答案:

答案 0 :(得分:0)

让我们试试下面...... 您可以在SSIS包执行下创建代理吗? 尝试使用此代理执行此步骤(编辑步骤后运行方式下拉列表)。