SSIS – 进程无法访问该文件,因为它正由另一个进程使用
我有以下Dataflow:
控制:
我只想将源文件夹中flatfiles的所有数据复制到sql数据库,并在复制后将这些文件移动到名为Done的文件夹中。
但是当我运行这个时,我得到错误:
[File System Task] Error: An error occurred with the following error message: "The process cannot access the file because it is being used by another process.".
数据被复制到sqlserver,但文件不会移动。
我的进程选项卡如下:
这可能太明显了,但您是否尝试插入一个短暂的延迟来为数据流提供时间来释放文件? 例如,插入一个执行SQL任务,其内容如下:
-- Wait for 1 second WAITFOR DELAY '00:00:01'
或者,您可以处理故障路径并重试,可能是在延迟之后。
如果您使用SSIS连接管理器中的Excel连接。 RetainSameConnection酒店。 默认情况下是这样。 把它弄错,你就会全力以赴。
我偶然发现了这个链接并发布了这个链接以帮助其他人来到这里。
使用脚本任务时,请确保断开与Close()的连接或使用USING()内的连接。
在任务完成后保持连接,直到整个包完成,除非您执行上述任一操作。
如果消息引用了您的“.ispac”文件,那么您将获得一个未关闭的调试。 进入任务管理器并关闭调试主机。
对我来说,这个错误与SSIS无关,并且在最终任务没有响应BIDS之后发生
我的一个excel文件被BIDS调试器(DtsDebugHost.exe)锁定,关闭BIDS没有帮助。
最后使用http://filehippo.com/download_unlocker/向我展示了实际的储物柜,并简单地将其删除。
请注意,解锁DtsDebugHost.exe后需要重新启动BIDS
我将此函数与等待例程一起使用:
public bool IsFileLocked(string filePath) { try { //Open the file exclusively using (File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) { } } catch (IOException e) { var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1); return errorCode == 32 || errorCode == 33; } return false; }
如果您使用的是Excel连接,请在尝试移动/重命名文件之前,在脚本任务中使用以下代码(C#)关闭所有Excel进程。
System.Diagnostics.Process[] proc=System.Diagnostics.Process.GetProcessesByName("Excel"); foreach (System.Diagnostics.Process p in proc) { if (!string.IsNullOrEmpty(p.ProcessName)) { try { p.Kill(); } catch { } } }