去年12月,我得到了这个SSIS包的工作。它只在周五早上运行。上周五它失败了,并显示以下错误消息:
包:错误:SSIS 错误代码DTS_E_OLEDBERROR。 发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。 源:"Microsoft Access 数据库引擎" 结果: 0x80004005 说明:"Microsoft Access 数据库引擎无法打开或写入文件'\\ServerShare\IT\Reports\Export Templates\YoderReport.xlsx'。它已经由其他用户专门打开,或者您需要权限才能查看和写入其数据。
我查看了其他几个类似的问题,但它们没有回答我的问题。我已经检查以确保没有人打开该文件。
有问题的文件是一个模板,被复制然后填充,所以没有人应该打开它,首先。
我尝试将RetainSameConnection
更改为True
,但没有区别。我已经在调试模式下运行了它,它工作正常。
有人知道如何清除它以便它再次自动运行吗?
更新
经过一些进一步的测试,文件似乎正在获取数据,但没有被复制。这是我的设置:
- 我有一个从我的模板复制模板的
File System Task
文件夹到我的导出文件夹。 - 然后我有一个
Data Flow Task
-
- 从运行 SQL 脚本以拉取数据的 OLE DB 源开始
-
- 运行
Data Conversion
以将几个字段更新为正确的格式
- 运行
-
Excel Destination
用于输出。(这是复制到"导出"文件夹的模板
-
- 还有一个
Flat File Destination
以防万一有任何错误
- 还有一个
- 然后使用另一个
File System Task
返回控制流,这将文件从导出文件夹移动到共享驱动器上的最终目标
当我从VS 2015运行它时,它工作正常并创建文件。当我从 SQL 代理作业运行它时,它失败并显示上述错误消息。我唯一能想到的是,在Data Flow Task
Excel Destination
没有在最终File System Task
尝试复制文件之前释放文件?但如果是这样的话,为什么现在才开始发生呢?
我认为文件路径中存在问题,因为您可以看到文件路径以一个反斜杠开头:
ServerShareITReportsExport TemplatesYoderReport.xlsx
如果它在网络上,也许它应该以双反斜杠\
开头
\ServerShareITReportsExport TemplatesYoderReport.xlsx
或者分区丢失 --> 不完整的路径
检查向连接管理器提供文件路径的方式(如果使用表达式)
同样基于这篇微软文章,有两个可能的原因:
- 您必须具有读取指定文件中的数据的权限才能查看其数据。若要更改权限分配,请与系统管理员或表或查询的创建者联系。
- 您尝试以独占方式打开指示的文件,但另一个用户已打开该文件。
看起来像一个访问问题。确保代理服务帐户以对网络共享路径的完全权限运行。也许您可以在代理服务器上尝试使用您的凭据。
此外,请确保 Excel 目标连接字符串支持 .xlsx。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:pathxxx.xlsb;Extended Properties="Excel 12.0;HDR=YES";
将"Excel 12.0
"更改为"Excel 12.0 Xml
"将告诉提供者以.xslx格式输出。