带有Foreach文件枚举器选项的Foreach循环容器将所有文件迭代两次



我正在使用SSIS Foreach循环容器来迭代网络共享上具有特定模式的文件。

我遇到了循环容器不可复制的故障:

有时循环执行两次。处理完所有文件后,从第一个文件开始。

有人遇到过类似的bug吗?也许不是直接使用SSIS,而是使用某种技术访问Windows共享上的文件?这个错误是否与某些网络问题有关?

谢谢。

我发现在处理Excel文件并使用*.xlsx通配符来驱动foreach时就是这种情况。

一旦我把日志记录的地方,我注意到,当Excel被打开,它产生了一个Excel文件前缀~$。这是由foreach循环发现的。

所以我使用了类似于http://geekswithblogs.net/Compudicted/archive/2012/01/11/the-ssis-expression-wayndashskipping-an-unwanted-file.aspx的技巧来排除文件名中带有~$的文件。

您得到什么错误消息(SSIS日志/Eventvwr消息)?

与@Siva类似,我没有遇到过这个,但有些想法可以用来尝试和诊断。你可能已经在做其中的一些了,我只是把它们写下来,以确保我的思维过程的完整性。

  • 记录处理的所有文件。对日志文件/表进行预处理(每个文件),然后进行后处理(每个文件)。保留每个文件的完整路径。这实际上是我们在ETL实现中所做的标准,因为用户经常回来问我们关于何时/加载了什么。这将允许您查看文件是否实际上被处理两次。
  • 也许可以尝试将每个文件在处理后移动到不同的目录。这将使对文件进行第二次处理变得更加困难,并且问题可能会消失。(如果你是从一个"主"区域处理它们(因此不能移动它们),考虑将文件复制到一个"等待"文件夹,然后处理它们并将它们移动到一个"已处理"文件夹)
  • @Siva的评论很有趣——看看"遍历子文件夹"复选框。
  • 检查你的eventvwr是否有奇怪的网络事件,或应用程序事件(SQL Server重新启动?)
  • 使用perfmon来查看服务器上的网络负载是否有任何奇怪的事情发生(有点随机的想法!)
  • 尝试在本地磁盘而不是网络磁盘上运行整个进程,如果你的平均失败时间是在运行10次之后,那么你可以在本地加载20-30次,如果你没有得到错误可能是网络错误

没有任何帮助-我实现了以下解决方案:在foreach迭代器中跟踪所有文件的脚本任务。如果文件已经加载,则会触发警告,并且不再处理该文件。无论如何,似乎是一些网络相关的问题…

最新更新