【问题标题】:SSIS File System Copy Task will not release file for editingSSIS 文件系统复制任务不会释放文件进行编辑
【发布时间】:2017-01-17 15:56:57
【问题描述】:

我正在使用 SSIS 2008 从 SQL 2008 R2 查询中创建一些 .txt 逗号分隔文件。我有一个包含一行列标题的 template.txt 文档,我使用文件系统任务将其复制到新位置。完成后,我使用新创建的文件作为平面文件目标来接受我的 SQL 行。

我遇到的问题是应该将 SQL 插入全新目标文件的数据流任务失败,报告目标文件被另一个进程锁定。鉴于它是一个全新的文件,在我看来,唯一可以锁定它的是创建文件本身的文件系统任务 - 有没有办法阻止这种情况发生或释放锁定?

文件系统任务和所有其他任务都在 foreach 循环中。

我尝试在流程中插入暂停,并使用脚本任务循环直到文件被解锁;都没有工作。我认为必须删除锁,或者首先不创建锁。

我查找的所有内容似乎都假设如果您等待足够长的时间,锁就会消失,但这不是我在这里的经验。

欢迎任何建议。

编辑:

用执行相同操作的脚本任务替换文件系统任务并没有解决问题 - 无论我是否尝试在 foreach 中编辑它,在 foreach 循环中新创建的文件似乎都被包锁定循环或我在包中尝试过的任何地方。

我需要一些方法来释放锁定或阻止它出现在包内的文件中以便能够更新它 - 有什么建议吗?

【问题讨论】:

    标签: file sql-server-2008 ssis locking


    【解决方案1】:

    我会尝试用脚本任务替换 FST。 使用 C# & System.IO 复制模板。 问题可能是 FST 和 DFT 使用相同的文件连接对象。至少如果你让它与脚本任务一起工作,它就无关紧要了。 还要确保你 100% 正在使用你认为你正在使用的文件 - 检查硬编码的表达式或正在应用的配置。

    【讨论】:

    • 好的,所以问题似乎与 FST 无关 - 使用包含 File.Copy(Template_File_Path, Target_File_Path); 的脚本任务会导致后面的 DFT 失败并出现同样的错误。是否与 ForEach 循环有关,也许..?
    • 只是澄清一下 - 不幸的是,这种方法没有产生任何结果。
    【解决方案2】:

    尝试将每个片段(FST 和 DFT)包装在其自己的序列容器中。我已经遇到文件锁定问题大约 2 年了,我刚刚解决了一个问题,即通过将 3 个数据提取包装在序列容器中,将数据提取到其中后阻止 3 个文件的 FTP。 FTP 任务已经在序列容器中。

    【讨论】:

    • 我将在我的答案中补充一点,即我在文件系统任务期间/之后所做的有关文件锁定的所有在线研究都指出了存储在共享驱动器上/从共享驱动器访问的文件的问题。这些都没有帮助我的情况。由于我已经开始将序列容器用于复杂的多步骤 ETL 过程,因此我决定将它们用于每个数据提取片段,然后是 FTP 过程。它奏效了。
    • 我将提供另一个通过大量研究和故障排除获得的花絮。 Microsoft Sysinternals 工具集包括一个名为 psfile.exe 的可执行文件,它支持高级文件管理命令,包括使用路径和文件名而不是特定文件 ID 关闭所有打开文件锁的能力。运行以下命令行将清除指定文件上的所有打开文件锁定: • C:\windows\psfile.exe ":\\" -c
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多