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

时间:2011-07-21 15:01:40

标签: sql-server ssis data-warehouse etl

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

我遇到了Loop Container的一种无法再现的故障:

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

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

感谢。

3 个答案:

答案 0 :(得分:1)

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

一旦我将日志记录到位,我注意到当Excel打开时,它会生成一个前缀为〜$的excel文件。这是由foreach循环拾取的。

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

答案 1 :(得分:0)

您收到了什么错误消息(SSIS日志/事件报告消息)?

与@Siva类似,我没有遇到过这个问题,但您可以使用一些想法来尝试和诊断。你可能已经在做了其中的一些,我只是为了完整性从我的思考过程中写下来......

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

答案 2 :(得分:0)

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